Struts1与Struts2的对比

十大差异:

1、Action类
2、线程模式
3、Servlet依赖
4、可测性
5、捕获出入
6、表达式语言
7、绑定值到页面(View)
8、类型转换
9、校验
10、Action执行的控制

详细比较:

1、Action类
  Struts1:Action类需要继承一个抽象类(org.apache.struts.action.Action)
  Struts2:任何execute标示的POJO对象都可作为Action对象
  另外:
    1、虽然,在理论上Struts2的Action无须实现任何接口或者是继承任何的类。
      但是,在实际编程过程中,为了更加方便的实现Action,大多数情况下都会继承com.opensymphony.xwork2.ActionSupport类,并且重载(Override)此类里的String execute()方法。
    2、和Struts1.x最大的革命性的不同是,Struts2处理Action过程中调用的方法(“execute”方法)是不带参数的。那如何获取所需要的对象呢?答案是使用IoC。

2、线程模式
  Struts1:Action是单例且线程安全的,开发时要小心Action资源必须是线程安全的。
  Struts2:为每一请求产生一个实例,因此没有线程安全问题。
    (实际上,servlet容器给每个请求产生许多可丢弃的对象,并且会不导致性能和垃圾回收问题)
3、Servlet依赖
  Struts1:Action依赖于servletAPI,当Action调用时HttpServletRequest和HttpServletResponse被传递给execute方法
  Struts2:Action不依赖于容器,必要时Action仍然可以访问request/response对象。
4、可测性
  Struts1:测试依赖于容器,使用第三方扩展-Struts TestCase协助测试。
  Struts2:可以通过初始化,设置属性的方法进行测试。
5、捕获出入
  Struts1:采用ActionForm或动态Bean(DynaBeans)捕获输入
  Struts2:直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。
6、表达式语言
  Struts1:使用JSTL EL
  Struts2:使用可使用JSTL,也可使用OGNL-Object Graph Navigation Language
7、绑定值到页面(View)
  Struts1:使用标准JSP机制把对象绑定到页面
  Struts2:使用ValueStack技术,让taglib能够访问值而不需要把页面(View)和对象绑定起来。
8、类型转换
  Struts1:ActionForm属性通常都是string类型,使用Common-beanutils进行类型转换。
  Struts2:使用OGNL进行类型转换,提供基本和常用对象的转换器。
9、校验
  Struts1:ActionForm的Validate手动校验,或Commons Validator的扩展来校验
  Struts2:支持通过validate方法和XWork校验框架进行校验
10、Action执行的控制
  Struts1:每一个模块有单独的Request Processors(生命周期),但是模块中所有Action必须共享相同的生命周期。
  Struts2:通过拦截器堆栈(Interceptor Stacks)为每个Action创建不同的生命周期。堆栈能根据需要和不同的Action一起使用。
  对于拦截器:
    Struts1.x的标准框架中不提供任何形式的拦截器(虽一个名为SAIF的附加项目则实现了这样的功能,但它的适用的范围还很有限)
    拦截器是Struts2的一个强有力的工具,有许多功能(feature)都是构建于它之上,如国际化、转换器,校验等。

来源:

http://wenku.baidu.com/view/02ea492fb4daa58da0114acc.html
http://tech.it168.com/oldarticle/2007-07-13/200707131009859.shtml

 

posted @ 2012-02-07 11:54  万法自然~  阅读(188)  评论(0编辑  收藏  举报