官术网_书友最值得收藏!

6.3.3 struts.xml配置文件

struts.xml文件是Struts2框架的核心配置文件,主要負責管理Web應用中的action映射,以及該action包含的result定義和攔截器的配置、bean的配置、package的配置等。Struts2框架允許使用<include>在struts.xml中包含其他配置文件。代碼如下:

1.package元素

通過包(package)的配置,可以實現對某包中的所有action統一管理,如權限的限制等。package元素的主要屬性如下。

● name:該屬性必須指定,表示包的名稱,由于struts.xml中可以定義不同的<package>,而且它們之間還可以互相引用,所以必須指定名稱。

● extends:該屬性是可選的,表示當前定義的包繼承其他的包。如果繼承了其他包,就可以繼承其他包中的action、攔截器等。

由于包信息的獲取是按照配置文件中的先后順序進行的,所以父包必須在子包之前被定義。

通常應用程序會繼承一個名為“struts-default”的內置包,它配置了Struts2所有的內置結果類型,該文件包含在struts2-core-2.1.8.jar中。struts-default這個單詞不能拼寫錯誤,否則運行時將會報錯。

● namespace:該屬性是可選的,用來指定一個命名空間,定義命名空間非常簡單,只要指定namespace="/*"即可,其中"*"是我們自定義的。如果直接指定"/",表示設置命名空間為根命名空間。如果不指定任何namespace,則使用默認的命名空間,默認的命名空間為""。

當指定了命名空間后,相應的請求也要改變,例如:

表單form的action請求就不能是“login”,而必須改為“user/login”。當Struts2接收到請求后,會將請求信息解析為namespace名和action名兩部分,然后根據namespace名在struts.xml中查找指定命名空間的包,并且在該包中尋找與action名相同的配置,如果沒有找到,就到默認的命名空間中尋找與action名稱相同的配置,如果依然沒找到,就給出錯誤信息。

表單<form action="user/login">中的action="user/login"是不能有斜杠/的,<action namespace="/user">中的namespace="/user"是要有斜杠/的。

● abstract:該屬性是可選的,如果定義該包是一個抽象包,則該包不能包含<action>配置信息,但可以被繼承。

在Struts 2核心包struts2-core-2.1.8.jar中可找到struts-default.xml文件。

struts-default.xml中定義的struts-default就是abstract抽象的,代碼如下:

struts-default中定義許多常用的結果類型result-type,如dispatcher、chain、redirect等。

由于自定義package的extends屬性基本都設置為struts-default,因此不能拼寫錯誤,否則就無法繼承struts-default,也就不能正確地解析struts-default中已定義好的result-type。

2.action元素

在struts.xml文件中,通過<action>元素對Action進行配置。Action是業務邏輯控制器,負責接收客戶端請求,處理客戶端請求,并把處理結果返回給客戶端。

action元素的主要屬性如下。

● name:該屬性是必選屬性,用于指定客戶端發送請求的地址映射名稱。用戶可以通過這個name的值發送請求,然后交給對應的class類來處理。

● class:該屬性是可選屬性,用于指定Action實現類的完整類名。具體處理請求的類,是一個包含包名+類名的action類。

客戶端每次請求action時,Struts2框架都會創建新的action對象,因此action對象是一個多實例對象。如果需要客戶端每次請求的action對象是同一個對象,即action對象強制成為單例對象,則必須將action對象的class屬性值設為Spring中指定的bean對象名。

● method:該屬性是可選屬性,用于指定調用action中的方法名,如果不指定method屬性,則默認提交給exceute()方法處理請求。通常,需要為每個action指定一個方法,并通過method元素來進行配置,這樣就可以調用Action類中的該方法。

3.result元素

result元素的作用是調度視圖以決定采用哪種形式呈現給客戶端,也就是用來設定Action處理結束后,系統下一步將要做什么。

result元素的主要屬性如下。

● name:用于指定action的返回名稱。

● type:用于指定返回的視圖技術,如jsp、freemaker等。

result的常用type類型共有4種。

(1)dispatcher:轉發

默認的結果類型,即內部請求轉發,類似于forward。Struts2在后臺使用RequestDispatcher()轉發請求。

(2)chain:鏈式

用于把幾個相關的action連接起來,共同完成一個功能。注意:只能轉發到一個action,而不能是頁面。例如:

(3)redirect:用來重定向到其他頁面

在后臺使用的sendRedirect()將請求重定向至指定的URL。如果要傳值的話,可以采用GET方式傳參,例如:

${account}是一個EL表達式。

(4)redirectAction:用來重定向到其他Action

主要用于重定向到Action。即請求處理完成后,如果需要重定向到一個Action,那么使用redirectAction類型。redirecAction有兩個參數:actionName(指定需要重定向的Action)和namespace(指定Action所在的命名空間,如果沒有指定該參數,框架會從默認的namespace中去尋找)。

例如,package包含了3個Action。action1為login,action2為work,action3為rest,代碼如下:

第6章任務4

在login這個action1中,當客戶端執行login.action時,將執行org.action.UserAction類的login方法,并且可以有4個返回result處理:

1)result1:success返回,重定向到work這個action2。

2)result2:success返回,重定向到/user包下的rest這個action3。

3)result3:error返回,重定向到error.jsp。

4)result4:input返回,即輸入框中輸入非法類型,強制跳轉到login.jsp。

在work這個action2中,當客戶端執行work.action時,將執行org.action.UserAction類的work方法。

在rest這個action3中,當客戶端執行rest.action時,將執行org.action.UserAction類的rest方法,但是該Action有namespace屬性,因此必須在result2中設置<param name="namespace">/user</param>。

最后分析result元素的4種type類型的不同點。

chain是鏈式的,是從一個Action跳轉到另外一個Action,但是chain的下一個Action可以獲得前一個Action的請求參數的值。redirectAction是請求一個新的Action,不會獲取上一個Action的參數值。

redirectAction和redirect兩者請求路徑不同,redirect帶后綴,redirectAction不帶后綴。

例如:

4.bean元素

在struts.xml中配置bean元素,把核心組件的一個實例注入給框架。常用屬性包括如下幾個。

● class:必需的,用來指定此配置的bean對應的實現類。

● name:可選的,用來指定bean實例的名字。

● type:可選的,用來指定bean實例實現的Struts2的規范,若配置的bean作為框架的一個核心組件來使用,則應該指定該屬性的值。

例如,struts-default.xml中定義如下一些bean,代碼如下:

主站蜘蛛池模板: 连平县| 宾阳县| 达日县| 琼中| 平乐县| 遵义县| 建始县| 潼关县| 林甸县| 铜山县| 黄梅县| 临潭县| 桐乡市| 永新县| 昌吉市| 乌拉特后旗| 绥中县| 阜宁县| 阿拉善左旗| 高密市| 佳木斯市| 花莲市| 长阳| 珠海市| 蕉岭县| 临邑县| 溧水县| 花莲县| 渑池县| 富锦市| 平和县| 广宗县| 乐东| 恩施市| 延庆县| 荥经县| 滕州市| 饶阳县| 红河县| 本溪| 尚义县|