Struts 框架和模型-视图-控制器设计模式

Struts 是一个开放式源代码软件的框架,可帮助您快速且容易地构建 Web 应用程序。它依赖于一些标准技术,例如,Java bean、Java servlet、JavaServer Pages(JSP)和 XML。Struts 鼓励采用基于模型 2 方法的应用程序体系结构,模型 2 方法基本上与模型-视图-控制器(MVC)设计模式相同。

使用 Struts 来创建复杂的 Web 应用程序有助于使应用程序可维护性更好。应用程序更易于调试、更易于扩展且更易于理解。

Struts 的核心是 MVC 样式的控制器,它与提供模型和视图的其它技术集成。对于模型,Struts 可与标准数据访问技术(如 JDBC 和 EJB)以及许多第三方包(如 Hibernate、iBATIS 或 Object Relational Bridge)交互。对于视图,Struts 很好地使用 JSP,包括 JSP 标准标记库(JSTL)和 JavaServer Faces(JSF)以及 Velocity 模板、XSLT 和其它表示系统。

Struts 由 Apache Software Foundation(ASF)作为它的 Jakarta 项目的一部分管理。有关 Struts 的详细描述,请参阅以下 Web 站点:
http://jakarta.apache.org/struts/index.html

后面各节讨论模型-视图-控制器设计模式和 Struts 技术:

MVC 设计模式概述

模型-视图-控制器设计模式(在 J2EE 应用程序编程中也称为“模型 2”)是用于编程的公认的设计模式。表 1 总结了 MVC 的三个主要组件。

表 1. MVC 组件的总结
  目的 描述
模型 维护数据 业务逻辑和一个或多个数据源(如关系数据库)
视图 显示全部或部分数据 向用户显示有关模型的信息的用户界面
控制器 处理影响模型或视图的事件 流量控制机制是用户用来与应用程序交互的机制

模型 1 和模型 2

模型 1 和模型 2 的体系结构都将内容生成(业务逻辑)与内容表示(HTML 格式)分离开。模型 2 与模型 1 的不同之处在于:在该位置,成批请求处理是由控制器执行而不是在 JSP 页中执行的。

在 JSP 模型 1 体系结构中,JSP 页单独处理进入的请求并应答客户机,如图 1 所示。

图 1. JSP 模型 1 体系结构
应用程序服务器上的 JSP 页与连接至企业服务器或数据源的 Java bean 通信以及处理来自浏览器的请求并应答浏览器
  1. 浏览器向 JSP 页发送请求。
  2. JSP 页与 Java bean 通信。
  3. 将 Java bean 连接至数据库。
  4. JSP 页向浏览器发送响应。

在 JSP 模型 2 体系结构中,servlet 处理请求,创建 JSP 文件使用的任何 bean 或对象,然后转发请求,如图 2 中所示。

图 2. JSP 模型 2 体系结构
应用程序服务器上的 servlet 处理请求,实例化连接至企业服务器或数据源的 Java bean,并将请示转发给 JSP 文件以对浏览器作出响应
  1. 浏览器向 servlet 发送请求。
  2. servlet 实例化连接至数据库的 Java bean。
  3. servlet 与 JSP 页通信。
  4. JSP 页与 Java bean 通信。
  5. JSP 页向浏览器发送响应。

表 2 显示了帮助您确定何时模型 1 或模型 2 更适用的条件:

表 2. 使用模型 1 和模型 2 指南
条件 模型 1 模型 2
Web 应用程序的类型 简单 复杂
开发者任务的性质 快速建立原型 创建要修改或维护的应用程序
执行工作的人员 同一个小组完成视图和控制器 不同的小组完成视图和控制器

模型 2 的 Struts 实现

模型 2 的 Struts 实现使用特定类型的 servlet(称为操作 servlet)以及一个或多个操作和操作映射来实现控制器。它还使用特定类型的 Java bean(称为表单 bean)。如图 3 中所说明的,Web 服务器在运行时包含模型 2 Web 应用程序的视图和控制器组件,而第三层(它通常在 Web 服务器的外面)包含模型。

图 3. Struts 框架:模型 2 体系结构
显示通过使用模型-视图-控制器原理设计的应用程序结构的图

Struts 对 MVC 组件的作用,如表 3 所示。

表 3. Struts 对模型、视图和控制器的作用
组件 作用
模型 无直接作用。然而,Struts 操作和配置文件提供了一个很好的控制调用模型组件的情况的方法。
视图
  • Java™ 类 org.apache.struts.action.ActionForm,可以对其子类化以创建表单 bean,在运行时,该表单 bean 有两种用法:
    • 当 JSP 页准备相关 HTML 表单以显示时,JSP 页访问该 bean(它保存了将要放置在表单中的值)。从业务逻辑或从先前用户输入提供了那些值。
    • 当从 Web 浏览器返回用户输入时,bean 将验证并保存该输入以供业务逻辑使用或用于以后重新显示(当验证失败时)。
  • 许多定制 JSP 标记,它们的使用简单但是在隐藏信息方面功能又很强大。例如,除了 bean 名称和给定 bean 中每个字段的名称之外,Page Designer 不需要知道关于表单 bean 的更多内容。
控制器
  • Struts 操作 servlet 根据在部署时提供的一组规则处理运行时事件。那些规则包含在 Struts 配置文件中并且指定 servlet 如何响应从业务逻辑接收的每个结果。对控制流的更改只需对配置文件进行更改。
  • Struts 还提供 Java 类 org.apache.struts.action.Action,Java 开发者对其子类化以创建“操作类”。在运行时,操作 servlet 被称为“执行操作”,这意味着 servlet 调用每个实例化的操作类的 execute 方法。从 execute 方法返回的对象指示操作 servlet 下一步访问哪个操作或 JSP 文件。

    建议您通过从操作类调用业务逻辑而不是将业务逻辑包括在该类中来促进重用。

MVC 设计模式的优点

将模型-视图-控制器分部模式应用于动态 Web 应用程序开发有几个优点:

相关概念
基于 Struts 的 Web 应用程序 - 概述
用于应用程序开发的 Struts 工具
Struts 操作和操作映射
Struts 表单 bean 和表单 bean 映射

相关任务
使用 Struts 创建体系结构良好的 Web 应用程序
创建动态 Web 项目

相关参考
关于 Struts 的书籍
选择 Struts 或 JavaServer Faces 的条件

使用条款 | 反馈
(C) Copyright IBM Corporation 1999, 2005. All Rights Reserved.