Struts 2 - 配置文件



本章将引导您完成Struts 2应用程序所需的基本配置。在这里,我们将了解如何使用一些重要的配置文件(如web.xml、struts.xml、strutsconfig.xmlstruts.properties)进行配置。

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

web.xml 文件

web.xml配置文件是J2EE配置文件,它确定servlet容器如何处理HTTP请求的元素。它并非严格意义上的Struts 2配置文件,但它是Struts 2运行所需的一个文件。

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

如果您是从头开始,没有使用生成它的模板或工具(例如Eclipse或Maven 2),那么这是您需要配置的第一个配置文件。

以下是我们在上一个示例中使用的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文件包含您在开发Action时将修改的配置信息。此文件可用于覆盖应用程序的默认设置,例如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,如我们的示例所示。是根标签元素,我们使用标签在其中声明不同的包。允许配置的分离和模块化。当您拥有大型项目并且项目被分成不同的模块时,这非常有用。

例如,如果您的项目有三个域——business_application、customer_application和staff_application,那么您可以创建三个包并将相关的Action存储在相应的包中。

package标签具有以下属性:

序号 属性及描述
1

name (必需)

包的唯一标识符

2

extends

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

3

abstract

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

4

namespace

Action的唯一命名空间

constant标签与name和value属性一起使用,可以覆盖default.properties中定义的任何属性,就像我们刚刚设置struts.devMode属性一样。设置struts.devMode属性允许我们在日志文件中看到更多调试信息。

我们为每个要访问的URL定义action标签,并定义一个包含execute()方法的类,该方法将在我们访问相应的URL时被访问。

结果决定在执行Action后返回给浏览器的內容。Action返回的字符串应该是结果的名称。结果按上述方式为每个Action配置,或作为“全局”结果,可用于包中的每个Action。结果具有可选的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文件。

Struts-config.xml 文件

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

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

序号 拦截器及描述
1

struts-config

这是配置文件的根节点。

2

form-beans

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

3

global forwards

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

4

action-mappings

在这里,您可以声明表单处理程序,它们也被称为Action映射。

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

Struts.properties 文件

此配置文件提供了一种更改框架默认行为的机制。实际上,struts.properties配置文件中包含的所有属性也可以在web.xml中使用init-param进行配置,也可以在struts.xml配置文件中使用constant标签进行配置。但是,如果您希望将这些内容分开,并使其更特定于Struts,则可以在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忽略。

广告