当前位置:编程学习 > JSP >>

Struts 和 Tiles 辅助基于组件的开发

答案:将视图组合在一起以便于构造 Web 应用程序
级别:中级


Wellie Chao(wchao@caraveltech.com)
总裁,Caravel Technologies
2002 年 8 月

“模型-视图-控制器(Model-View-Controller,MVC)”框架对于生成有组织的模块化应用程序(这些应用程序能够清晰地划分逻辑、样式和数据),是一种经证实的和方便的方法。在 Java 世界中,Struts 是最著名的也是最常被谈及的 MVC 的开放源码体现之一。致力于 Struts 的开发人员最近增强了该项目的核心功能,并改进了视图支持(合并了 Tiles 视图组件框架来加强对基于组件开发的支持),以便增加可重用性并增强一致性。本文中,Wellie Chao 说明了 Struts 和 Tiles 组合为什么是用来创建 Web 应用程序的最佳工具包,而且向您展示了如何开始使用它,这里主要讲述自 Struts 0.9 以来的更改。
我开始学习如何创建软件要追溯到 80 年代中期,最初两个月的时间都花在使用线性流及嵌入式显示、逻辑和数据编写单块代码。这在那时,好象是最常用的方法。随着经验的丰富,我学会了将代码封装到对象中,将数据与逻辑分离,重构公共代码并实践其它良好的编程公认原则。

Web 开发人员接受 MVC
眨眼到了 1994 年,当时主流的采用 Web 应用程序的开发才刚开始。由于 Web 的不成熟,只有较少的工具能帮助开发人员构建 Web 软件。结果,在特定解决方案中的应用程序混合了 HTML 代码与应用程序逻辑。很显然,UI 设计的更改和业务逻辑的更新在大型应用程序中既困难又昂贵,因为紧耦合的表示和逻辑将这两种元素搅和在一起,进而导致错误和缓慢的进展。而且,混合的代码要求部分开发人员具备 UI 设计知识,或者要求开发人员与图形设计人员之间有紧密的工作关系,这常常会造成时间上的浪费。

JSP 技术和标记的引入稍微改善了这种更改问题,因为能够将逻辑和显示分离。UI 设计人员能够对显示进行卓有成效的工作,同时开发人员能够专注于逻辑。然而,这种方法仍存在一些缺陷。尤其是某些操作(还有公共操作)的开发仍很困难。验证表单就是典型的例子。正如很多人所知,表单验证的过程类似于这样:

显示表单;等待用户填写然后提交数据。 
检查各域值是否有效;如果有错误,则重新显示表单。 
处理用户输入的数据,可能将其存储在一个数据库中。 
在新页面上向用户显示处理的结果或下一步(可能是另一个表单)。 
如果在这一过程中只使用 JSP 页面,那么在需要再次更改代码时,您会发现,按照可管理性这条思路,将控制从一个页面“路由”至另一个页面很难。您想把第 4 步和第 3 步置于同一个页面吗?如果使用多个单独的 JSP 页面,那么如何跟踪哪个页面链接至其它页面,以及在要更改一个页面的文件名或位置时该怎么做呢?而且,在第 2 步检测到某个域中的错误时,如何重新显示带有一条错误消息的原始表单,但还要保留用户已填入的值呢?Struts,一种开放源码“模型-视图-控制器”框架,通过帮助解决所有这些问题,从而使开发人员的工作更为轻松。

本文并不深入讨论 MVC 平台。有关这方面的信息,请参阅 Malcolm Davis 所写的标题为“Struts, an open-source MVC implementation”的 developerWorks 文章。您正在阅读的这篇文章讨论自 Malcolm 的文章发表以来对 Struts 所做的更改,包括 Tiles 库。至于代码的安装过程,本文仅涉及 Jakarta Tomcat 4.0(Catalina)最小安装所需的步骤。如果您没有使用 Tomcat,请查阅手册以了解您的应用程序服务器。

Struts 和 Tiles 的背景知识
Craig McClanahan 是 Apache Tomcat 项目的技术主管,他创立 Struts 项目以满足对这方面的渴望。它作为“模型-视图-控制器”框架首选的并经过正式认可的开放源码实现,已经越来越流行了。它以与交付产品一起分发的形式受到来自 Sun 和 IBM 的支持。因为 Craig 积极参与 Tomcat 和 Struts 的开发工作,所以 Struts 将继续与 JSP 和 Servlet 规范的参考实现高度兼容,进而与所有 J2EE 应用程序服务器高度兼容。

Malcolm Davis 的有关 Struts 的 developerWorks 文章涵盖了整个 Struts 0.9 的功能;为了简短起见,我将只讨论对 Struts 0.9 的更改以及他未涉及的 Struts 主题。目前的 Struts 发行版本是 1.0.2,但自 2002 年 3 月 19 日起有一个标记为 1.1-b1 的 beta 测试版可供使用。因为 beta 测试版表示编码工作已经完成,在这种情况下只进行错误修正,所以极有可能 1.1 的最终版本不久就将面市,而在 Struts 邮件列表上已经有这种呼声。因此,任何利用 Struts 的新项目很可能都将 1.1 代码作为基础,而这就是我将讨论的内容。

自版本 0.9 以来对 Struts 框架的有用添加包括经改进的表单验证功能、可以通过 XML 声明来指定表单元素和可以动态地定义 bean 特性。然而,最重要的添加可能是将 Tiles 模板库合并到 Struts 分发版中。

您是否曾希望用一种更简便的方法创建一组页面(或可能是整个应用程序),并且每个页面上的用户界面保持一致 ? 有相同的导航栏、页眉和页脚等等?在含有较多内容的页面内显示多个类 portlet 的矩形内容的方法又如何?在 Tiles 框架的帮助下,您可以完成这两项任务和其它更多任务。通过定义屏幕和一组可嵌入在 JSP 页面中的标记的核心 XML 文件来插入静态和动态内容,Tiles 框架允许您构建组件化的视图,并按您的希望来组装它们,从而有助于提高灵活性、可重用性、一致性和可维护性。

Struts 和 Tiles 之间交互良好,因为这两个项目的开发人员已经认识到这两者具有互补性,所以决定让这两者共同协作。开发人员可以指定 Tiles 页面定义作为 Struts 操作的目标视图(按照 Struts 的说法是一个 forward)。因为 Struts 和 Tiles 都遵循 JSP 标记库规范,所以可以在 JSP 页面中将 Struts 标记和 Tiles 标记相互混合在一起。

您可能渴望尝试 Tiles 框架,并确切地了解它可以做些什么。如果您希望在自己安装本文的示例前先了解这些示例的运行情况,可以看看它们在带有嵌入式 Tomcat 的 JBoss 服务器上是怎样运行的。

Struts 和 Tiles 是用于 Web 开发的辅助工具,所以您需要设置一个 Web 容器对它们进行实验;将 Tomcat 设置为您的容器,然后设置 Struts 和 Tiles 包,我会在下一节中循序渐进地讲述这一过程。这些指导信息还向您展示了如何安装本文的样本代码。一旦完成了这一切,您就准备好继续本文。示例 1 应用程序没有利用 Struts 和 Tiles;它演示了以页面为中心的方法。通过将它与示例 2 比较,您会看到 Struts 和 Tiles 将如何极大地提高您的 Web 开发的结构化程度和可管理性。最后,示例 3 演示了将功能添加到一个使用 Struts 和 Tiles 的、并且已经启动且正在运行的 Web 应用程序中是多么地简单。

安装 Struts 和 Tiles
在带有 J2SE 1.4 SDK、Ant 1.4.1、Tomcat 4.0.3 和 Struts 1.1-b1 的 Linux 机器上,下列指导信息已经经过了测试。如果因这些软件包的版本不同而遇到困难,您可能需要使用上面所指定的版本,以便开始了解 Struts 和 Tiles 的设置和开发。

如果您没有 J2SE 1.4 SDK(Java 2 Platfrom,标准版 1.4 软件开发工具箱),请从 http://java.sun.com/j2se/1.4/download.html 获取它,然后遵循该软件包中的指导信息来安装它。您需要 SDK 而不只是 JRE,但是您可以选择获取 Forte/SDK 组合。


确保您的环境变量 JAVA_HOME 设置为 J2SE 1.4 SDK 的安装目录。


如果没有 Ant 1.4,请从 http://jakarta.apache.org/builds/jakarta-ant/release/v1.4.1/bin/ 获取二进制分发版,然后将它解压缩。对于 Ant 1.4 以及安装指导信息中所要求的所有其它包,请确保获取的都是二进制分发版,而不是源代码;否则,您将不得不在使用它们之前编译这些包。同样,将 Ant 的 bin 目录添加到您的路径中。


请从 http://jakarta.apache.org/builds/jakarta-tomcat-4.0/release/v4.0.3/bin/ 获取 Tomcat 4.0.3 二进制分发版,然后将它解压缩。文件名应该与 jakarta-tomcat-4.0.3-LE-jdk14.tar.gz 相似。为了便于稍后在这些指导信息中引用此名称,让我们暂且任意地将安装

上一个:Struts 用户指南(一)
下一个:在struts1.1中使用应用模块简介

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,