您的位置:首页 > 编程语言 > Java开发

Struts 2概述

2013-05-07 14:37 239 查看
       众所周知,Struts 2是Struts和WebWork的混血儿, 而在Webwork 2.2之前的Webwork版本,其自身有一套IoC实现,在Spring 框架如火如荼发展的背景下,Webwork决定放弃控制反转功能的开发,转由使用Spring的实现。有越来越多的开源组件(如iBATIS等)都放弃与Spring重叠功能的开发,因此,Struts 2推荐大家通过Spring实现IoC功能。

Struts 2 拥有众多的新特性,下面我们对此进行概括性的描述:

 

1 ·Action类更加灵活

Struts 2的Action类可以实现一个Action接口,也可实现其他接口,因此很容易添加定制性的服务。Struts 2提供一个ActionSupport,它是实现了Struts常用接口的方便类。Action接口不是必需的,任何具有execute签名的POJO都可以用作Struts 2的Action对象。

 

2 ·每一请求对应一个Action实例

Struts 1的Action以单例模式运行,所有的请求对应同一个Action实例。因此用户必须保证Action本身是线程安全的。Struts 2 的Action对象为每一个请求产生一个实例,因此没有线程安全问题,它相当于Spring MVC的ThrowawayController。

 

3 ·不依赖于Servlet 容器

Struts 1 Action 依赖于Servlet 容器,但Struts 2 Action不依赖于Servlet容器,允许Action脱离容器单独测试。如果需要,Struts2的Action仍然可以访问到request和response实例。

 

4 ·具有很强的可测试性

由于Struts 1依赖于Servlet容器,所以很难脱离容器进行测试,虽然可以通过StrutsTestCase使用模拟对象进行测试,但操作依旧比较麻烦。Struts 2的Action不依赖于Servlet容器,用户可以简单地通过初始化、设置属性、调用方法进行测试,同时“依赖注入”的支持也使测试更加容易。

 

5 ·捕获输入更加灵活

Struts 1使用ActionForm对象捕获输入,所有的ActionForm必须继承一个基类。Struts 2直接使用Action属性绑定请求参数,消除了对第二个输入对象的需求。这种模型驱动的特性简化了页面标签对POJO输入对象的引用。

 

6 ·表达式语言更强大

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

 

7 ·实现值和页面的灵活绑定

Struts 1使用标准JSP机制把对象绑定到页面中进行访问。Struts 2使用“值堆栈”技术,使标签能够访问值而不需要把页面和对象绑定起来。“值堆栈”策略允许通过一系列名称相同但类型不同的属性重用页面。

 

8 ·类型转换更加方便

Struts 1 的ActionForm属性通常都是String类型,Struts1使用Commons-Beanutils进行类型转换。每个类对应一个转换器,对每一个实例来说是不可配置的。Struts2使用OGNL进行类型转换。提供基本和常用对象的转换器。

 

9 ·数据校验更加方便

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

 

10 ·Action的生命周期更加灵活

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

 

摘自:http://www.javaweb.cc/architecture/spring/26881.shtml

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: