1 Struts1 要求Action 类继承一个抽象基类。
Struts1 一个普遍问题是使用抽象类编程而不是借口
Sturts2 提供了三种方法 Action ActionSpooter 和 直接不写
2 Struts1 Action 是单例模式。并且必须是线程安全的,所有的请求 仅有一个Action的实例来处理
Sturts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。不需要考虑性能和垃圾回收问题
3. Struts1 Action依赖于Servlet API 当一个Action 被调用时HttpServletRequest 和HttpServletResponse 被传递给execute();
Sturts2 Action 不依赖与容器 可以脱离容器单独测试
4. Struts1Action 启动时依赖于容器execute方法 暴露了 servlet API
Struts2 Action 可以通过初始化设置属性 调用方法 来测试 依赖注入支持也使测试更容易
5 Struts1 使用ActionForm 对象 捕获输入 所有的ActionForm必须继承一个基类因为其他JavaBean 不能用作ActionForm 开发者经常创建多余的类捕获输入
Struts2 直接使用Action 属性作为输入属性,消除了对第二个输入对象的实行 ,输入属性可能是自己属性的对象类型
6 Struts1 结合了JSTL 因此使用JSTL EL
Struts2 可以使用JSTL 但也支持一个强大和灵活的表达式语言(OGNL)Object Graph Notation Language
7 Struts1使用标准的JSP机制 把对象绑定到页面
Struts2 使用ValueStack(堆栈)值栈技术绑定到页面