Java中struts2和spring MVC的区别_动力节点Java学院整理
1、Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上SpringMVC就容易实现restful url,而struts2的架构实现起来要费劲,因为Struts2中Action的一个方法可以对应一个url,而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。
2、SpringMVC的方法之间基本上独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架,方法之间不共享变量。
3、由于Struts2需要针对每个request进行封装,把request,session等servlet生命周期的变量封装成一个一个Map,供给每个Action使用,并保证线程安全,所以在原则上,是比较耗费内存的。
4、 拦截器实现机制上,Struts2有以自己的interceptor机制,SpringMVC用的是独立的AOP方式,这样导致Struts2的配置文件量还是比SpringMVC大。
5、SpringMVC的入口是servlet,而Struts2是filter(这里要指出,filter和servlet是不同的。以前认为filter是servlet的一种特殊),这就导致了二者的机制不同,这里就牵涉到servlet和filter的区别了。
6、SpringMVC集成了Ajax,使用非常方便,只需一个注解@ResponseBody就可以实现,然后直接返回响应文本即可,而Struts2拦截器集成了Ajax,在Action中处理时一般必须安装插件或者自己写代码集成进去,使用起来也相对不方便。
7、SpringMVC验证支持JSR303,处理起来相对更加灵活方便,而Struts2验证比较繁琐,感觉太烦乱。
8、Spring MVC和Spring是无缝的。从这个项目的管理和安全上也比Struts2高(当然Struts2也可以通过不同的目录结构和相关配置做到SpringMVC一样的效果,但是需要xml配置的地方不少)。
9、 设计思想上,Struts2更加符合OOP的编程思想, SpringMVC就比较谨慎,在servlet上扩展。
10、SpringMVC性能高于Struts2。
11、SpringMVC可以认为已经100%零配置。
总结
以上所述是小编给大家介绍的struts2和spring MVC的区别,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
相关推荐
-
Struts1教程之ActionMapping_动力节点Java学院整理
首先断点走出了processpath方法, 这个方法是用来截取字符串的,今天我们来看怎样获得ActionMapping的方法---processMapping. 在此之前简单说一下ActionMapping,它的源代码中可以看出,其中最重要的属性和我们的mvc小实例中的ActionMapping类似,都是有path.type还有forwardMap,主要是对应的struts-config配置文件而来,这个就是保存这个配置文件的信息到内存中. 具体的mvc小实例的ActionMapping代码如下
-
Struts1之url截取_动力节点Java学院整理
Struts1之url截取 先我们来对ActionServlet深层次进行分析.我们用断点的调试的方式来看底层源码.因为这个实例是post方式提交,所以将断点设置到doPost方法上. 我们debug运行程序,进入doPost里面的方法: 这个方法非常重要是ActionServlet运行的核心方法. 我们进入这个方法: 再继续进入: 我们赫然发现了这样一个方法就是processPath方法,这个方法就是截取字符串的方法.这个方法的源代码如下: /** * <p>Identify and ret
-
struts1之简单mvc示例_动力节点Java学院整理
先看MVC模式流程图(其实MVC设计模式就是java中的model2.): 就像图上所标识的C层主要是Servlet层控制页面跳转,M层就是具体的业务处理逻辑,而JSP就是所谓的V层.MVC是有别于我们所说的三层,我们平常所说的三层是UI层.BLL层.DAL层,具体的区别如图: 从图上能看出来,JSP和Servlet构成了UI层,而Model层分成了BLL层和DAL层(也就是业务逻辑和数据持久层). 从理论上认清了MVC设计模式之后,下面开始动手敲一个MVC设计模式示例代码: JSP索引页面in
-
struts1之ActionServlet详解_动力节点Java学院整理
在web.xml中我们除了配置ActionServlet还配置了一些初始化参数信息,首先我们看第一个config参数,这里配置的是/WEB-INF/struts-config.xml,因为要下面传递一个这样一个配置信息,这个xml文件名是struts1标准的名字,所以这里这个初始化信息完全可以删除,如果不用这个标准名称这里就必须要在这里配置.现在我们配置的是标准名字,所以我们可以删除,这是为什么呢?这里要看ActionServlet源代码才可以. 从图片上我们能看到ActionServlet中已
-
struts1登录示例代码_动力节点Java学院整理
Struts1框架实例-登录实例: 1.实例开始工作-导入jar包,在官网上下载struts1框架包,解压之后导入工程的: 2.之后配置web.xml(这里的具体配置方法可以参见struts1框架包中的实例文件夹webapps中的实例代码中web.xml文件的配置方法): 具体如下: <span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8"?> &
-
Struts1简介和入门_动力节点Java学院整理
本文为大家分享了Struts1简介和入门的学习资料,供大家参考,具体内容如下 1. 框架 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法.也就是说框架是一个半成品的应用程序. 我们所面对的应用程序一般都是分为两部分,一部分是业务相关的组件部分,另一部分是和业务无关的组件部分.而我们知道和业务相关的组件部分的重用性是非常低的,这也是显而易见的事情:而和业务无关的组件部分,如验证.异常.程序流程控制等等服务组件的复用性是非常高的.所以当人们在不同的应
-
Struts1和struts2的区别_动力节点Java学院整理
Struts2其实并不是一个陌生的Web框架,Struts2是以Webwork的设计思想为核心,吸收了Struts1的优点,因此,可以认为Struts2是Struts1和Webwork结合的产物. 简单来说二者的区别是: 一个是Stuts1 ,一个是Stuts2,这是最大的区别,技术方面,Stuts1有个核心控制器,但是只提供了一个接口,也就是execute,还要配置actionform之类的,很麻烦,所以依赖性比较强:而Stuts2是针对拦截器开发的,也就是所谓的AOP思想,可以配置多个act
-
Java中struts2和spring MVC的区别_动力节点Java学院整理
1.Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上SpringMVC就容易实现restful url,而struts2的架构实现起来要费劲,因为Struts2中Action的一个方法可以对应一个url,而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了. 2.SpringMVC的方法之间基本上独立的,独享request respons
-
Java中ArrayList和LinkedList之间的区别_动力节点Java学院整理
一.ArrayList ArrayList是一个可以处理变长数组的类型,这里不局限于"数"组,ArrayList是一个泛型类,可以存放任意类型的对象.顾名思义,ArrayList是一个数组列表,因此其内部是使用一个数组来存放对象的,因为Object是一切类型的父类,因而ArrayList内部是有一个Object类型的数组类存放对象.ArrayList类常用的方法有add().clear().get().indexOf().remove().sort().toArray().toStri
-
Spring MVC拦截器_动力节点Java学院整理
Spring为我们提供了: org.springframework.web.servlet.HandlerInterceptor接口, org.springframework.web.servlet.handler.HandlerInterceptorAdapter适配器, 实现这个接口或继承此类,可以非常方便的实现自己的拦截器. 有以下三个方法: Action之前执行: public boolean preHandle(HttpServletRequest request, HttpServ
-
Spring mvc工作原理_动力节点Java学院整理
SpringMVC框架介绍 Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面. Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块.使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还是 Struts 这样的 Web 框架.通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术.Velocity.Tiles
-
spring mvc常用注解_动力节点Java学院整理
Spring从2.5版本开始在编程中引入注解,用户可以使用@RequestMapping, @RequestParam, @ModelAttribute等等这样类似的注解.到目前为止,Spring的版本虽然发生了很大的变化,但注解的特性却是一直延续下来,并不断扩展,让广大的开发人员的双手变的更轻松起来,这都离不开Annotation的强大作用,今天我们就一起来看看Spring MVC 4中常用的那些注解吧. 1. @Controller Controller控制器是通过服务接口定义的提供访问应用
-
Java中LinkedList详解和使用示例_动力节点Java学院整理
第1部分 LinkedList介绍 LinkedList简介 LinkedList 是一个继承于AbstractSequentialList的双向链表.它也可以被当作堆栈.队列或双端队列进行操作. LinkedList 实现 List 接口,能对它进行队列操作. LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用. LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆. LinkedList 实现java.io.Serial
-
Java中HashSet和HashMap的区别_动力节点Java学院整理
什么是HashSet? HashSet实现了Set接口,它不允许集合中有重复的值,当我们提到HashSet时,第一件事情就是在将对象存储在HashSet之前,要先确保对象重写equals()和hashCode()方法,这样才能比较对象的值是否相等,以确保set中没有储存相等的对象.如果我们没有重写这两个方法,将会使用这个方法的默认实现.. public boolean add(Object o)方法用来在Set中添加元素,当元素值重复时则会立即返回false,如果成功添加的话会返回true. 什
-
Java中抽象类和接口的区别_动力节点Java学院整理
接口 1 因为java不支持多重继承,所以有了接口,一个类只能继承一个父类,但可以实现多个接口,接口本身也可以继承多个接口. 2 接口里面的成员变量默认都是public static final类型的.必须被显示的初始化. 3 接口里面的方法默认都是public abstract类型的.隐式声明. 4 接口没有构造方法,不能被实例化. 5 接口不能实现另一个接口,但可以继承多个接口. 6 类如果实现了一个接口,那么必须实现接口里面的所有抽象方法,否则类要被定义为抽象类. 抽象类 1 如果将一个类
-
Java中List Set和Map之间的区别_动力节点Java学院整理
Java集合的主要分为三种类型: • Set(集) • List(列表) • Map(映射) 要深入理解集合首先要了解下我们熟悉的数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),而JAVA集合可以存储和操作数目不固定的一组数据. 所有的JAVA集合都位于 java.util包中! JAVA集合只能存放引用类型的的数据,不能存放基本数据类型. 世间上本来没有集合,(只有数组参考C语言)但有人想要,所以有了集合 有人想有可以自动扩展的数组,所以有了List 有的
-
Java Thread中start()和run()的区别_动力节点Java学院整理
start() 和 run()的区别说明 start() : 它的作用是启动一个新线程,新线程会执行相应的run()方法.start()不能被重复调用. run() : run()就和普通的成员方法一样,可以被重复调用.单独调用run()的话,会在当前线程中执行run(),而并不会启动新线程! 下面以代码来进行说明. class MyThread extends Thread{ public void run(){ ... } }; MyThread mythread = new MyThr
随机推荐
- 在 Laravel 中 “规范” 的开发短信验证码发送功能
- Highcharts学习之数据列
- freebsd安装图解
- java随机抽取指定范围不重复的数字
- 不错的mod_perl编程的简单应用实例介绍
- js判断设备是否为PC并调整图片大小
- PHP利用Cookie设置用户30分钟未操作自动退出功能
- Python中使用dom模块生成XML文件示例
- Android自定义wheelview随机选号效果
- 利用ROW_NUMBER() OVER函数给SQL数据库中每一条记录分配行号的方法
- MongoDB的Master-Slave主从模式配置及主从复制要点解析
- 实现按关健字模糊查询,并按匹配度排序的SQL语句
- 浅谈javascript 归并方法
- 微信小程序 支付功能(前端)的实现
- Java组件javabean用户登录实例详解
- Android 给空白包签名并上传审核
- 值得分享和收藏的xmlplus组件学习教程
- php简单实现单态设计模式的方法分析
- Dockerfile中CMD和ENTRYPOINT命令详解
- Python图像处理之识别图像中的文字(实例讲解)