`
ReaiJava
  • 浏览: 20815 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

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

阅读更多

文章转自:http://www2.ccw.com.cn/weekly/tech/htm2007/20071025_334103.shtml

     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<标签被<result>标签取代。不像 ActionForwards,Struts 2结果可以帮助准备响应,并提供构建多种输出类型的灵活性。

● 改进的标签: 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:Web 2.0开发实战

    《精通Struts 2:Web 2.0开发实战》这本书是Java Web开发领域的一本经典教程,专注于Struts 2框架的应用与实践。Struts 2作为一款强大的MVC(Model-View-Controller)框架,是Java EE平台上的重要组成部分,它极大地...

    Struts 2.0系列(MAX)

    Struts 2.0系列(MAX),pdf格式,全方位介绍struts2: 常用的Struts 2.0的标志(Tag)介绍 Struts 2.0的Action讲解 在Struts 2.0中国际化(i18n)您的应用程序 转换器(Converter)——Struts 2.0中的魔术师 在Struts ...

    struts2.0中文教程

    01 为Struts 2.0做好准备 02 常用的Struts 2.0的标志(Tag) 03 Struts 2.0的Action讲解 04 在Struts 2.0中国际化(i18n)您的应用程序 05 转换器(Converter)——Struts 2.0中的魔术师 06 在Struts 2.0中实现表单...

    Struts2.0视频教程+struts2.0中文教程

    Struts2.0是Java Web开发中的一个强大框架,它基于Model-View-Controller(MVC)设计模式,为开发者提供了构建可维护性高、结构清晰的Web应用程序的工具。这个"Struts2.0视频教程+struts2.0中文教程"包含的资源旨在...

    三大框架中文文档中的struts2.0开发手册(程序员必看)

    Struts2.0是Java Web开发中非常重要的一个MVC框架,它是在原有的Struts1.x基础上进行改进和发展而来的。这个"三大框架中文文档中的struts2.0开发手册"为程序员提供了一份详尽的参考资料,帮助他们理解和掌握Struts...

    struts2.0的特点

    Struts2.0是Java Web开发领域中的一款流行框架,它是Struts1.x与WebWork框架的结合体,继承了两者的优点并进行了创新。在Struts2.0中,核心概念之一是Action,它被设计为一个简单的POJO(Plain Old Java Object),...

    Struts2.0的api

    Struts2.0是Java Web开发中的一个热门框架,它基于Model-View-Controller(MVC)设计模式,为开发者提供了构建动态Web应用程序的强大工具。API文档是理解任何框架核心功能的关键,对于Struts2.0也不例外。让我们深入...

    Struts2.0 Jar包

    Struts2.0是一款强大的Java Web框架,它在MVC(Model-View-Controller)设计模式的基础上,提供了灵活且强大的架构来构建企业级的Web应用程序。这个“Struts2.0 Jar包”包含了所有必要的库文件,使得开发者可以便捷...

    struts 2.0

    Struts 2.0是Java Web开发中的一个关键框架,它是Apache软件基金会的顶级项目,融合了原本独立的Struts 1.x和WebWork框架的优势,为开发者提供了一个强大、灵活且可扩展的MVC(Model-View-Controller)架构。...

    struts2.0入门案例

    Struts2.0是Java Web开发中一个非常重要的框架,它是Apache软件基金会的Jakarta项目下的一个开源产品,主要用于构建MVC(Model-View-Controller)模式的应用程序。本入门案例将带你逐步了解如何使用Struts2.0来创建...

    JavaEE源代码 Struts2.0

    JavaEE源代码 Struts2.0JavaEE源代码 Struts2.0JavaEE源代码 Struts2.0JavaEE源代码 Struts2.0JavaEE源代码 Struts2.0JavaEE源代码 Struts2.0JavaEE源代码 Struts2.0JavaEE源代码 Struts2.0JavaEE源代码 Struts2.0...

    Struts 2.0

    Struts 2.0 是一个基于 Model-View-Controller (MVC) 设计模式的Java Web应用程序框架。它并非Struts 1的直接升级,而是源自WebWork框架,提供了更强大的特性和灵活性。Struts 2的核心是Action,它是业务逻辑处理的...

    struts2.0 spring2.0 hibernate3.0整合开发快速入门-3

    ### Struts2.0、Spring2.0与Hibernate3.0整合开发快速入门知识点解析 #### 一、Struts2.0与Hibernate3.0整合基础 **知识点1:Struts2.0简介** - **定义**: Struts2是Apache基金会下的一个开源项目,它是一个基于...

    struts 2.0 详细配置

    Struts 2.0 是一个基于 Java 的开源框架,用于开发 Web 应用程序。它继承了 Struts 1.x 的优点,并在架构上进行了改进,更加灵活且易于扩展。Struts 2.0 采用了 MVC(Model-View-Controller)设计模式,将数据模型、...

    初识[Struts2.0]并[使用Struts2.0]进行SSH集成

    Struts2.0是Java Web开发中一个非常重要的框架,它是Apache软件基金会的Struts项目的一个版本,专门用于构建基于MVC(Model-View-Controller)设计模式的Web应用程序。Struts2.0的出现极大地简化了Java Web开发,...

    sstruts2.0 struts2.0

    Struts2.0 是一款基于模型-视图-控制器(MVC)设计模式的Java Web应用程序框架,由Apache软件基金会开发。它简化了Java web应用的开发,提供了强大的功能,如动作映射、数据绑定、异常处理、国际化、以及丰富的视图...

    struts2.0英文文档

    ### Struts2.0 关键知识点解析 #### 一、Struts2.0 概述 ...对于想要深入学习 Java Web 开发的开发者来说,掌握 Struts2.0 是非常必要的。希望本文能够帮助大家更好地理解 Struts2.0 的核心概念和技术特点。

    Struts2.0学习系列 以及 Struts2.0安装包

    Struts2.0是Java Web开发中的一个强大框架,它基于Model-View-Controller(MVC)设计模式,为开发者提供了构建可维护性高、结构清晰的Web应用程序的工具。这个"Struts2.0学习系列"旨在帮助初学者及进阶者深入理解并...

    Struts2.0中文教程

    1. **Struts2.0简介**:讲解Struts2.0的历史、设计理念和核心组件,对比与前一代Struts1.x的区别,以及为什么选择Struts2.0作为开发框架。 2. **环境搭建**:指导如何配置开发环境,包括JDK、Apache Tomcat服务器、...

Global site tag (gtag.js) - Google Analytics