struts1 和 struts2 的区别??
struts1 和 struts2 的区别其实并不是太大,两者的区别:
Action 类:
◆Struts1 要求 Action 类继承一个抽象基类。Struts1 的一个普遍问题是使用抽
象类编程而不是接口。
◆Struts 2 Action 类可以实现一个 Action 接口,也可实现其他接口,使可选和
定制的服务成为可能。Struts2 提供一个 ActionSupport 基类去实现 常用的接口。
Action 接口不是必须的,任何有 execute 标识的 POJO 对象都可以用作 Struts2
的 Action 对象。
线程模式:
◆Struts1 Action 是单例模式并且必须是线程安全的,因为仅有 Action 的一个实
例来处理所有的请求。单例策略限制了 Struts1 Action 能作的事,并且要在开发
时特别小心。Action 资源必须是线程安全的或同步的。
◆Struts2 Action 对象为每一个请求产生一个实例,因此没有线程安全问题。
(实际上,servlet 容器给每个请求产生许多可丢弃的对象,并且不会导致性能
和垃圾回收问题)
Servlet 依赖:
◆Struts1 Action 依赖于 Servlet API ,因为当一个 Action 被调用时
HttpServletRequest 和 HttpServletResponse 被传递给 execute 方法。
◆Struts 2 Action 不依赖于容器,允许 Action 脱离容器单独被测试。如果需要,
Struts2 Action 仍然可以访问初始的 request 和 response。但是,其他的元素减
少或者消除了直接访问 HttpServetRequest 和 HttpServletResponse 的必要性。
可测性:
◆测试 Struts1 Action 的一个主要问题是 execute 方法暴露了 servlet API(这使
得测试要依赖于容器)。一个第三方扩展--Struts TestCase--提供了一套
Struts1 的模拟对象(来进行测试)。
◆Struts 2 Action 可以通过初始化、设置属性、调用方法来测试,“依赖注入”支
持也使测试更容易。
捕获输入:
◆Struts1 使用 ActionForm 对象捕获输入。所有的 ActionForm 必须继承一个基
类。因为其他 JavaBean 不能用作 ActionForm,开发者经常创建多余的类捕获
输入。动态 Bean(DynaBeans)可以作为创建传统 ActionForm 的选择,但是,
开发者可能是在重新描述(创建)已经存在的 JavaBean(仍然会导致有冗余的
javabean)。
◆ Struts 2 直接使用 Action 属性作为输入属性,消除了对第二个输入对象的需
求。输入属性可能是有自己(子)属性的 rich 对象类型。Action 属性能够通过 web
页面上的 taglibs 访问。Struts2 也支持 ActionForm 模式。rich 对象类型,包括业
务对象,能够用作输入/输出对象。这种 ModelDriven 特性简化了 taglib 对
POJO 输入对象的引用。
表达式语言:
◆Struts1 整合了 JSTL,因此使用 JSTL EL。这种 EL 有基本对象图遍历,但是