1.Action类
Struts1要求Action类要扩展自一个抽象基类。Struts1的一个共有的问题是面向抽象类编程而不是面向接口编程。
Struts2的Action类是实现了一个Action接口。
2.线程模型
Struts1的Action类是单例类,因为只有一个实例来控制所有的请求。Action资源必须是线程安全或者同步。
Struts2的Action对象为每一个请求都实例化对象,所以没有线程安全问题。
3.Servlet依赖
Struts1的Action类依赖于ServletAPI,当Action被调用时,以HttpServletRequest和HttpServletResponse作为参数传给execute()方法。
Struts2的Action和容器无关。
4.表达式语言
Struts1整合了JSTL,所以使用JSTL的表达式语言。
Struts2使用JSTL,但是还支持一个更强大和灵活的表达式语言OGNL。
5.类型转换
Struts1的ActionForm属性经常都是String。Struts1使用Commons-Beanutils来进行类型转换。转换每一个类,而不是为每一个实例进行配置。
Struts2内置了转换器,对于日期,整数或浮点数等类型会自动调用相应的转换器进行转换,为编程带来极大的方便。
6.视图支持
Struts1只支持JSP作为其表现层技术,没有提供对目前比较流行的FreeMarker,Velocity等表现层的支持。
Struts2提供了对FreeMarker,Velocity等模板技术的支持,并且配置很简单。
7.捕获输入
Struts1使用ActionForm对象来捕获输入。和Action一样,所用ActionForm必须扩展基类。
Struts2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。