Java struts2和struts1对比

来源:互联网 发布:作曲的软件 编辑:程序博客网 时间:2024/06/05 15:07

继承实现不同

  • struts1是继承action 抽象类
  • struts2继承actionSupport类,actionSupport实现action接口
    struts2不是必须实现action接口,只要有execute方法都可以看作action类。

线程安全不同

  • struts1是单线程的,只有一个action实例,存在限制
  • struts2多线程,每个action使用一个实例,安全不存在问题

servlet依赖不同

  • Struts1 Action依赖Servlet API,execute方法中有HttpServletRequest和HttpServletResponse方法
  • Struts2 Action 不依赖ServletAPI,允许Action脱离Web容器运行,降低了测试Action的难度
    Struts2 Action仍然可以访问HttpServletRequest和HttpServletResponse参数。
    但是,大部分时候,Action都无需直接访问 HttpServletRequest和HttpServletResponse。

可测试不同

  • 测试Struts1 Action的一个主要问题是execute方法依赖于Servlet于ServletAPI, 这使得Action仍然的测试要依赖于Web容器。
    为了脱离Web容器测试Struts1 的Action, 必须借助于第三方扩展:Struts TestCase,该扩展下包含了系列的Mock对象,从而脱离Web容器测试Struts1的Action类。

  • Struts2Action可以通过初始化,设置属性,调用方法来测试。

封装请求参数不同

  • Struts1 使用ActionForm对象封装用户的请求参数,所有的ActionForm 必须继承一个 基类:ActionForm。
    普通的JavaBean不能用作ActionForm因此,开发者必须创建大量的ActionForm类封装用户请求参数。虽然Struts1 提供了动态ActionForm 来简化ActionForm 的开发,但依然需要在配置文件中定义ActionForm
  • Struts2 直接使用Action 属性来封装用户请求属性,避免了开发者需要大量开发ActionForm类的繁琐
    实际上,这些属性还可以是包含子属性的Rich对象类型。如果开发者依然怀念Struts1 ActionForm 的模式。
    Struts 2 提供了ModelDriven 模式, 可以让开发者使用单独的Model 对象来封装用户请求参数,但该Model对象无须继承任何Struts2基类,是一个POJO,从而 降低了代码污染。

表达式语言方面

  • Struts1 整合了JSTL,可以使用JSTL表达式语言。
    这种表达式语言有基本对象图遍历,但在对集合和索引属性的支持上则功能不强
  • Struts2 可以是用JSTL,但它整合了一种更强大和灵活的表达式语言:OGNL(Object Graph Notation
    Language)
    因此,Struts2下的表达式语言功能更加强大。

绑定值到视图方面

  • Struts1 使用标准JSP机制把对象绑定到视图页面
  • Struts2 使用“ValueStack”技术,使标签能够访问值,而不需要把对象和视图页面绑定在一起

类型转换的方面

  • Struts 1 ActionForm 属性通常都是String 类型。 Struts1 使用
    Commons-Beanutils 进行类型转换,支持基本数据类型和常用对象之间的转换。

数据校验的方面

  • Struts1 支持在ActionForm 重写 validate方法手动校验,或者通过整合Commonsalidator框架来完成数据校验。
  • Struts2 支持通过重写validator方法进行校验,也支持整合XWork校验框架进行校验

Action执行控制的方面:

Struts1 支持每一个模块对应一个请求处理(既生命周期的概念),但是模块中的所有Action必须共享相同的生命周期。

0 0
原创粉丝点击