Spring学习——SpringMVC和Struts2的区别
来源:互联网 发布:免费数据分析软件 编辑:程序博客网 时间:2024/06/06 03:28
概述
Struts2框架中,Action类是其核心类,XxxAction被称作业务逻辑控制器,实现了对用户请求信息的处理。Struts2框架的引入,使用XxxAction作为控制层,将视图层和模型层相分离,真正实现了MVC开发模式,使得整个工程分成Model(持久层/业务层)、View、Controller三层,使得软件耦合度被降低。
SpringMVC和Struts2框架的功能相似,也是实现视图层和控制层的分离,使得软件耦合度降低,SpringMVC 是Spring内置的Spring web框架。
小结:Struts2和Spring MVC都是web框架,工程中引入它们的目的都是将视图层和控制层分离,使得代码进一步解耦。Spring MVC是Spring项目的内置web框架,而Struts2则和Spring组织没有直接的关联。
区别
spring会稍微比struts快,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,拦截到方法后根据参数上的注解,把request数据注入进去。
struts2框架是类级别的拦截,一个Action对象对应一个request上下文。每次来了请求就创建一个Action。如果想要Struts2变成方法级别的拦截,即不同的请求对应于类中的不同方法,就需要在 struts2的配置文件中使用元素的method属性进行配置才可以实现一个request对应于类中的一个方法,从而实现方法级别的拦截。Struts2和springMVC的数据共享方式不同。
(1) struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据注入。struts2实际上是通过setter getter方法与request打交道的。其类属性被所有方法共享,虽然方法之间也是独立的,但其所有Action变量是共享的。
(2) springmvc拦截到方法后根据参数上的注解,把request数据注入进去。方法之间基本上独立的,独享request response数据,请求数据通过参数获取,不共享变量。Struts2和springMVC的拦截机制不同。struts有自己的interceptor机制,spring mvc用的是独立的AOP方式。
Struts2和springMVC的实现机制不同。spring mvc 的入口是servlet, 而struts是filter(这里要指出,filter和servlet是不同 的。可以认为filter是servlet的一种特殊,是一个servlet链)
设计思想上,Struts2更加符合OOP的编程思想, SpringMVC就比较谨慎,在servlet上扩展。
springmvc的验证支持JSR303,处理ajax的请求更是方便,只需一个注解@ResponseBody ,然后直接返回响应文本即可。
SpringMVC开发效率和性能高于Struts2。SpringMVC没有struts2的配置文件量,使用更加简洁,开发效率更高
Struts2与Struts的区别
1、Struts1的Action类必须要继承Action,而Struts2的则可以不继承。
在struts中都是使用抽象类编程而不是接口,因此他要求开发Action类继承一个抽象的基类,如DispatchAction等。
Struts2则基于接口编程,我们的Action类可以实现一个Action接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现常用的接口。更加强大的是,在struts2中Action接口不是必需的,任何有execute()函数的pojo对象都可以用作struts2的Action类来使用。
2、Struts1是线程不安全的,而Struts2是线程安全的。
Struts1的Action是单例模式,在运行的时候,只有一个Action实例来处理所有的请求,单例模式的策略限制了Action的功能,因此我们在开发的过程中必须要保证Action资源是线程安全的或者同步的,否则会出现线程安全问题。
而Struts2的Action是多例的,会为每一个请求创建一个实例,因此不存在线程安全问题。
3、Struts1使用ActionForm接收表单数据,而Struts2直接让Action来收集表单数据。
Struts1收集数据通常使用ActionForm,而ActionForm还需要继承。使ActionFrom的复用率降低,如果项目非常大的话就会产生大量的ActionForm,这给维护工作带了非常大的工作量,但是其好处是将数据的收集和控制进行了很好的分离。
Struts2在收集表单数据方面可采用的方式就比较多了,可以直接让Action来收集表单数据,但也可以采用类似于ActionForm的方式来收集数据,Struts2采用了ModelDriven的方式来支持类似Struts1的ActionForm方式,当然了Struts2也支持使用ActionForm的方式,因此Struts2更加的灵活
4、Struts1和Struts2常用的表达式语言不同
struts整合了JSTL,这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱
struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言OGNL
5、两者的类型转换不同
struts的ActionForm属性通常都是String类型,并不使用 Commons-Beanutils进行类型转换。每个类提供一个转换器,对每个实例来说是不可配置的;
struts2使用OGNL进行OGNL进行类型转换,提供了基本和常用对象转换器。
6、后台向页面传值技术不同
struts使用标准jsp机制把对象绑定到页面中来访问
struts2使用ValueStack(值堆栈)技术,使taglib能够访问值,而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)
7、 数据校验
struts支持在ActionForm的Validate方法中手动校验,或者通过Commons Validator来扩展校验。同一个类可以有不同的校验内容,但不能校验子对象;
struts2支持通过validata()方法和XWork校验框架来进行校验,XWork校验框架使用为属性类型定义的校验和内容校验,来支持chain校验子属性。
8、Action的执行控制不同
struts支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须提供相同的生命周期;
struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期,堆栈能够根据需要和不同的Action一起使用
- Spring学习——SpringMVC和Struts2的区别
- 【Spring】springMVC和struts2的区别
- Spring、SpringMVC和Struts2的区别
- SpringMVC学习笔记——Spring MVC与Struts2的区别1
- SpringMVC学习笔记——Spring MVC与Struts2的区别2
- SpringMVC 和Struts2的区别
- struts2和springmvc的区别
- Struts2和springMVC的区别
- springmvc和struts2的区别
- springMVC和Struts2的区别
- SpringMVC和Struts2的区别
- springmvc 和struts2的区别
- springmvc 和struts2的区别
- springmvc 和struts2的区别
- springmvc 和 struts2的区别
- SpringMvc和Struts2的区别
- struts2和springMVC的区别
- springmvc和struts2的区别:
- java学习笔记3---AbstractList
- HDU 1251 统计难题
- win-Anaconda-juypter notebook 打开
- bzoj2152 聪聪可可
- 机器学习方法篇(18)------聚类
- Spring学习——SpringMVC和Struts2的区别
- JAVA小项目--银行管理系统
- pycharm 导入自定义模块提示 no module name
- 类型错误的两种容错处理
- UIImagePickerController iOS11调起相册 中的照片被导航栏遮挡
- Windows进程销毁
- Gamma & Linear Color Space
- 《算法4》最短路径之Dijkstra与Bellman-Ford算法
- 对于我这种不懂代码不懂软件的老百姓,想下载个资源真难啊