Act
Struts1.x要求 Act
Struts2的Act
线程模型
Struts1.x Act
Struts2 Act
Servlet 依赖
Struts1.x 的 Act
Struts2 的 Act
易测性
测试Struts1.x的主 要问题是execute方法暴露了Servlet API这使得测试要依赖于容器) 。第三方的扩展,如Struts TestCase,提供了一套Struts1的模拟对象(来进行测试) 。
Struts2的Act
捕获输入
Struts1.x 使用 ActionForm对象来捕获输入。象Act
Struts2 直接使用Act
表达式语言
Struts1.x整合 JSTL,所以它使用JSTL的表达式语言。表达式语言有基本的图形对象移动,但是对集合和索引属性的支持很弱。
Struts2 使用 JSTL,但是也支持一个更强大和灵活的表达式语言--"Object Graph Notation Language" (OGNL)。
将值绑定到页面
Struts1.x使用标准JSP机制来绑定对象到页面上下文。
Struts2 使用“ValueStack”技术,使 taglib 能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view) 。
类型转换
Struts1.x的ActionForm属性经常都是String。 Struts 1.x使用Commons-Beanutils来进行类型转换。转换每一个类,而不是为每一个实例配置。
Struts2使用 OGNL进行类型转换。提供基本和常用对象的转换器。
验证
Struts1.x支 持在 ActionForm 的 validate 方法中手动校验,或者通过 Commons Validator 的扩展来校验。同一个类可以有不同的校验内容,但不能校验子对象。
Struts2 支持通过 validate 方法和 XWork 校验框架来进行校验。XWork 校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性
Act
Struts1.x支持每一个模块有单独的Request Processors(生命周期) ,但是模块中的所有Act
Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Act