struts2.0(二)中struts.xml配置檔案詳解
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" >
<struts>
<!-- include節點是struts2中元件化的方式 可以將每個功能模組獨立到一個xml配置檔案中 然後用include節點引用 -->
<include file="struts-default.xml"></include>
<!-- package提供了將多個Action組織為一個模組的方式
package的名字必須是唯一的 package可以擴充套件 當一個package擴充套件自
另一個package時該package會在本身配置的基礎上加入擴充套件的package
的配置 父package必須在子package前配置
name:package名稱
extends:繼承的父package名稱
abstract:設定package的屬性為抽象的 抽象的package不能定義action 值true:false
namespace:定義package名稱空間 該名稱空間影響到url的地址,例如此名稱空間為/test那麼訪問是的地址為http://localhost:8080/struts2/test/XX.action
-->
<package name="com.kay.struts2" extends="struts-default" namespace="/test">
<interceptors>
<!-- 定義攔截器
name:攔截器名稱
class:攔截器類路徑
-->
<interceptor name="timer" class="com.kay.timer"></interceptor>
<interceptor name="logger" class="com.kay.logger"></interceptor>
<!-- 定義攔截器棧 -->
<interceptor-stack name="mystack">
<interceptor-ref name="timer"></interceptor-ref>
<interceptor-ref name="logger"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 定義預設的攔截器 每個Action都會自動引用
如果Action中引用了其它的攔截器 預設的攔截器將無效 -->
<default-interceptor-ref name="mystack"></default-interceptor-ref>
<!-- 全域性results配置 -->
<global-results>
<result name="input">/error.jsp</result>
</global-results>
<!-- Action配置 一個Action可以被多次對映(只要action配置中的name不同)
name:action名稱
class: 對應的類的路徑
method: 呼叫Action中的方法名
-->
<action name="hello" class="com.kay.struts2.Action.LoginAction">
<!-- 引用攔截器
name:攔截器名稱或攔截器棧名稱
-->
<interceptor-ref name="timer"></interceptor-ref>
<!-- 節點配置
name : result名稱 和Action中返回的值相同
type : result型別 不寫則選用superpackage的type struts-default.xml中的預設為dispatcher
-->
<result name="success" type="dispatcher">/talk.jsp</result>
<!-- 引數設定
name:對應Action中的get/set方法
-->
<param name="url">http://www.sina.com</param>
</action>
</package>
</struts>
補充:
struts.xml是我們在開發中利用率最高的檔案,也是Struts2中最重要的配置檔案。
一下分別介紹一下幾個struts.xml中常用到的標籤
1、<include>
利用include標籤,可以將一個struts.xml配置檔案分割成多個配置檔案,然後在struts.xml中使用<include>標籤引入其他配置檔案。
比如一個網上購物程式,可以把使用者配置、商品配置、訂單配置分別放在3個配置檔案user.xml、goods.xml和order.xml中,然後在struts.xml中將這3個配置檔案引入:
struts.xml:
1
2
3
4
5
6
7
8
9
10
|
<? xml version = "1.0" encoding = "UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" < struts > < include file = "user.xml" /> < include file = "goods.xml" /> < include file = "order.xml" /> </ struts > |
user.xml:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<? xml version = "1.0" encoding = "UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" < struts > < package name = "wwfy" extends = "struts-default" > < action name = "login" class = "wwfy.user.LoginAction" > <!--省略Action其他配置--> </ action > < action name = "logout" class = "wwfy.user.LogoutAction" > <!--省略Action其他配置--> </ action > </ package > </ struts > |
2、<constant>
在之前提到struts.properties配置檔案的介紹中,我們曾經提到所有在struts.properties檔案中定義的屬性,都可以配置在struts.xml檔案中。而在struts.xml中,是通過<constant>標籤來進行配置的:
1
2
3
4
5
6
7
8
9
10
11
12
|
<? xml version = "1.0" encoding = "UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" < struts > <!--設定開發模式--> < constant name = "struts.devMode" value = "true" /> <!--設定編碼形式為GB2312--> < constant name = "struts.i18n.encoding" value = "GB2312" /> <!--省略其他配置資訊--> </ struts > |
3、<package>
1、包屬性介紹
在Struts2框架中是通過包來管理action、result、interceptor、interceptor-stack等配置資訊的。包屬性如下:
屬性 |
是否必需 |
描述 |
name | 是 | 包名,作為其它包應用本包的標記 |
extends | 否 | 設定本包繼承其它包 |
namespace | 否 | 設定包的名稱空間 |
abstact | 否 | 設定為抽象包 |
2、extends屬性的詳解
- 當一個包通過配置extends屬性繼承了另一個包的時候,該包將會繼承父包中所有的配置,包括action、result、interceptor等。
- 由於包資訊的獲取是按照配置檔案的先後順序進行的,所以父包必須在子包之前被定義。
- 通常我們配置struts.xml的時候,都繼承一個名為“struts-default.xml”的包,這是struts2中內建的包。
3、namespace的詳解
namespace主要是針對大型專案中Action的管理,更重要的是解決Action重名問題,因為不在同一個名稱空間的Action可以使用相同的Action名的。
1)如果使用名稱空間則URL將改變
比如我們有一下配置檔案
1
2
3
4
5
|
< package name = "wwfy" extends = "struts-default" > < action name = "login" class = "wwfy.action.LoginAction" > < result >/success.jsp</ result > </ action > </ package > |
則此配置下的Action的URL為http://localhost:8080/login.action
假如為這個包指定了名稱空間
1
2
3
4
5
|
< package name = "wwfy" extends = "struts-default" namespace = "/user" > < action name = "login" class = "wwfy.action.LoginAction" > < result >/success.jsp</ result > </ action > </ package > |
則此配置下的Action的URL為http://localhost:8080/user/login.action
2)預設名稱空間
Struts2中如果沒有為某個包指定名稱空間,該包使用預設的名稱空間,預設的名稱空間總是""。
3)指定根名稱空間
當設定了名稱空間為“/”,即指定了包的名稱空間為根名稱空間時,此時所有根路徑下的Action請求都會去這個包中查詢對應的資源資訊。
假若前例中路徑為http://localhost:8080/login.action則所有http://localhost:8080/*.action都會到設定為根名稱空間的包中尋找資源。
4、<action>與<result>
1、<action>屬性介紹
屬性名稱 |
是否必須 |
功能描述 |
name | 是 | 請求的Action名稱 |
class | 否 | Action處理類對應具體路徑 |
method | 否 | 指定Action中的方法名 |
converter | 否 | 指定Action使用的型別轉換器 |
如果沒有指定method則預設執行Action中的execute方法。
2、<result>屬性介紹
屬性名稱 |
是否必須 |
功能描述 |
name | 否 | 對應Action返回邏輯檢視名稱,預設為success |
type | 否 | 返回結果型別,預設為dispatcher |
3、萬用字元的使用
隨著result的增加,struts.xml檔案也會隨之變得越來越複雜。那麼就可以使用萬用字元來簡化配置:
例如下面這個案例:
Action為Test.Java
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public class Test { public String test1(){ return "result1" ; } public String test2(){ return "result2" ; } public String test3(){ return "result3" ; } } |
struts.xml中配置為
1
2
3
4
5
|
< package name = "wwfy" extends = "struts-default" > < action name = "test*" class = "wwfy.action.test{1}" > < result name = "result{1}" >/result{1}.jsp</ result > </ action > </ package > |
4、訪問Action方法的另一種實現方式
在Struts2中如果要訪問Action中的指定方法,還可以通過改變URL請求來實現,將原本的“Action名稱.action”改為“Action名稱!方法名稱.action”在struts.xml中就不需要指定方法名了。
5、<exception-mapping>與<global-exception-mapping>
這兩個標籤都是用來配置發生異常時對應的檢視資訊的,只不過一個是Action範圍的,一個是包範圍的,當同一型別異常在兩個範圍都被配置時,Action範圍的優先順序要高於包範圍的優先順序.這兩個標籤包含的屬性也是一樣的:
屬性名稱 |
是否必須 |
功能描述 |
name | 否 | 用來表示該異常配置資訊 |
result | 是 | 指定發生異常時顯示的檢視資訊,這裡要配置為邏輯檢視 |
exception | 是 | 指定異常型別 |
兩個標籤的示例程式碼為:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<? xml version = "1.0" encoding = "UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" < struts > < package name = "default" extends = "struts-default" > < global-exception-mappings > < exception-mapping result = "邏輯檢視" exception = "異常型別" /> </ global-exception-mappings > < action name = "Action名稱" > < exception-mapping result = "邏輯檢視" exception = "異常型別" /> </ action > </ package > </ struts > |
6、<default-class-ref>
當我們在配置Action的時候,如果沒有為某個Action指定具體的class值時,系統將自動引用<default-class-ref>標籤中所指定的類。在Struts2框架中,系統預設的class為ActionSupport,該配置我們可以在xwork的核心包下的xwork-default.xml檔案中找到。
有特殊需要時,可以手動指定預設的class
1
2
3
4
5
6
7
|
package wwfy.action; public class DefaultClassRef { public void execute(){ System.out.println( "預設class開始執行……" ); } } |
在struts.xml中配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<? xml version = "1.0" encoding = "UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" < struts > < package name = "wwfy" extends = "struts-default" > <!-- 指定預設class為Test --> < default-class-ref class = "wwfy.action.DefaultClassRef" /> < action name = "test1" > < result >/index.jsp</ result > </ action > </ package > </ struts > |
7、<default-action-ref>
如果在請求一個沒有定義過的Action資源時,系統就會丟擲404錯誤。這種錯誤不可避免,但這樣的頁面並不友好。我們可以使用<default-action-ref>來指定一個預設的Action,如果系統沒有找到指定的Action,就會指定來呼叫這個預設的Action。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<? xml version = "1.0" encoding = "UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" < struts > < package name = "wwfy" extends = "struts-default" > < default-action-ref name = "acctionError" ></ default-action-ref > < action name = "acctionError" > < result >/jsp/actionError.jsp</ result > </ action > </ package > </ struts > |
8、<default-interceptor-ref>
該標籤用來設定整個包範圍內所有Action所要應用的預設攔截器資訊。事實上我們的包繼承了struts-default包以後,使用的是Struts的預設設定。我們可以在struts-default.xml中找到相關配置:
1
|
< default-interceptor-ref name = "defaultStack" /> |
在實際開發過程中,如果我們有特殊的需求是可以改變預設攔截器配置的。當時一旦更改這個配置,“defaultStack”將不再被引用,需要手動最加。
9、<interceptors>
通過該標籤可以向Struts2框架中註冊攔截器或者攔截器棧,一般多用於自定義攔截器或攔截器棧的註冊。該標籤使用方法如下:
1
2
3
4
5
6
|
< interceptors > < interceptor name = "攔截器名" class = "攔截器類" /> < interceptor-stack name = "攔截器棧名" > < interceptor-ref name = "攔截器名" > </ interceptor-stack > </ interceptors > |
10、<interceptor-ref>
通過該標籤可以為其所在的Action新增攔截器功能。當為某個Action單獨新增攔截器功能後,<default-interceptor-ref>中所指定的攔截器將不再對這個Action起作用。
11、<global-results>
該標籤用於設定包範圍內的全域性結果集。在多個Action返回相同邏輯檢視的情況下,可以通過<global-results>標籤統一配置這些物理檢視所對應的邏輯檢視。
1
2
3
4
5
6
7
8
9
10
11
12
|
<? xml version = "1.0" encoding = "UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" < struts > < package name = "wwfy" extends = "struts-default" > < global-results > < result name = "test" >/index.jsp</ result > </ global-results > </ package > </ struts > |
相關文章
- struts.xml配置詳解XML
- influx詳解(二):配置檔案UX
- redis配置檔案中各引數詳解Redis
- redis 配置檔案詳解Redis
- haproxy配置檔案詳解
- redis配置檔案詳解Redis
- SSH配置檔案詳解
- zookeeper配置檔案詳解
- nginx配置檔案詳解Nginx
- WCF配置檔案詳解
- Hibernate配置檔案中對映元素詳解
- Linux中./configure檔案配置詳解Linux
- Nginx的配置檔案詳解Nginx
- vim的配置檔案詳解
- Hibernate配置檔案詳解
- BIND配置檔案詳解(三)
- Spring 配置檔案詳解Spring
- vsftpd配置檔案詳解FTP
- Nagios配置檔案詳解iOS
- spring配置檔案詳解Spring
- SpringBoot第二篇:配置檔案詳解一Spring Boot
- Nginx 配置檔案引數詳解Nginx
- 屬性配置檔案詳解(2)
- Docker Compose 配置檔案詳解Docker
- MyBatis--主配置檔案詳解MyBatis
- Struts配置檔案詳細講解
- redis配置檔案引數詳解Redis
- Mysql配置檔案my.ini配置項詳解MySql
- MyBatis 核心配置檔案詳細內容詳解MyBatis
- linux的啟動配置檔案inittab檔案詳解Linux
- PHP配置檔案詳解php.iniPHP
- nginx.conf 配置檔案詳解Nginx
- Tomcat 的 Server 檔案配置詳解!!!TomcatServer
- linux網路卡配置檔案詳解Linux
- Python之ini配置檔案詳解Python
- git config配置檔案詳解Git
- Maven pom.xml檔案配置詳解MavenXML
- MySQL 配置檔案 (my.ini) 詳解MySql