【Struts2基础】——Struts1 & Struts2 区别

来源:互联网 发布:金蝶k3无法数据引出 编辑:程序博客网 时间:2024/06/05 18:47

       上一篇文章中说道,Struts2不是Struts1的升级,它们之间并没有什么血缘的关系。那么,它们两者之间的区别到底是什么?下面,且听小编给您娓娓道来。


Action类

  • Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口
  • Struts2中,Action类可以实现一个Action接口,也可以实现其他接口使可选和定制的服务成为可能。Struts2提供了一个ActionSupport基类去实现常用的接口。Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象

线程模式


  • Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求,存在线程的安全性问题
  • Struts2 Action对象为每一个请求产生一个实例,是多实例的,在线程上没有安全问题

Servlet依赖


  • Struts1 Action依赖于Servlet API,因为当一个Action被调用时,HttpServletRequest和HttpServletResponse被传递给execute方法
  • Struts2 Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始化的Request和response。但是,其他的元素减少或者消除了直接访问HttpServletRequest和HttpServletResponse的必要性

可测试性


  • Struts1的Action测试性不好,由于Action依赖于Servlet API,所以需要容器支持
  • Struts2的Action测试性好,因为Struts2的Action是一个POJO对象,所以可以直接写一个单元测试完成

ActionForm


  • Struts1收集数据通常使用ActionForm,而ActionForm还需要继承,使ActionForm的复用率降低。另外项目非常大会建立很多ActionForm给维护带来工作量,但也有好处:数据的收集和控制进行了很好的分离。
  • Struts2直接用Action来收集数据,也可以采用ActionForm。Struts2采用了ModelDriven的方式来支持类似的Struts1的ActionForm方式,比较灵活。

表达式语言


  • Struts1整合了JSTL,这种EL有基本的对象遍历,但是对集合和索引属性的支持很弱。
  • Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言——OGNL(Object Graph Notation Language)

绑定值到页面(View)


  • Struts1使用标准的JSP机制把对象绑定到页面中来访问
  • Struts2使用“ValueStack”技术,使taglib能够访问而不需要把你的页面和对象绑定起来。

类型转换


  • Struts1 ActionForm的类型转换采用commons-beanutils工具,而定义完成一个转换器,将对所有的ActionForm起作用,而不能针对某一ActionForm来配置是否使用此类型的转换器
  • Struts2使用OGNL进行类型转换,功能更加强大,转换过程可以针对某个类型进行配置

校验


  • Struts1支持在ActionForm的validate方法中手动校验,或者通过Commons Validator的扩展来校验。同一个类可以有不同的校验内容,但不能校验子对象。
  • Struts2支持通过validate方法和XWork校验框架进行校验。

Action执行控制


  • Struts1支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期
  • Struts2支持通过拦截器堆栈为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用

       通过上边的详细对比,读着应该对Struts1与Struts2两者之间的差别,有了一定程度上的了解。同时,也应该明白,Struts2是WebWork的升级,而不是Struts1.x的升级。虽然Struts2提供了与Struts1.x的兼容,但已经不是Struts1.x的升级。对于已有已有Struts1.x开发经验的开发者而言,Struts1.x的开发经验对于Struts2并没有太大的帮助;相反,对于已经有WebWork开发经验的开发者而言,WebWork的开发经验对Struts2的开发将有很好的借鉴意义。


0 0
原创粉丝点击