您所在的位置:开发 > Java > 将Struts应用迁移到Struts 2(1)

将Struts应用迁移到Struts 2(1)

2007-04-18 10:19 Ian Roughley/陈俊编译 InfoQ 字号:T | T
一键收藏,随时查看,分享好友!

本文第一部分介绍Struts 2与Struts的核心架构的不同点,以助于更好地把所有概念联系起来。第二部分深入探讨两者在actions上的差别、action相关的框架特征和action的配置。最后一部分讲述用户界面。其中,我们会讲到其架构、UI构件、主题和标签,还有如何为我们的应用加上新的外观。

AD:

Ian Roughley是一位技术演讲人、作家及独立咨询顾问,住在马萨诸塞州的波士顿。他具有十多年提供架构设计、开发、过程改进以及指导等方面服务的经验,客户范围小至创业公司,大到财富500强前10名的公司。他专注于具有实效性且以结果为目标的方法,是开源及以敏捷开发为基础的过程和质量改进的支持者。

大多数人都会熟悉Struts,无论是从项目实战中获得的经验还是从书中了解到的知识。在这一系列文章里,我们将通过一个由Struts迁移到Struts 2的简单应用例子向大家展现Struts 2的所有特征。

在我们开始介绍这个例子之前,你需要去了解一点Struts 2的背景知识。文章的第一部分将介绍Struts 2与Struts的核心架构的不同点,以助于更好地把所有概念联系起来。第二部分将深入探讨两者在actions上的差别、action相关的框架特征和action的配置。在文章最后一部分将会讲述用户界面。我们会讲到其架构、UI构件、主题和标签,还有如何为我们的应用加上新的外观。

我们并不打算谈及迁移过程的所有细节方面,我们只是从普通的出发点开始介绍Struts 2的概念和现在可用的所有新特征。但拥有这些知识后,无论以后迁移到何等规模的应用到Struts 2中你都可以易如反掌。

导言/历史

Struts的第一个版本是在2001年5月份发布的。它的最初设想是通过结合JSP和Servlet,使Web应用的视图和业务/应用逻辑得以清晰地分离开来。在Struts之前,最常见的做法是在JSP中加入业务和应用逻辑,或者在Servlet中通过println()来生成视图。

自从第一版发布以来,Struts实际上已成为业界公认的Web应用标准。它的炙手可热也为自己带来了改进和变更,所以不但要跟上对Web应用框架不断变化的需求,而且要与日渐增多竞争激烈的众多框架的特性相融合。

到最后,产生了几个下一代Struts的解决方案。其中两个最受瞩目的方案是Shale和Struts Ti。Shale是一个基于构件的框架,并在最近成为Apache的顶级项目。而Struts Ti则是在Struts的成功经验基础上继续坚持对前端控制器(Front Controller)和MVC(model-view-controller)模式进行改进。

WebWork项目是在2002年3月发布的,它对Struts式框架进行了革命性改进,引进了不少新的思想,概念和功能,但和原Struts代码并不兼容。WebWork是一个成熟的框架,经过了好几次重大的改进与发布。

在2005年12月,WebWork与Struts Ti宣布合并。与此同时,Struts Ti改名为Struts Action Framework 2.0,成为Struts真正的继承者。

最后要注意的是,并不是说Struts或WebWork项目已经停止开发了。由于人们对这两个项目的兴趣仍然很高,而且也有很多开发者仍然愿意使用它们,因此这两个项目还在继续开发中,继续修复Bug,改进功能和继续添加新功能。

请求运作过程

在我们开始详细探讨如何把应用由Struts迁移到Struts 2之前,让我们通过体验整个请求流程,看看新架构是如何运作的。

在我们体验了整个请求的生命周期后,你应当注意到很重要的一点——Struts 2仍是以前端控制器框架为主体的。所有的概念还都是你以前所熟悉的。

这意味着:

◆Actions仍然是通过URL触发的
◆数据仍然是通过URL请求参数和Form参数传送到服务端的
◆所有Servlet对象(如request、response和session等)仍在Action可用

以下是请求处理过程的高层概览:

图1

整个请求的处理过程可以分为6步:

1、由框架产生一个请求并进行处理
框架根据请求匹配相应的配置,得到使用哪些拦截器,Action类和返回结果的信息。

2、请求通过一系列的拦截器
拦截器和拦截器组可以按照不同级别进行组合配置来处理请求。它们为请求提供各种预处理和切面处理的应用功能。这和Struts的使用Jakarta Commons Chain构件的RequestProcessor类很相似。

3、调用Action
产生一个新的Action对象实例,并提供请求所调用的处理逻辑的方法。我们在第二部文章中将对这步骤进行进一步讨论。Struts 2可以在配置Action时为请求分配其指定的方法。

4、调用相应的Result
通过匹配处理Action方法之后的返回值,获取相应Result类,生成并调用它的实例。处理Result可能产生的结果之一就是对UI模板(但并非只有一个)进行渲染,来产生HTML。如果是这种情况的话,模板中的Struts 2 tags可以直接从Action中获取要被要被渲染的值。

5、请求再次经过一系列拦截器处理后返回
Request以和进入时相反的方向通过拦截器组,当然,你可以在这个过程中进行回收整理或者额外的处理工作。

6、响应被返回给用户
最后一步是将控制权交还给Servlet引擎。最常见的结果是把渲染后的HTML返回给用户,但返回的也可能是指定的HTTP头或者进行HTTP重定向。

你应该已经注意到Struts 2和Struts的差别了。最明显的就是Struts 2是一个pull-MVC架构。这是什么意思呢?从开发者角度看,就是说需要显示给用户的数据可以直接从Action中获取,而不像Struts那样必须把相应的Bean存到Page、Request或者Session中才能获取。

内容导航



分享到:

  1. 彻底透视CDN痛点,互联网老兵聊聊CDN的那些事儿!
  2. 3行Python代码完成人脸识别

热点职位

更多>>

热点专题

更多>>

读书

网管员必读——超级网管经验谈
本书是一本以示例形式直接面向应用的网络管理图书。书中以大量示例和大量实用网络管理与故障排除经验介绍了当前网络管理工作的各

51CTO旗下网站

领先的IT技术网站 51CTO 领先的中文存储媒体 WatchStor 中国首个CIO网站 CIOage 中国首家数字医疗网站 HC3i 51CTO学院