Struts官网关于struts 1和struts 2的对比

原文地址:http://struts.apache.org/release/2.1.x/docs/comparing-struts-1-and-2.html

声明:由于本人英语水平有限and技术水平有限,不精准之处还望包涵。 

 

特性 Struts 1 Struts 2
Action 类 Struts 1要求Action类必须继承一个抽象的基类。从而当我们使用Struts 1开发运用时,以面向抽象类的方式编程而不是面向接口的方式编程。 Struts 2 Action 可以实现Action接口和其它接口来提供可选的可定制的服务。Struts 2提供了ActionSupport基类来实现通用的接口。Action 接口非必选的。任何包含execute签名的POJO对象都可以作为Struts2 Action 对象。
线程模型 Struts 1 Action是单例的切必须是线程安全的,因此针对某个Action的请求,Servlet容器只会生成该Action的一个实例。单例策略限制了Struts 1 Action的功能。Action 资源必须是线程安全或者同步的。 Struts 2 为每个请求实例化Action 对象,因此不会产生线程安全问题。
Servlet依赖 Struts 1 Action依赖Servlet API,因为当Action被调用时,HttpServletRequest和HttpServletResponse将作为参数传入execute方法。 Struts 2 Action没有与servlet容器耦合。servlet上下文环境经常是以简单的Map来表示,这样的话,Action可以脱离servlet容器测试。Struts 2 Action依然可以访问原生的request和response。
可测试性 测试Struts 1Action主要的障碍就是execute方法暴露了Servlet API。第三方的扩展组件Struts TestCase为Struts 1提供一系列的mock对象。 通过实例化Action,设置属性和调用方法来测试Struts 2 Action。Struts 2 对依赖注入的支持使得测试更加的简单。
捕获输入(Harvesting Input) Struts 1 使用ActionForm对象来捕获input。与Action一样,所有的ActionForm必须继承一个基类。因为其他的JavaBean不能作为ActionForm,所以开发者经常创建过多的类来捕获input。DynaBeans作为另外一种方法来创建通用的ActionForm类,但是,开发者可能要重现描述已经存在的JavaBean。 Struts 2 使用Action属性作为Input属性,从而我们不再需要另外的input对象。 Input属性可以是拥有自己的属性的复杂的对象类型。通过标签库可以从web页面访问Action属性。Struts 2 除了支持POJO form对象,POJO Action,也支持ActionForm模式。 包括业务或者域对象的负责对象类型可以作为input/output对象。ModelDriven特性简化了对POJO input对象的标签的索引。
表达式语言 Struts 1 整合了JSTL,所以它使用JSTL 表达式语言。表达式语言具有基本的对象图遍历的功能,但是对集合和索引的属性支持方面相对薄弱。 Struts 2 可以使用JSTL,但同时还支持强大且不失灵活的OGNL表达式语言。
绑定值到视图 Struts 1 使用标准的JSP机制绑定对象到page context中供访问。 Struts 2 使用“ValueStack”技术,从而标签库不需要耦合视图和它要渲染的对象类型。值栈(ValueStack)策略允许重用跨越了不同类型(拥有相同的属性名不同的属性类型)的视图
类型转换 Struts 1 ActionForm属性通常都是字符串。Struts 1 使用Commons-Beantuils组件进行类型转换。 Struts 2 使用OGNL进行类型转换。框架自带了一些基本的通用的对象类型和基本属性类型的转换器。
验证 Struts 1 通过ActionForm的validate方法或者通过一个Commons Validator的扩展组件手动验证。同样的类可以有不同验证上下文,但是不支持多态验证(chainto validations on sub-objects)  Struts 2 通过validate方法和XWork Validation框架手动验证。Xwork Validation框架支持多态验证(chaining validation into sub-properties using the validations defined for the properties class type and the validation context. )
控制Action执行  Struts 1 支持每个模块拥有不同请求处理器,但是同一模块的所有的Action必须共享同样的生命周期。 基于拦截器栈,Struts 2为每个Action创建不同生命周期。同时可以创建自定义的拦截器栈。

 

你可能感兴趣的:(比较,struts1,comparing,Struts 2)