struts.xml 是 Struts2 框架的核心配置文件,該文件主要用於配置 Action 和請求的對應關系,以及配置邏輯視圖和物理視圖(邏輯視圖就是在 struts.xml 文件中配置的 <result> 元素,它的 name 屬性值就是邏輯視圖名;物理視圖是指 <result> 元素中配置的結果頁面,如 JSP 文件)資源的對應關系。
存放路徑:struts.xml 文件通常放在 Web 應用的 WEB-INF/classes 目錄下,在該目錄下的 struts.xml 文件可以被 Struts2 框架自動加載。由於 MyEclipse 開發工具在編譯時會自動將 src 路徑下的 struts.xml 文件編譯后放到 WEB-INF/classes 路徑下,所以直接將其放到項目的 src 路徑下即可。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!--<constant>元素用常量的配置--> <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="true" /> <!--<package>元素用於包配置--> <package name="default" namespace="/" extends="struts-default"> <!--配置Action--> <action name="index" class="Xxx"/> <!--配置Result--> <result type="dispatcher"> <param name="location">/index.jsp</param> </result> </action> </package> <!-- <include>元素用於包含配置 --> <include file="example.xml"/> </struts>
● <struts> 元素:是文件的根元素,所有其他元素都放在 <struts></struts> 中。
● <constant> 元素:用於進行常量配置。
● <package> 元素:用於進行包配置,在 Struts2 框架中,包用於組織 Action 和攔截器等信息,每個包都是由零個或多個攔截器以及 Action 所組成的集合。
● <include> 元素:用於在一個 struts.xml 配置文件中包含其他的配置文件。
1. 常量配置
在使用 Struts2 框架開發的項目中,通常需要使用大量的常量,這些常量大多在默認的配置文件中已經配置好,但由於用戶的需求不同,開發的要求也有所不同,這時可能就需要對這些常量值進行修改,其修改的方法就是在配置文件中對常量進行重新配置。
通常使用的三種方式:
- 在 struts.xml 文件中使用 <constant> 元素配置常量(常用方式)。
- 在 struts.properties 文件中配置常量。
- 在 web.xml 文件中通過 <init-param> 元素配置常量。
在 struts.xml 文件中通過 <constant.../> 元素配置常量時,需要指定兩個必填的屬性 name 和 value。其中 name 屬性用於指定常量的常量名,value 屬性用於指定常量的常量值。
<!-- 配置了常量 struts.i18n.encoding 和 struts.devMode。
其中 struts.i18n.encoding 用於指定 Struts2 應用程序的默認編碼集為 UTF-8,struts.devMode 用於指定項目使用的是開發模式。 --> <struts> <!--設置默認編碼集為UTF-8--> <constant name="struts.il8n.encoding" value="UTF-8" /> <!--設置使用開發模式--> <constant name="struts.devMode" value="true" /> </struts>
Struts2 所支持的常量數量很多,在 struts2-core-2.3.37.jar 壓縮文件的 org/apache/struts2 路徑下有一個 default.properties 文件,該文件里為 Struts2 的所有常量都指定了默認值。
除了可以通過上述的三種方式配置常量以外,在 Struts2 內置的一些配置文件中也有對常量的配置。
因此,如果在多個文件中配置了同一個 Struts2 常量,則 Struts2 框架加載常量是有一定順序的,通常的搜索順序如下。
1)default.properties:該文件保存在 struts2-core-2.3.37.jar 中的 org.apache.struts2 包中。
2)struts-default.xml:該文件保存在 struts2-core-2.3.37.jar 文件中。
3)struts-plugin.xml:該文件保存在 struts-Xxx-2.3.37.jar 等 Struts2 插件 JAR 包中。
4)struts.xml:該文件是 Web 應用自身的 Struts2 配置文件。
5)struts.properties:該文件是 Web 應用默認的 Struts2 配置文件。
6)web.xml:該文件是 Web 應用的配置文件。
上面指定了 Struts2 框架搜索 Struts2 常量的順序,需要注意的是,如果在多個文件中配置了同一個 Struts2 常量,則后一個文件中配置的常量值會覆蓋前面文件中配置的常量值。
2. 包配置
在 Struts2 框架中,包用於管理 Action 和攔截器,每個包就是多個 Action、多個攔截器、多個攔截器引用的集合。
在 struts.xml 文件中,使用 <package> 元素定義包配置,每個 <package> 元素都定義了一個包配置。
<package name="default" namespace="/" extends="struts-default"> ... </package>
屬性:
- name:必填屬性,用於指定該包的名稱(該名稱在配置文件中必須是唯一的),此名稱是該包被其他包引用的 Key。
- namespace:可選屬性,用於定義該包的命名空間。
- extends:可選屬性,用於指定該包繼承自其他包。其屬性值必須是另一個包的 name 屬性值,但該屬性值通常都設置為 struts-default,這樣該包中的 Action 就具有了 Struts2 框架默認的攔截器等功能。
3. 包含配置
Struts2 允許將一個配置文件分解成多個配置文件,從而提高配置文件的可讀性,<include> 元素用於在一個 struts.xml 配置文件中包含其他的配置文件。
Struts2 默認只加載 WEB-INF/classes 下的 struts.xml 文件,一旦通過多個 XML 文件配置 Action,就必須通過 <include> 元素包含其他配置文件。
在 struts.xml 文件中包含配置:
<struts> <!--不指定路徑,默認在src下時的方式--> <include file="struts-post.xml"/> <include file="struts-user.xml"/> <include file="struts-dept.xml"/> <!--配置文件在具體包中時的方式--> <include file="com/mengma/action/struts-product.xml"/> </struts>
struts.xml 文件通過 <include> 元素包含了四個配置文件,其中 file 屬性用於指定被包含配置文件的名稱。如果被包含的配置文件在 src 路徑下,則直接指定文件名即可,如果被包含的配置文件在具體的包中,則需要引入被包含文件的包路徑。
需要注意的是,每一個被包含的配置文件都是標准的 Struts2 配置文件,同樣包含 DTD 信息、Struts2 配置文件的根元素等信息。由於 struts.xml 文件包含了其他的配置文件,所以在 Struts2 框架自動加載 struts.xml 文件時,就會完成所有配置信息的加載。