关于struts 1和struts 2的对比

特性Struts 1Struts 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创建不同生命周期。同时可以创建自定义的拦截器栈。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值