Struts2与struts的不同:
(1)Action类 (重要)
1) struts中基于抽象类编程(要求开发Action类继承一个抽象的基类(如: DispatchAction等));
2) Struts2则基于接口编程,(Action类可以实现一个Action接口)
Struts2提供一个ActionSupport基类去实现常用的接口。
在struts2中Action接口不是必需的,
任何有execute()函数的pojo对象都可以用作struts2的Action类来使用。
(2)线程模式 (重要)
1) struts中的Action是单例模式并且必须是线程安全的(仅有Action的一个实例来处理所有的请求)。
(Action资源必须是线程安全的或同步的;)
2) struts2的Action对象为每一个请求产生一个实例,因此没有线程安全问题。
(3)Servlet依赖
1) struts的Action依赖于Servlet API,当一个Action被调用时,HttpServletRequest和HttpServletResponse被传递给执行方法,
例如:
public ActionForward execute(Actionmapping mapping,ActionForm Form,HttpServletRequestrequest,HttpServletResponse
response){
}
2) struts2的Action不依赖于容器,允许Action脱离容器单独被测试。
如果需要,Struts2的Action任然可以访问初始的request和response。
例如下面的这个类MyAction.Java,他可以通过ActionContext对象取得Session值,
也可以通过ServletActionContext对象取得request对象。
(5)捕获输入
1) struts使用ActionForm对象捕获用户输入(所有的ActionForm必须继承一个基类ActionForm。)
因为其他的JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。
动态表单可以作为创建传统ActionForm的选择,但是,开发者可能是再创建已经存在的JavaBean,仍然会导致有冗余的JavaBean;
2) struts2直接使用Action属性作为输入属性,消除对第二个输入对象的需求。输入属性可能是有自己子属性的rich对象类型。
Action属性能够通过Web页面的taglibs访问。同时,struts2也支持ActionForm模式。
(6)表达式语言
1) struts整合了JSTL,这种EL有基本对象图遍历,但是对集合和索引属性的支持很。
2) struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言OGNL。
(7)绑定值到页面
1) struts使用标准jsp机制把对象绑定到页面中来访问。
2) struts2使用ValueStack(值堆栈)技术,使taglib能够访问值,而不需要把你的页面(view)和对象绑定起来。
ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)
(8)类型转换
1) struts的ActionForm属性通常都是String类型,并不使用 Commons-Beanutils进行类型转换。
每个类提供一个转换器,对每个实例来说是不可配置的;
2) struts2使用OGNL进行OGNL类型转换,提供了基本和常用对象转换器。
(9)数据校验
1) struts支持在ActionForm的Validate方法中手动校验,或者通过Commons Validator来扩展校验。
同一个类可以有不同的校验内容,但不能校验子对象;
2) struts2支持通过validata()方法和XWork校验框架来进行校验,
XWork校验框架使用为属性类型定义的校验和内容校验,来支持chain校验子属性。
(10) Action执行的控制
1) struts支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须提供相同的生命周期;
2) struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期,堆栈能够根据需要和不同的Action一起使
用;