特性
|
Struts1.x
|
Struts2
|
Action类
|
Struts1.x要求Action类要扩展自一个抽象基类。Struts1.x的一个共有的问题是面向抽象类编程而不是面向接口编程。
|
Struts2的Action类实现了一个Action接口,连同其他接口一起来实现可选择和自定义的服务。Struts2提供一个名叫ActionSupport的基类来实现一般使用的接口。当然,Action接口不是必须的。任何使用execute方法的POJO对象可以被当作Struts2的Action对象来使用。
|
线程模型
|
Struts1.xAction类是单例类,因为只有一个实例来控制所有的请求。单例类策略造成了一定的限制,并且给开发带来了额外的烦恼。Action资源必须是线程安全或者同步的。
|
Struts2Action对象为每一个请求都实例化对象,所以没有线程安全的问题。(实践中,servlet容器给每一个请求产生许多丟弃的对象,并且不会导致性能和垃圾回收问题)。
|
Servlet依赖
|
Struts1.x的Action类依赖于servletAPI,当Action被调用时,以HttpServletRequest和HttpServletResponse作为参数传给execute方法。
|
Struts2的Action和容器无关。Servlet上下文被表现为简单的Maps,允许Action被独立的测试。Struts2的Action可以访问最初的请求(如果需要的话)。但是,尽可能避免或排除其他元素直接访问HttpServletRequest或HttpServletResponse。
|
易测性
|
测试Struts1.x的主要问题是execute方法暴露了ServletAPI这使得测试要依赖于容器)。第三方的扩展,如StrutsTestCase,提供了一套Struts1的模拟对象(来进行测试)。
|
Struts2的Action可以通过初始化、设置属性、调用方法来测试。依赖注入的支持也是测试变得更简单。
|
捕获输入
|
Struts1.x使用ActionForm对象来捕获输入。象Action一样,所有的ActionForm必须扩展基类。因为其他的JavaBean不能作为ActionForm使用,开发者经常创建多余的类来捕获输入。DynaBeans可以被用来作为替代ActionForm的类来创建。但是,开发者可能是在重新描述(创建)已经存在的JavaBean(仍然会导致有冗余的javabean)。
|
Struts2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。Action属性能够通过web页面上的taglibs访问。Struts2也支持ActionForm模式。rich对象类型,包括业务对象,能够用作输入/输出对象。这种ModelDriven特性简化了taglib对POJO输入对象的引用。
|
表达式语言
|
Struts1.x整合JSTL,所以它使用JSTL的表达式语言。表达式语言有基本的图形对象移动,但是对集合和索引属性的支持很弱。
|
Struts2使用JSTL,但是也支持一个更强大和灵活的表达式语言--"ObjectGraphNotationLanguage"(OGNL)。
|
将值绑定到页面
|
Struts1.x使用标准JSP机制来绑定对象到页面上下文。
|
Struts2使用“ValueStack”技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。
|
类型转换
|
Struts1.x的ActionForm属性经常都是String。Struts1.x使用Commons-Beanutils来进行类型转换。转换每一个类,而不是为每一个实例配置。
|
Struts2使用OGNL进行类型转换。提供基本和常用对象的转换器。
|
验证
|
Struts1.x支持在ActionForm的validate方法中手动校验,或者通过CommonsValidator的扩展来校验。同一个类可以有不同的校验内容,但不能校验子对象。
|
Struts2支持通过validate方法和XWork校验框架来进行校验。XWork校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性
|
Action执行控制
|
Struts1.x支持每一个模块有单独的RequestProcessors(生命周期),但是模块中的所有Action必须共享相同的生命周期。
|
Struts2支持通过拦截器堆栈(InterceptorStacks)为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。
|
结论
前面已经简要介绍了Struts2的起源,并详细对比了Struts2和Struts1.x的差异,读者应该对Struts2的基础有所了解了——包括高层的框架概念和基础的请求流程,并理解Struts1.x和Struts2两者之间在Action方面的差别,Struts2加强了对拦截器与IoC的支持,而在Struts1.x中,这些特性是很难想象的。
同时,读者应该明白:Struts2是WebWork的升级,而不是Struts1.x的升级。虽然Struts2提供了与Struts1.x的兼容,但已经不是Struts1.x的升级。对于已有Struts1.x开发经验的开发者而言,Struts1.x的开发经验对于Struts2并没有太大的帮助;相反,对于已经有WebWork开发经验的开发者而言,WebWork的开发经验对Struts2的开发将有很好的借鉴意义
分享到:
相关推荐
struts1.x和struts2.x区别
Struts2和Struts1.x的全面比较Struts2和Struts1.x的全面比较
struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别struts1和struts2的区别...
struts2-core-2.0.1.jar, struts2-core-2.0.11.1.jar, struts2-core-2.0.11.2.jar, struts2-core-2.0.11.jar, struts2-core-2.0.12.jar, struts2-core-2.0.14.jar, struts2-core-2.0.5.jar, struts2-core-2.0.6.jar,...
在这里,通过一个小例子稍微总结了下struts1和struts2的区别,希望这个能帮助到初学struts的朋友
Struts1.x常用的开发包,需要学习struts1.x朋友可以下载
Struts 2.x权威指南(第3版)
struts2.x jar 全部的lib jar 包
Struts2漏洞检查工具Struts2.2019.V2.3
Struts2与Struts1.x的深度比较Struts2与Struts1.x的深度比较
struts1.x和struts2.0电子书
spring和struts2.x的整合篇spring和struts2.x的整合篇
struts1.x入门教程
struts2-core-2.x.x.jar : Struts2 框架的核心类库 b. xwork-core-2.x.x.jar: XWork类库,Struts2在其上构建 c. ognl-2.6.x.jar: 对象图导航语言(Object Graph Navigation Language),Struts2框架通过其读写对象的...
freemarker与struts 1.x 结合,生成html 在http://blog.csdn.net/chen1255 的web中有详细描述关于freemarker与struts1.x的结合
S2-046 CVE-2017-5638 Struts 2.3.5-2.3.31,Struts 2.5-2.5.10 http://struts.apache.org/docs/s2-046.html 和S2-045一样 S2-045 CVE-2017-5638 Struts 2.3.5-2.3.31,Struts 2.5-2.5.10 ...
struts1.x入门.pdf ,感觉写得还不错
因为struts2+Hibernate+Spring整合J2EE企业级开发框架新手会有很多错误.所以特为新手写了一个框架.在附件里面有oracle最新的jar包和sqlserver2008的连接驱动.
不同 struts2.dtd