Struts - 配置文件

  • 简述

    本章将带您完成基本配置 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类的条目 。文件夹下需要创建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 过滤器解析。我们将在完成注释章节时介绍这一点。
  • 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.jc2182.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
    name (required)
    包裹的唯一标识符
    2
    extends
    这个包是从哪个包扩展的?默认情况下,我们使用 struts-default 作为基础包。
    3
    abstract
    如果标记为 true,则该包不可用于最终用户消费。
    4
    namespace
    操作的唯一命名空间
    constant 标签以及名称和值属性应该用于覆盖定义的以下任何属性 default.properties,就像我们刚刚设置 struts.devMode财产。环境struts.devMode 属性允许我们在日志文件中查看更多调试消息。
    我们定义 action 标签对应于我们想要访问的每个 URL,我们定义了一个带有 execute() 方法的类,每当我们访问相应的 URL 时都会访问它。
    结果决定了执行操作后返回给浏览器的内容。操作返回的字符串应该是结果的名称。结果按上述配置,或作为“全局”结果,可用于包中的每个操作。结果有可选nametype属性。默认名称值为“成功”。
    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% 的项目修改这些设置。出于这个原因,我们不会对此文件进行过多的详细介绍。如果您有兴趣,请查看default.properties 文件在 struts2-core-2.2.3.jar 文件中可用。
  • Struts-config.xml 文件

    struts-config.xml 配置文件是 Web Client 中 View 和 Model 组件之间的链接,但您不必为 99.99% 的项目修改这些设置。
    配置文件基本上包含以下主要元素 -
    序号 拦截器和描述
    1
    struts-config
    这是配置文件的根节点。
    2
    form-beans
    这是您将 ActionForm 子类映射到名称的地方。在 strutsconfig.xml 文件的其余部分,甚至在 JSP 页面上,您都使用此名称作为 ActionForm 的别名。
    3
    global forwards
    本节将您的 web 应用程序上的页面映射到一个名称。您可以使用此名称来引用实际页面。这可以避免在您的网页上硬编码 URL。
    4
    action-mappings
    这是您声明表单处理程序的地方,它们也称为动作映射。
    5
    controller
    本节配置 Struts 内部,在实际情况中很少使用。
    6
    plug-in
    此部分告诉 Struts 在哪里可以找到您的属性文件,其中包含提示和错误消息
    以下是示例 struts-config.xml 文件 -
    
    <?xml version = "1.0" Encoding = "utf-8" ?>
    <!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配置文件。但是,如果您希望将这些内容分开并更加具体,那么您可以在文件夹下创建此文件WEB-INF/classes.
    此文件中配置的值将覆盖中配置的默认值 default.properties它包含在 struts2-core-xyzjar 发行版中。有几个属性可以考虑使用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.