跳转到内容

Java 编程/Struts

来自维基教科书,开放的书籍,开放的世界

此参考正在开发中。所有 Struts 开发人员都要求贡献并帮助扩展此参考。


Struts 是用于开发基于 Java 的 Web 应用程序的最流行的框架。Struts 正在作为由 Apache 软件基金会 启动的开源项目进行开发。Struts 框架基于 模型视图控制器 (MVC) 架构。

简述 Action 框架

[编辑 | 编辑源代码]

在 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 充当“交通警察”或适配器。

简述 Struts 配置

[编辑 | 编辑源代码]

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 列表、菜单项列表等。

Tiles/组件的重用
[编辑 | 编辑源代码]

如果定义良好,Tile 可以跨多个应用程序重复使用。动态属性用于参数化 Tiles。可以定义一个可重复使用的 Tiles 库。通过组装预定义的组件来构建页面,并为它们提供适当的参数。

国际化 (i18n)

[编辑 | 编辑源代码]

可以根据区域设置加载不同的 tiles。类似于 Java 属性文件的机制用于定义文件:您可以在每个区域设置中拥有一个定义文件。将根据当前区域设置加载相应的定义。

多通道

[编辑 | 编辑源代码]

可以根据密钥加载不同的 Tiles。例如,密钥可以是用户权限、浏览器类型、存储在会话中的任意名称等。类似于 Java 属性文件的机制用于定义文件:您可以在每个密钥中拥有一个定义文件。将根据密钥加载相应的定义。

先决条件

[编辑 | 编辑源代码]

除了对构建 Web 应用程序的基本了解之外,还需要读者对以下技术有一定的了解。

与传统的 Web 应用开发方法相比,Struts 框架提供了以下优势。

  • 解耦业务逻辑和展示逻辑
  • 可重用性
  • 可维护性

这些优势来自于 Struts 基于 Java Web 应用设计的“模型 2”模式构建系统,同时提供了一个比一系列 J2EE servlet 更简洁的应用框架。

Struts XML 标签和属性参考

[编辑 | 编辑源代码]

(以下列表与上面(简单配置的示例)下面关于 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=

进一步阅读

[编辑 | 编辑源代码]
华夏公益教科书