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
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
相关文章推荐
- Java Struts2 框架入门详解(一)MVC架构详解以及Struts基本概述
- 第一章 Struts 2 概述(一) 转帖
- 【Struts2五】ValueStack以及ognl表达式一(概述)
- Struts 2.0系列之一--Struts 2.0概述
- Struts 2概述(二)转帖
- Struts 2 配置文件概述
- JSF和Struts的区别概述
- struts学习(1)——MVC模型及struts 2概述
- STRUTS 2 概述(节选自《STRUTS 2权威指南》作者:李刚)
- 2008-4-5 第一章 Struts 2 概述(一)
- JBuilder2005 Struts深度体验之概述
- struts学习(七)—拦截器概述
- [转]JBuilder2005 Struts深度体验之概述
- struts模型和视图概述
- Struts 使用要点(概述,Spring与Struts的整合,输入校验与消息显示)
- Struts概述
- JSF和Struts的区别概述
- Struts 使用要点(概述,Spring与Struts的整合,输入校验与消息显示)
- [转载] JBuilder2005 Struts深度体验之概述
- Struts 使用要点(概述,Spring与Struts的整合,输入校验与消息显示)