Java 编程/Struts
此参考正在开发中。所有 Struts 开发人员都要求贡献并帮助扩展此参考。
Struts 是用于开发基于 Java 的 Web 应用程序的最流行的框架。Struts 正在作为由 Apache 软件基金会 启动的开源项目进行开发。Struts 框架基于 模型视图控制器 (MVC) 架构。
在 MVC 上下文中,Struts 框架提供了自己的 Web 控制器组件,并与其他技术集成以提供模型和视图。对于模型,框架可以与标准数据访问技术(如 JDBC 和 EJB)以及大多数任何第三方软件包(如 Hibernate、iBATIS 或 Object Relational Bridge)交互。对于视图,框架与 JavaServer Pages(包括 JSTL 和 JSF)以及 Velocity Templates、XSLT 和其他表示系统配合良好。
框架的控制器充当应用程序的模型和 Web 视图之间的桥梁。当收到请求时,控制器会调用 Action 类。Action 类会与模型(或者,更确切地说,是表示模型的 Facade)进行协商,以检查或更新应用程序的状态。框架提供了一个 ActionForm 类来帮助在模型和视图之间传输数据。
大多数情况下,模型表示为一组 JavaBeans。通常,开发人员将使用 Commons BeanUtils 在 ActionForms 和模型对象(或 Facade)之间传输数据。最好让模型进行“繁重的工作”,而 Action 充当“交通警察”或适配器。
Web 应用程序使用部署描述符来初始化资源,如 servlet 和标签库。部署描述符格式化为 XML 文档,名为“web.xml”。同样,框架使用配置文件来初始化它自己的资源。这些资源包括用于从用户收集输入的 ActionForms,用于将输入定向到服务器端 Actions 的 ActionMappings,以及用于选择输出页面的 ActionForwards。
Struts 的初始化是通过在 web.xml 文件中包含以下内容来实现的。
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
以下是一个用于登录工作流的简单配置 (struts-config.xml)
<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd"> <struts-config> <form-beans> <form-bean name="logonForm" type="app.LogonForm"/> </form-beans> <action-mappings> <action path="/Welcome" forward="/pages/Welcome.jsp"/> <action path="/Logon" forward="/pages/Logon.jsp"/> <action path="/LogonSubmit" type="app.LogonAction" name="logonForm" scope="request" validate="true" input="/pages/Logon.jsp"> <forward name="success" path="/pages/Welcome.jsp"/> <forward name="failure" path="/pages/Logon.jsp"/> </action> <action path="/Logoff" type="app.LogoffAction"> <forward name="success" path="/pages/Logoff.jsp"/> </action> </action-mappings> <message-resources parameter="resources.application"/> </struts-config>
您可以在框架的配置文件中指定其他几种资源。您可以使用 Struts Validator 在 XML 描述符中为 ActionForms 指定验证。标准扩展 Tiles 帮助您从较小的片段构建页面。
Struts Action 框架是可扩展的。框架部署的每个类都可以由您自己的默认类替换。您可以使用 Digester 的 set-property 功能设置默认类的属性。这是为什么有这么多贡献者扩展的原因之一。
Tiles 是一个贡献者扩展。
通过组装 Tiles 创建屏幕:标题、页脚、菜单、主体等。定义可以发生在
- 集中式的 xml 文件中
- 直接在 jsp 页面中
- 在 Struts 动作中以编程方式
定义提供了一种继承机制:一个定义可以扩展另一个定义,并覆盖参数。
定义常见的页面布局并在整个网站上重复使用它们。定义菜单布局,并通过传递项目和链接列表来使用它们。定义门户布局,通过传递要显示的 Tiles(页面)列表来使用它。重复使用现有布局或定义您自己的布局。
Tiles 可以在页面重新加载期间动态收集。可以更改任何属性:布局、门户中的 Tiles 列表、菜单项列表等。
如果定义良好,Tile 可以跨多个应用程序重复使用。动态属性用于参数化 Tiles。可以定义一个可重复使用的 Tiles 库。通过组装预定义的组件来构建页面,并为它们提供适当的参数。
可以根据区域设置加载不同的 tiles。类似于 Java 属性文件的机制用于定义文件:您可以在每个区域设置中拥有一个定义文件。将根据当前区域设置加载相应的定义。
可以根据密钥加载不同的 Tiles。例如,密钥可以是用户权限、浏览器类型、存储在会话中的任意名称等。类似于 Java 属性文件的机制用于定义文件:您可以在每个密钥中拥有一个定义文件。将根据密钥加载相应的定义。
除了对构建 Web 应用程序的基本了解之外,还需要读者对以下技术有一定的了解。
- HTML
- HTTP
- 面向对象编程 (OOP)
- JSP 和 Java Servlet
- JavaBeans
- XML (可扩展标记语言)
与传统的 Web 应用开发方法相比,Struts 框架提供了以下优势。
- 解耦业务逻辑和展示逻辑
- 可重用性
- 可维护性
这些优势来自于 Struts 基于 Java Web 应用设计的“模型 2”模式构建系统,同时提供了一个比一系列 J2EE servlet 更简洁的应用框架。
(以下列表与上面(简单配置的示例)和下面关于 JBoss 上的 Struts 教程的示例链接中的顺序相同。)
- <struts-config - 包含其他标签的外部标签。
- <data-sources -
- <form-beans - 定义一个包含一个或多个 <form-bean 标签的表单部分。
- <form-bean - 定义一个表单
- name=
- type=
- <global-exceptions -
- <global-forwards - 定义一个默认情况下在 <action 标签中使用的转发路由部分。它包含一个或多个 <forward 标签。
- <action-mappings - 定义一个包含一个或多个 <action 标签的操作部分。
- <action - 定义一个操作,它可以有一个或多个转发路由(带有一个转发属性或一个或多个 <forward 子标签)
- path=
- forward=
- type=
- name=
- scope=
- validate=
- input=
- parameter= 可以从 @struts.Action@ 类中通过 @mappings.getParameter()@ 读取
- <forward - 定义 <action 标签中的转发路由
- name=
- path=
- <controller -
- <message-resources -
- parameter=
- 最佳实践:http://www.javaworld.com/javaworld/jw-09-2004/jw-0913-struts.html
- 理解 Struts 控制器:http://www.roseindia.net/struts/understanding_struts_controller.shtml
- JBoss 上的 Struts 教程:http://www.mastertheboss.com/web-interfaces/190-jboss-struts-tutorial.html