1、在Action实现类方面:Struts1要求Action类继承一个抽象基类,即基于抽象类编程,而 非面向接口编程;Struts2的Action类可以实现一个Action接口,也可实现其他接口,即
Action接口不是必须实现的。
2、线程模式方面:Struts的Action是单例模式并且是线程安全的,即只有一个Action来处 理所有的请求;Strut2的Action对象为每一个请求产生一个实例,因此没有线程安全的
问题。
3、Servlet依赖方面:Struts1的Action依赖于Servlet API,因为Struts1的Action的execute方法中有HttpServletRequest和HttpServletResponse参数;Struts2的Action不在
依赖于Servlet API ,即允许Action脱离WEB容器允许,从而降低了Action的测试难度。
4、单元测试方面:测试Struts1的Action时由于execute方法依赖于Servlet API,这使得Action的测试依赖于WEB容器(若借助于第三方扩展:Struts TestCase也可以使其不依赖于
容器);Struts2的Action可以通过初始化、设置属性、调用方法来测试。
5、请求参数的封装:Struts1使用ActionFrom对象来封装请求参数,所有的ActionFrom必须继承一个基类:ActionFrom。Struts2直接使用Action的属性来封装用户请求参数
6、表达式语言:Struts1整合了JSTL,Struts2既可使用JSTL,也可以使用其直接的表达式语言:OGNL。