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
来源: http://www.bubuko.com/infodetail-2490791.html