Struts 2 简明教程

Struts 2 - Configuration Files

这一章将指导你完成 Struts 2 应用程序的基础配置。我们将在这里看到使用几个重要的配置文件,例如 web.xml, struts.xml, strutsconfig.xmlstruts.properties ,可以配置哪些内容

老实说,你只需要使用 web.xmlstruts.xml 配置文件就可以开始工作(正如你在我们前一章中已经亲眼所见,我们的示例是使用这两个文件进行工作的)。但是,为了你的知识,我们将解释关于其他文件的情况。

The web.xml File

web.xml 配置文件是一个 J2EE 配置文件,它确定 HTTP 请求的元素将如何由 servlet 容器处理。它并不是一个严格意义上的 Struts2 配置文件,但是它是 Struts2 能够工作的需要配置的一个文件。

正如前面讨论的,这个文件提供了一个任何网络应用程序的入口点。Struts2 应用程序的入口点将是一个在部署描述符(web.xml)中定义的过滤器。因此,我们将在 web.xml 中定义一个 FilterDispatcher 类的入口。web.xml 文件需要在文件夹 WebContent/WEB-INF 中被创建。

如果您在没有模板或生成它的工具(例如 Eclipse 或 Maven2)的帮助下开始,那么这是您需要配置的第一个配置文件。

以下是我们在上一个示例中使用的 web.xml 文件的内容。

<?xml version = "1.0" Encoding = "UTF-8"?>
<web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xmlns = "http://java.sun.com/xml/ns/javaee"
   xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee
   http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
   id = "WebApp_ID" version = "3.0">

   <display-name>Struts 2</display-name>
   <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
   </welcome-file-list>

   <filter>
      <filter-name>struts2</filter-name>
      <filter-class>
         org.apache.struts2.dispatcher.FilterDispatcher
      </filter-class>
   </filter>

   <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
   </filter-mapping>

</web-app>

请注意,我们把 Struts 2 过滤器映射到 / ,而不是映射到 */ .action*,这意味着所有的 url 都将由 struts 过滤器解析。当我们学习注释章节的时候,我们将涉及到这一点。

The Struts.xml File

struts.xml 文件包含您将在动作开发时修改的配置信息。这个文件可以用来覆盖应用程序的默认设置,例如 struts.devMode = false 和在属性文件中定义的其他设置。这个文件可以创建在 WEB-INF/classes 文件夹中。

让我们来看看在上一个章节中解释的 Hello World 示例中创建的 struts.xml 文件。

<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
   "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
   <constant name = "struts.devMode" value = "true" />
   <package name = "helloworld" extends = "struts-default">

      <action name = "hello"
         class = "com.tutorialspoint.struts2.HelloWorldAction"
         method = "execute">
         <result name = "success">/HelloWorld.jsp</result>
      </action>

      <-- more actions can be listed here -->

   </package>
   <-- more packages can be listed here -->

</struts>

首先要注意的是 DOCTYPE 。所有 struts 配置文件都需要有正确的 doctype,正如我们的小示例中所示。 <struts> 是根标签元素,我们在它的下面使用 <package> 标签来声明不同的包。这里 <package> 允许配置的分离和模块化。当您有一个大项目且项目被分成不同的模块时,这将非常有用。

例如,如果您的项目有三个域 - business_application、customer_application 和 staff_application,那么您可以创建三个包并将关联的动作存储在适当的包中。

package 标签具有以下属性 −

Sr.No

Attribute & Description

1

name (required) 包的唯一标识符

2

extends 这个包从哪个包扩展?默认情况下,我们使用 struts-default 作为基本包。

3

abstract 如果标记为 true,则包裹不可供最终用户使用。

4

namespace 动作的唯一名称空间

constant 标记连同 name 和 value 属性应该用于覆盖 default.properties 中定义的以下任何属性,例如我们刚刚设置的 struts.devMode 属性。设置 struts.devMode 属性使我们能够在日志文件中看到更多调试消息。

我们定义 action 标记对应于我们想要访问的每个 URL,并且我们定义一个具有 execute() 方法的类,该方法将在我们每次访问相应 URL 时访问。

结果确定在执行某个动作后返回到浏览器的内容。从动作返回的字符串应该是结果的名称。结果像上面那样按每个动作配置,或者作为一个“全局”结果,可供包中的每个动作使用。结果具有可选的 nametype 属性。默认名称值为 “success”。

随着时间的推移,Struts.xml 文件可能会变大,因此按包对其进行拆分是一种模块化方法,但 Struts 提供了另一种模块化 struts.xml 文件的方法。你可以将文件拆分为多个 xml 文件,并按以下方式导入它们。

<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
   "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
   <include file="my-struts1.xml"/>
   <include file="my-struts2.xml"/>
</struts>

我们尚未涉及的另一个配置文件是 struts-default.xml。此文件包含 Struts 的标准配置设置,你无需在 99.99% 的项目中接触这些设置。因此,我们不会对这个文件进行太多详细介绍。如果你有兴趣,可以查看 struts2-core-2.2.3.jar 文件中提供的 default.properties 文件。

The Struts-config.xml File

struts-config.xml 配置文件是 Web Client 中 View 和 Model 组件之间的链接,但你无需在 99.99% 的项目中接触这些设置。

配置文件基本上包含以下主要元素 −

Sr.No

Interceptor & Description

1

struts-config 这是配置文件的根节点。

2

form-beans 这是将 ActionForm 子类映射到名称的位置。你将此名称作为 ActionForm 在整个 strutsconfig.xml 文件以及 JSP 页面中的别名使用。

3

global forwards 此部分将 Web 应用程序上的页面映射到名称。你可以使用此名称来引用实际页面。这避免了在网页上写死 URL。

4

action-mappings 这是声明窗体处理程序的位置,它们也称为动作映射。

5

controller 此部分配置 Struts 内部并很少在实际情况下使用。

6

plug-in 此部分告诉 Struts 在哪里找到你的属性文件,其中包含提示和错误消息

以下是样本 struts-config.xml 文件 −

<?xml version = "1.0" Encoding = "ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 1.0//EN"
   "http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd">

<struts-config>

   <!-- ========== Form Bean Definitions ============ -->
   <form-beans>
      <form-bean name = "login" type = "test.struts.LoginForm" />
   </form-beans>

   <!-- ========== Global Forward Definitions ========= -->
   <global-forwards>
   </global-forwards>

   <!-- ========== Action Mapping Definitions ======== -->
   <action-mappings>
      <action
         path = "/login"
         type = "test.struts.LoginAction" >

         <forward name = "valid" path = "/jsp/MainMenu.jsp" />
         <forward name = "invalid" path = "/jsp/LoginView.jsp" />
      </action>
   </action-mappings>

   <!-- ========== Controller Definitions ======== -->
   <controller contentType = "text/html;charset = UTF-8"
      debug = "3" maxFileSize = "1.618M" locale = "true" nocache = "true"/>

</struts-config>

有关 struts-config.xml 文件的更多详细信息,请查看你的 Struts 文档。

The Struts.properties File

此配置文件提供了一种机制来更改框架的默认行为。实际上, struts.properties 配置文件中包含的所有属性也可以在 web.xml 中使用 init-param 配置,以及使用 struts.xml 配置文件中的常量标记。但是,如果你希望让内容保持分离并且更具体,则可以在 WEB-INF/classes 文件夹下创建此文件。

此文件中配置的值将覆盖 default.properties 中配置的默认值,该值包含在 struts2-core-x.y.z.jar 发行版中。有一些属性你可以考虑使用 struts.properties 文件进行更改 −

### When set to true, Struts will act much more friendly for developers
struts.devMode = true

### Enables reloading of internationalization files
struts.i18n.reload = true

### Enables reloading of XML configuration files
struts.configuration.xml.reload = true

### Sets the port that the server is run on
struts.url.http.port = 8080

hash (#) 开头的任何行都会被认为是一个命令,并会被 Struts 2 忽略。