文档章节

Struts1.2与Struts2的区别

乐在克里特
 乐在克里特
发布于 2017/02/23 09:50
字数 2384
阅读 6
收藏 0

struts1.2和struts2最大的不同是,struts2集成了Webwork。

区别相当大,2.0改进很多,整合webwork,去掉了一些不常用得标签,

struts2.x是在webwork2的基础上构建的,集成了大量的东西,像什么拦截器,校验框架等,相当复杂,struts1.x相对来说就显得小得多了,东西就那么几个。

特性
Struts 1.2
Struts 2.0

Action类
Struts 1要求Action类要扩展自一个抽象基类。Struts 1的一个共有的问题是面向抽象类编程而不是面向接口编程。
Struts 2的Action类实现了一个Action接口,连同其他接口一起来实现可选择和自定义的服务。Struts 2提供一个名叫ActionSupport的基类来实现一般使用的接口。虽然,Action接口不是必须的。任何使用execute方法的POJO对象可以被当作Struts 2的Action对象来使用。

线程模型
Struts 1 Action类是单例类,因为只有一个示例来控制所有的请求。单例类策略造成了一定的限制幷且给开发带来了额外的烦恼。Action资源必须是线程安全或者同步的。
Struts 2 Action对象为每一个请求都实例化对象,所以没有线程安全的问题。(实践中,servlet容器产生许多丢弃的对象对于每一个请求,多于一个的对象并不影响垃圾收集)

Servlet 依赖
Struts 1的Action类依赖于servlet API以为HttpServletRequest和HttpServletResponse作为参数传给execute方法当Action被调用时。
Struts 2的Action不和容器有关。Servlet上下文被表现为简单的Maps,允许Action被独立的测试。Struts 2的Action可以访问最初的请求和相应,如果需要的话。然而,其他的架构元素减少或者排除直接访问HttpServletRequest或者HttpServletResponse的需要。

易测性
测试Struts 1的主要障碍是execute方法暴露了Servlet API。第三方的扩展,Struts测试用例,提供Struts 1的集合对象。
Struts 2的Action可以通过实例化Action来测试,设置属性,然后调用方法。依赖注入的支持也是测试变得更简单。

接受输入
Struts 1使用ActionForm对象来捕获输入。象Action一样,所有的ActionForm必须扩展基类。因为其他的JavaBean不能作为ActionForm使用,开发者经常创建多余的类来捕获输入。DynaBeans可以被用来作为替代ActionForm的类来创建。但是开发者可以重新描述已经存在的JavaBean。
Struts 2 Action属性作为输入属性,排除第二个输入对象的需要。输入属性可能有丰富的对象类型这些类型有他们自己的属性。Action的属性可以通过标签库来访问。Struts 2也支持ActionForm形式。丰富的对象类型,包含业务或者域对象,可以被当作输入或者输出对象来使用。糢型驱动特性简化标签对POJO输入对象的引用。

表达式语言

Struts 1整和JSTL,所以它使用JSTL的表达式语言。表达式语言有基本的图形对象移动,但是相对很弱的集合和被索引的属性支持。
Struts 2使用JSTL,但是框架也支持更强大和更灵活的表达式,叫做“对象图形符号语言”(OGNL)。

将值绑定要视图上
Struts 1使用标準JSP机製来绑定对象到页面上下文。
Struts 2使用“ValueStack”技术为了标签库可以不用链接你的视图到对象的表现类型来访问值。ValueStack策略允许重用视图。

类型转换
Struts 1的ActionForm属性经常都是String的。Struts 1使用Commons-Beanutils来类型转换。转换每一个类,幷不是为每一个实例配置。
Struts 2使用OGNL来类型转换。框架包含转换器来为基本的和共同的对象类型和原始类型。

验证
Struts 1支持手动验证凭借ActionForm的validate方法,或者通过扩展的公用验证器。类可以有不同的验证上下文来未相同的类,但是不能不能包括验证子对象。
Struts 2支持手动验证凭藉validate方法和XWork验证框架。Xwork验证框架支持一连串的验证子属性使用的验证为了属性类的类型和严正上下文而定义。

Action执行的控制
Struts 1支持独立的请求处理器对于每一个模型,但是所有在模型中的Action必须共享同一个生命周期。
Struts 2支持在每一个Action基础上凭借拦截栈创建不同的生命周期。自定义栈可以被创建幷且使用不同的所需 的Action。

 

特性

Struts 1

Struts 2

Action

Struts 1要求Action类要扩展自一个抽象基类。Struts 1的一个共有的问题是面向抽象类编程而不是面向接口编程。

Struts 2Action类实现了一个Action接口,连同其他接口一起麳实现可选择和自定义的服务。Struts 2提供一个名叫ActionSupport的基类麳实现一般使用的接口。虽然,Action接口不是必须的。任何使用execute方法的POJO对象可以被当作Struts 2Action对象麳使用。

线程模型

Struts 1 Action类是单例类,因为只有一个示例麳控制所有的请求。单例类策略造成了一定的限制幷且给开发带来了额外的烦恼。Action资源必须是线程安全或者同步的。

Struts 2 Action对象为每一个请求都实例化对象,所以没有线程安全的问题。(实践中,servlet容器产生许多丢弃的对象对于每一个请求,多于一个的对象并不影响垃圾收集)

Servlet依赖

Struts 1Action类依赖于servlet API以为HttpServletRequestHttpServletResponse作为参数传给execute方法当Action被调用时。

Struts 2Action不和容器有关。Servlet上下文被表现为简单的Maps,允许Action被独立的测试。Struts 2Action可以访问最初的请求和相应,如果需要的话。然而,其他的架构元素减少或者排除直接访问HttpServletRequest或者HttpServletResponse的需要。

易测性

测试Struts 1的主要障碍是execute方法暴露了Servlet API。第三方的扩展,Struts测试用例,提供Struts 1的集合对象。

Struts 2Action可以通过实例化Action麳测试,设置属性,然后调用方法。依赖注入的支持也是测试变得更简单。

接受输入

Struts 1使用ActionForm对象麳捕获输入。象Action一样,所有的ActionForm必须扩展基类。因为其他的JavaBean不能作为ActionForm使用,开发者经常创建多余的类麳捕获输入。DynaBeans可以被用来作为替代ActionForm的类麳创建。但是开发者可以重新描述已经存在的JavaBean

Struts 2 Action属性作为输入属性,排除第二个输入对象的需要。输入属性可能有丰富的对象类型这些类型有他们自己的属性。Action的属性可以通过标签库麳访问。Struts 2也支持ActionForm形式。丰富的对象类型,包含业务或者域对象,可以被当作输入或者输出对象麳使用。糢型驱动特性简化标签对POJO输入对象的引用。

表达式语言

Struts 1整和JSTL,所以它使用JSTL的表达式语言。表达式语言有基本的图形对象移动,但是相对很弱的集合和被索引的属性支持。

Struts 2使用JSTL,但是框架也支持更强大和更灵活的表达式,叫做“对象图形符号语言”(OGNL)。

将值绑定要视图上

Struts 1使用标准JSP机制来绑定对象到页面上下文。

Struts 2使用“ValueStack”技术为了标签库可以不用链接你的视图到对象的表现类型麳访问值。ValueStack策略允许重用视图。

类型转换

Struts 1ActionForm属性经常都是String的。Struts 1使用Commons-Beanutils麳类型转换。转换每一个类,幷不是为每一个实例配置。

Struts 2使用OGNL麳类型转换。框架包含转换器麳为基本的和共同的对象类型和原始类型。

验证

Struts 1支持手动验证凭借ActionFormvalidate方法,或者通过扩展的公用验证器。类可以有不同的验证上下文麳未相同的类,但是不能不能包括验证子对象。

Struts 2支持手动验证凭藉validate方法和XWork验证框架。Xwork验证框架支持一连串的验证子属性使用的验证为了属性类的类型和严正上下文而定义。

Action执行的控制

Struts 1支持独立的请求处理器对于每一个模型,但是所有在模型中的Action必须共享同一个生命周期。

Struts 2支持在每一个Action基础上凭借拦截栈创建不同的生命周期。自定义栈可以被创建幷且使用不同的所需 Action

 

http://www.cnblogs.com/jerryxing/archive/2012/04/23/2467297.html

另外可以简单看看:

http://blog.sina.com.cn/s/blog_8d395eef01010w92.html

© 著作权归作者所有

共有 人打赏支持
乐在克里特
粉丝 15
博文 268
码字总数 394729
作品 0
杭州
程序员
struts1.2 中parameter之后,继承dispatchaction可以一个action多处理。那struts2中什么属性有这个功能?该继承哪个类?

struts1.2 中parameter属性之后,继承dispatchaction可以一个action多处理。 那struts2中什么属性有这个功能?该继承哪个类?

qjm201000
2013/07/31
316
0
遇到一个很二的sturts2 命名空间问题

今天想再从新搞搞struts2 结果弄得一塌糊涂,终究其问题原因是命名空间的错。 三。命名空间配置 1.不使用命名空间的方式: struts配置: <struts> <include file="struts-default.xml" /> <...

dml124
2012/09/03
0
2
求教fastm如何配置,使用的是struts1、spring、ibatis框架

初学fastm,基于struts1.2、spring、ibatis2整合框架开发,要用到fastm,但由于fastm资料极少,在此,向各位大大请教,在ssi框架中,要怎样配置fastm?需要在哪些配置文件中配置?需要哪些j...

a沐
2013/03/13
328
1
Spring MVC与Struts比较

Struts2与SpringMVC都是比较优秀,也是被广泛使用的Web开发框架,那么他们之间有什么区别呢?今天小博老师就跟大家来讨论下这个问题。 Struts工作流程图 Struts与Spring之间主要有以下几点区...

博为峰教研组
2016/11/24
3
0
Struts1.3 中的ExceptionHandler类源码...有两个同名变量?

struts1.3.10 ExceptionHandler类,Struts1.2中不会这样 这样子也能编译成功???这是为什么,想不通。。。

DragonFK
2011/05/02
172
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

深夜胡思乱想

魔兽世界 最近魔兽世界出了新版本, 周末两天升到了满级,比之前的版本体验好很多,做任务不用抢怪了,不用组队打怪也是共享拾取的。技能简化了很多,哪个亮按哪个。 运维 服务器 产品 之间的...

Firxiao
6分钟前
0
0
MySQL 8 在 Windows 下安装及使用

MySQL 8 带来了全新的体验,比如支持 NoSQL、JSON 等,拥有比 MySQL 5.7 两倍以上的性能提升。本文讲解如何在 Windows 下安装 MySQL 8,以及基本的 MySQL 用法。 下载 下载地址 https://dev....

waylau
40分钟前
0
0
微信第三方平台 access_token is invalid or not latest

微信第三方开发平台code换session_key说的特别容易,但是我一使用就带来无穷无尽的烦恼,搞了一整天也无济于事. 现在记录一下解决问题的过程,方便后来人参考. 我遇到的这个问题搜索了整个网络也...

自由的开源
今天
0
0
openJDK之sun.misc.Unsafe类CAS底层实现

注:这篇文章参考了https://www.cnblogs.com/snowater/p/8303698.html 1.sun.misc.Unsafe中CAS方法 在sun.misc.Unsafe中CAS方法如下: compareAndSwapObject(java.lang.Object arg0, long a......

汉斯-冯-拉特
今天
2
0
设计模式之五 责任链模式(Chain of Responsibility)

一. 场景 相信我们都有过这样的经历; 我们去职能部门办理一个事情,先去了A部门,到了地方被告知这件事情由B部门处理; 当我们到了B部门的时候,又被告知这件事情已经移交给了C部门处理; ...

JackieRiver
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部