标签:http 使用 io for 问题 cti res 学习
一、struts2和struts1的区别
1.Action类
a) Struts1要求Action类继承于一个抽象类,Struts1普遍使用抽象类编程而不是接口
b) Struts2的Action类可以实现一个Action接口,也可以实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现常用的接口。Action接口不是必须的,任何有execute标识的POJO对象都可以作为Struts2的Action对象。
2.线程模式
a) Struts1的Action是单例模式并且必须是线程安全的,因为仅有一个Action类来处理所有请求。
b) Struts2的Action对象为每一个请求产生一个实例,因此没有线程安全问题。实际上Servlet容器为每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收的问题。
3.Servlet依赖
a) Struts1 Action依赖于Servlet API,因为当一个Action被调用时,HttpServletRequest和HttpServletResponse被传递给execute方法。
b) Struts2 Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action依然可以访问原始的request和response。但是,其他的元素减少或者消除了,有直接访问HttpServletRequest和HttpServletResponse的必要性。
4.可测性
a) 测试Struts1 Action的一个主要问题是execute方法暴露了Servlet API(这使得测试要依赖于容器)。一个第三方拓展-Struts TestCase提供了一套Struts1 的模拟对象来进行测试。
b) Struts2 Action可以通过初始化、设置属性、调用方法来测试,"依赖注入"支持使得测试更加容易
5.表达式语言
a) Struts1 整合了JSTL,因此使用JSTL EL。这种EL有基本对乡土便利,但是对于集合和索引属性的支持很弱。
b) Struts2 可以使用JSTL,它更支持一个更强大和灵活的表达式语言OGNL(Object-Graph Navigation Language)对象图导航语言。
c) Struts1使用标砖JSP机制把对象绑定到页面中来进行访问
d) Struts2使用ValueStack技术,是她个礼拜能够访问值而不需要把页面和对象绑定起来。ValueStack策略允许通过一系列名称相同单类型不同的属性重用页面
6.类型转换
a) Struts1 ActionForm属性通常是String类型。Struts1使用Commons-Beanutils进行类型转换。每个类一个转换器,对每一个实例来说是不可配置的。
b) Struts2 使用OGNL进行类型转换。由它(OGNL)提供基本和常用对象的转换器。
7.校验
a) Struts1 支持在ActionForm的validate()方法中手动校验,或者通过Commons Validator的拓展来校验。同一个类可以有不同的校验内容,但不能校验子对象。
b) Struts2 支持通过validate()方法和XWork校验框架来进行校验。XWork校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性。
8.Action执行的控制
a) Struts1 支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期
b) Struts2 支持通过拦截器堆栈(Interceptor Stacks)为每个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。
标签:http 使用 io for 问题 cti res 学习
原文地址:http://www.cnblogs.com/Xuen-zhang/p/3896455.html