Struts 2 - 配置文件


本章将带您完成Struts 2应用程序所需的基本配置。在这里,我们将看到一些重要的配置文件(如web.xml、struts.xml、strutsconfig.xmlstruts.properties)的帮助下可以配置哪些内容

老实说,您只需使用web.xmlstruts.xml配置文件就可以开始工作(正如您在上一章中已经看到的那样,我们的示例使用这两个文件进行工作)。但是,为了您的了解,我们还将解释其他文件。

web.xml 文件

web.xml 配置文件是一个 J2EE 配置文件,它确定 servlet 容器如何处理 HTTP 请求的元素。严格来说它不是一个Struts2配置文件,但是它是一个需要配置Struts2才能工作的文件。

如前所述,此文件为任何 Web 应用程序提供了入口点。Struts2 应用程序的入口点将是部署描述符 (web.xml) 中定义的过滤器。因此,我们将在 web.xml 中定义FilterDispatcher类的条目 。需要在文件夹WebContent/WEB-INF下创建 web.xml 文件。

如果您在没有模板或生成它的工具(例如 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 过滤器解析。当我们阅读“注释”章节时,我们将介绍这一点。

Struts.xml 文件

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 配置文件都需要具有正确的文档类型,如我们的小示例所示。<struts> 是根标签元素,在该元素下我们使用 <package> 标签声明不同的包。这里 <package> 允许配置的分离和模块化。当您有一个大型项目并且项目分为不同的模块时,这非常有用。

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

包标签具有以下属性 -

先生编号 属性及描述
1

姓名(必填)

包的唯一标识符

2

延伸

这个包是从哪个包扩展而来的?默认情况下,我们使用 struts-default 作为基础包。

3

抽象的

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

4

名称空间

操作的唯一命名空间

常量标签以及 name 和 value 属性应该用于覆盖default.properties中定义的以下任何属性,就像我们刚刚设置struts.devMode属性一样。设置struts.devMode属性允许我们在日志文件中看到更多调试消息。

我们定义对应于我们想要访问的每个 URL 的操作标签,并定义一个带有execute() 方法的类,每当我们访问相应的 URL 时就会访问该方法。

结果决定执行操作后返回到浏览器的内容。从操作返回的字符串应该是结果的名称。结果按上面的操作进行配置,或者作为“全局”结果,可用于包中的每个操作。结果具有可选的名称类型属性。默认名称值为“成功”。

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文件。

Struts-config.xml 文件

struts-config.xml 配置文件是 Web 客户端中视图和模型组件之间的链接,但对于 99.99% 的项目,您不必触及这些设置。

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

先生编号 拦截器和描述
1

struts 配置

这是配置文件的根节点。

2

表单bean

您可以在此处将 ActionForm 子类映射到名称。您可以在 strutsconfig.xml 文件的其余部分甚至 JSP 页面上使用该名称作为 ActionForm 的别名。

3

全球前锋

此部分将 Web 应用程序上的页面映射到名称。您可以使用此名称来引用实际页面。这可以避免在网页上对 URL 进行硬编码。

4

动作映射

这是您声明表单处理程序的地方,它们也称为操作映射。

5

控制器

本节配置 Struts 内部结构,在实际情况中很少使用。

6

插入

本节告诉 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 文档。

Struts.properties 文件

该配置文件提供了一种更改框架默认Behave的机制。实际上, struts.properties配置文件中包含的所有属性也可以使用init-param在web.xml中进行配置,也可以使用struts.xml配置文件中的常量标签进行配置。但是,如果您希望将这些内容分开并让 struts 更具体,那么您可以在文件夹WEB-INF/classes下创建此文件。

该文件中配置的值将覆盖 struts2-core-xyzjar 发行版中包含的default.properties中配置的默认值。您可以考虑使用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

这里任何以井号(#) 开头的行都将被假定为注释,并且将被Struts 2忽略。