当前位置:文档之家› struts2的发展极其优势

struts2的发展极其优势

Struts 2
目录
Struts 2 概述
Struts技术的发展概况
Struts2体系结构
Struts2和Struts1的对比
WebWork和Struts2的对比
Struts2 五种默认返回类型名
编辑本段Struts 2 概述
Struts 2是Struts的下一代产品。

是在struts 和WebWork的技术基础上进行了合并,全新的Struts 2框架。

其全新的Struts 2的体系结构与Struts 1的体系结构的差别巨大。

Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。

因为Struts 2和Struts 1有着太大的变化,但是相对于WebWork,Struts 2只有很小的变化。

编辑本段Struts技术的发展概况
经过六年多的发展,Struts1已经成为了一个高度成熟的框架,不管是稳定性还是可靠性都得到了广泛的证明。

市场占有率超过20%,拥有丰富的开发人群,几乎已经成为了事实上的工业标准。

但是随着时间的流逝,技术的进步,Struts1的局限性也越来越多地暴露出来,并且制约了Struts1的继续发展。

对于Struts1框架而言,由于与JSP/Servlet耦合非常紧密,因而导致了一些严重的问题。

首先,Struts1支持的表现层技术单一。

由于Struts1出现的年代比较早,那个时候没有FreeMarker、Velocity等技术,因此它不可能与这些视图层的模版技术进行整合。

其次,Struts1与Servlet API 的严重耦合,使应用难于测试。

最后,Struts1代码严重依赖于Struts1 API,属于侵入性框架。

从目前的技术层面上看,出现了许多与Struts1竞争的视图层框架,比如JSF、Tapestry和Spring MVC等。

这些框架由于出现的年代比较近,应用了最新的设计理念,同时也从Struts1中吸取了经验,克服了很多不足。

这些框架的出现也促进了Struts的发展。

目前,Struts已经分化成了两个框架:第一个是在传统的Struts1的基础上,融合了另外的一个优秀
的Web框架WebWork的Struts2。

Struts2虽然是在Struts1的基础上发展起来的,但是实质上是以WebWork为核心的。

Struts2为传统的Struts1注入了WebWork的先进的设计理念,统一了Struts1和WebWork两个框架。

Struts1分化出来的另外一个框架是Shale。

这个框架远远超出了Struts1原有的设计思想,与原有的Struts1关联很少,使用了全新的设计思想。

Shale更像一个新的框架而不是Struts1的升级。

本文下面的内容将主要讨论Struts2。

编辑本段Struts2体系结构
Struts2的体系与Struts1体系的差别非常大,因为Struts2使用了WebWork的设计核心,而不是Struts1的设计核心。

Struts2中大量使用拦截器来处理用户的请求,从而允许用户的业务逻辑控制器与Servlet API
分离。

图一是Struts2的体系结构简图。

Struts2框架的大概处理流程如下:
1、加载类(FilterDispatcher)
2、读取配置(struts配置文件中的Action)
3、派发请求(客户端发送请求)
4、调用Action(FilterDispatcher从struts配置文件中读取与之相对应的Action )
5、启用拦截器(WebWork拦截器链自动对请求应用通用功能,如验证)
6、处理业务(回调Action的execute()方法)
7、返回响应(通过execute方法将信息返回到FilterDispatcher)
8、查找响应(FilterDispatcher根据配置查找响应的是什么信息如:SUCCESS、ERROER,将跳转到哪个jsp页面)
9、响应用户(jsp--->客户浏览器端显示)
编辑本段Struts2和Struts1的对比
通过上面对Struts2体系结构的了解,我们发现Struts2对Struts1
进行了巨大的改进。

主要表现在如下几个方面:
在Action的实现方面:Struts1要求必须统一扩展自Action类,而Struts2中可以是一个普通的POJO。

线程模型方面:Struts1的Action工作在单例模式,一个Action的实例处理所有的请求。

Struts2的Action是一个请求对应一个实例。

没有线程安全方面的问题。

Servlet依赖方面:Struts1的Action依赖于Servlet API,比如Action 的execute方法的参数就包括request和response对象。

这使程序难于测试。

Struts2中的Action不再依赖于Servlet API,有利于测试,并且实现TDD。

封装请求参数:Struts1中强制使用ActionForm对象封装请求的参数。

Struts2可以选择使用POJO类来封装请求的参数,或者直接使用Action的属性。

表达式语言方面:Struts1中整合了EL,但是EL对集合和索引的支持不强,Struts2整合了OGNL(Object Graph NavigationLanguage)。

绑定值到视图技术:Struts1使用标准的JSP,Struts2使用“ValueStack”技术。

类型转换:Struts1中的ActionForm基本使用String类型的属性。

Struts2中使用OGNL进行转换,可以更方便的使用。

数据校验:Struts1中支持覆盖validate方法或者使用Validator框架。

Struts2支持重写validate方法或者使用XWork的验证框架。

Action执行控制的对比:Struts1支持每一个模块对应一个请求处理,但是模块中的所有Action必须共享相同的生命周期。

Struts2支持通过拦截器堆栈为每一个Action创建不同的生命周期。

编辑本段WebWork和Struts2的对比
从某种程度上看,Struts2是从WebWork2上升级得到的。

甚至Apache 的官方文档也讲:WebWork2到Struts2是平滑的过渡。

我们甚至也可以说Struts2就是WebWork2.3而已。

在很多方面Struts仅仅是改变了WebWork 下的名称。

Struts2对应的有自己的标签,并且功能强大。

Webwork也有自己的标签。

编辑本段Struts2 五种默认返回类型名
ActionSupport基类中定义了五个标准的返回值,当然我们可以自己随意定义返回的名字
String SUCCESS = "success"; //默认是 SUCCESS 类型
String NONE = "none";
String ERROR = "error";
String INPUT = "input";
String LOGIN = "login";。

相关主题