Struts 2.0:引领下一代Web开发趋势

时间:2022-10-12 02:00:33

【前言】Struts 2.0:引领下一代Web开发趋势由文秘帮小编整理而成,但愿对你的学习工作带来帮助。WebWork项目由Open Symphony社区启动,面向Struts开发社区。它旨在满足那些希望寻求类似Struts的一种框架,但有更好特性的人的需要。WebWork框架于2002年。独立运作了几年后, WebWork和Struts两个社区在2005年12月联合起来,开发了新版本的Struts,即Struts 2。Strut...

Struts 2.0:引领下一代Web开发趋势

struts自推出以来不断受到开发者的追捧,其最新版本Struts 2.0亦代表了下一代Java web开发的新趋势。Struts 2.0框架具有一系列丰富的特性,对大型开发社区很有帮助,而且,从Struts 1迁移到Struts 2也不是很困难。

Apache Struts(简称Struts)是一种非常流行的Web框架,可用于使用Java企业版(JEE)开发Web应用。Struts项目是负责开发及维护Struts框架的开源社区。Struts在2001年7月,目前已成为使用JEE开发Web应用的事实上的标准。而社区新近的Struts 2.0更是一种精致、可扩展的框架,可用于使用Java代码来开发企业就绪的Web应用。该框架旨在简化从构建、部署到日常维护的整个应用开发周期。

设计Struts框架的目的是为了让开发人员可以构建一种数据库代码、页面设计代码和控制流程代码不混合在一起的服务器小程序或者JavaServer Pages。因为,要是代码混合在一起,随着应用越来越庞大,就会变得难以维护。Struts框架基于MVC架构,可以帮助开发人员利用明确的关注点分离(separation of concerns)原则,开发动态Web应用。

Struts框架提供了自己的Web控制器组件来处理控制流程逻辑。至于视图,它集成了其他技术,譬如JavaServer Pages(包括JSTL和JSF)、Velocity模板引擎和XSLT。至于模型,它使用JDBC、 EJB、Hibernate或者iBATIS等技术来访问数据。

Struts 1.0非常成熟,因此得到众多开发社区的有力支持,而且说明文档内容完备。不过在过去的几年里,许多开源社区的Web框架纷纷登台亮相,所以它需要跟上Web应用需求不断变化的形势,这就有必要构建下一代Struts框架。力求满足这个要求的初始提案是Struts Ti,这种简化的MVC Model 2框架可用于让需要更少配置、更好结构和控制器特性的人开发Web应用。人们考虑用来实现这个目的的另一个框架是Apache Shale,不过,Shale是基于组件的一种框架,它立足于JSF。Shale开发社区不愿与Struts联合,决定继续把Shale作为一个顶级项目来开发。

WebWork项目由Open Symphony社区启动,面向Struts开发社区。它旨在满足那些希望寻求类似Struts的一种框架,但有更好特性的人的需要。WebWork框架于2002年。独立运作了几年后, WebWork和Struts两个社区在2005年12月联合起来,开发了新版本的Struts,即Struts 2。Struts 2实际上就是Struts 1与WebWork的结合体。Struts的这个新版本更易使用,更接近Struts框架的最初版本。

基于MVC架构的Struts 2

如前所述,Struts框架基于MVC架构。Struts 2具有一种灵活的控制层,基于Java过滤器、JavaBean、 ResourceBundle、Locale和XML等诸多标准技术上,还基于OGNL和XWork等各种Open Symphony包。

至于模型,该框架可与JDBC、EJB及其他框架(包括Hibernate、iBATIS和Cayenne)等标准的数据访问技术相互联系。至于视图,该框架可以使用JavaServer Pages(包括JSTL和JSF)、Velocity模板、PDF、XSLT和FreeMarker。

除了支持Action和结果外,Struts框架还提供对异常处理程序和拦截器的支持。异常处理程序声明用于定义全局异常和本地异常的异常处理程序。不需要在代码中编写try/catch块,这个框架其实简化了异常处理。框架捕获每个异常后,会显示消息和异常方面相应细节的页面。

拦截器指定了动作的请求处理生命周期。拦截器还指定了在Action类执行前后出现的动作顺序。如前所述,拦截器经配置后,可以把常见功能作用到请求上。该框架的大多数核心功能作为拦截器来实现。如果有些动作响应了Ajax、SOAP或者JSF请求,生命周期就能得到简化,请求也只需通过拦截器传送,不需要任何执行。

Struts 2请求处理流程

这个架构实际上又是如何工作的呢?初始请求先发送到服务器小程序容器(譬如Tomcat),然后通过一系列过滤器传送。如果与Site Mesh插件等其他技术集成,可选的ActionContextCleanUp过滤器就很有用,要是用到这个过滤器,请求先通过它传送。

接着,调用请求的FilterDispatcher,它使用ActionMapper来确定要不要为这个请求调用动作。如果ActionMapper确定应当调用Action,FilterDispatcher就把控制权委托给ActionProxy。

ActionProxy使用了框架配置文件管理器,该管理器通过struts.xml文件来初始化。然后,ActionProxy创建ActionInvocation,它负责实现命令模式。ActionInvocation进程调用所需的拦截器,然后调用Action。一旦该Action执行,ActionInvocation就负责查寻与struts.xml中映射的Action结果代码相关的合理结果。

然后结果被执行,大多数时候,这会显示用FreeMarker或者Velocity编写的JSP或者模板。按照相反顺序完成Action之后,拦截器再次得到执行。最后,响应通过web.xml中配置的过滤器返回。如果ActionContextCleanUp过滤器经过配置,FilterDispatcher就不会清理ThreadLocal ActionContext(ActionContext拥有运行时请求和响应的全部细节,该框架使用ThreadLocal以及ActionContext类来提供配置及其他运行时细节)。如果ActionContextCleanUp过滤器未经配置,FilterDispatcher就会清理所有的当前ThreadLocal。图1描述了Struts 2框架的架构。

这一切似乎都有点抽象。为了帮读者有更深入的了解,下面提供一个典型的架构请求流程,图2显示了这个顺序。

1.用户请求对Web应用执行某个动作后,Web浏览器将要求某些资源的请求发送到Web服务器。

2.服务器小程序过滤器调度程序接到请求后,分析请求,然后确定调用相应的动作,提供资源。

3.在Action被执行之前,经配置后把一些常见功能(如验证、工作流或者文件上传)作用到请求上的一组拦截器上,可自动作用到该请求上。

4.Action类的一个新实例被创建,然后执行动作方法,用于把信息存储到数据库,或从数据库获取信息。

5.结果显示输出――无论输出的是HTML、图像、PDF还是其他某种格式。

6.然后,请求按照相反顺序通过拦截器传送。返回的请求允许执行其他的处理或者清理操作。

7.最后,容器把输出发送到浏览器。

Struts 1与Struts 2的比较

Struts 1和Struts 2有三个共同的基本概念: 请求处理程序、响应处理程序和标签库。不过在Struts 2中,这些部分经过了重新设计,并得到了改进,以便开发。

开发人员会注意到Struts 2框架中出现的许多改动。譬如说,过滤器取代了服务器小程序,相应变化在部署描述文件里会有所体现。同样,配置文件经过了全面改动。还会注意到其他一些关键特性,譬如Action类方面的变化、支持注释、验证方面的变化。表1详细解释了这些变化。

链接

Struts 2.0的新特性

Struts 2.0框架中出现的许多特性旨在让Struts更容易使用:

改进的设计: 与Struts 1相比,Struts 2的所有类都基于接口,核心接口独立于HTTP。这些API并不依赖服务器小程序API。

简化的Action: Struts 2 Action类独立于框架,是简化的普通Java对象(POJO)。拥有execute()方法的任何Java类都可以用做Action类。

POJO表单: Struts 2不支持ActionForms特性。ActionForms中定义的属性可以直接放在Action类上。不需要使用所有的String属性。

智能默认值: Struts 2配置文件中的大多数配置元素都会有默认值,所以不需要设定值,除非需要不同的值。这有助于减少在XML文件中需要进行的配置。Struts 2支持注释,这带来了更大的方便。

改进的结果: 在Struts 2中,

>forward

改进的标签: Struts 2标签不单单发送输出数据,还能提供样式表驱动标记,这样就可以用较少的代码构建一致性页面。Struts 2标签现在可与FreeMarker、Velocity及类似模板引擎配合使用。

引入拦截器: Struts 2为拦截器(interceptor)提供了全面支持。拦截器可在Action类执行前后加以执行。拦截器经配置后,可以把工作流程或者验证等常见功能作用到请求上。所有请求通过一组拦截器传送,之后再发送到Action类。Action类被执行后,请求按照相反顺序再次通过拦截器传送。

支持Ajax: 为了创建使用Ajax的动态Web应用,Struts 2提供了Ajax主题,从而大大改进了交互应用。面向Ajax的Struts 2标签基于Dojo窗口组件。还有用于其他框架的插件。

快速启动: 部署配置文件可以重新装入; 因而,可以动态地进行许多变化,用不着重新启动Web容器。

状态复选框: Struts 2框架可自动跟踪复选框,如果缺少了某复选框,就会采用默认值false。因而,不像在Struts 1中,复选框不需要对false值进行特殊处理。

易于测试: Struts 2 Actions独立于HTTP,因而与框架中立。无须使用模拟对象(mock object),就很容易测试。

使用注释: 使用Struts 2开发的应用可以使用Java 5注释,作为XML和Java属性配置之外的一个替代办法。注释尽量减少了对XML的需要。Action、拦截器、验证及类型转换方面都有注释。

易于插入: 只要把插件JAR文件放到\WEB-INF\lib目录中,即可轻松安装Struts 2插件,不需要手动配置。

便于与Spring集成: Struts 2 Action能够感知Spring(Spring-aware)。只要为某个应用添加Spring beans,就可以添加对Spring的支持。

易于定制的控制器: Struts 1允许请求处理程序可按照模块来定制,在Struts 2中,需要的话,可以按照动作来定制请求处理。

上一篇:迁移到Struts 2.0 下一篇:克拉玛依油田走向数字化