Strut2中strus.xlm檔案的配置詳解
1. Struts2的工作流程
在提到struts.xml檔案的配置之前,必須先囉嗦幾句Struts2的工作流程。它在web.xml中設定了過濾器,把前端所有的請求或者部分請求過濾,交給對應的action響應,從而對前段的請求進行答覆,而struts.xml就是它找對應action並回到相應的響應頁面的參照檔案。
2. struts.xml檔案模版
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <!--制定struts.xml檔案的根元素--> <struts> <!--制定web編碼集,相當於呼叫HttpServletRequest的setCharacterEncoding方法--> <constant name="struts.i18n.encoding" value="UTF-8"/> <!--配置包,包名為default,該包繼承了Struts2框架的預設包struts-default,namespace為預設,"/"與""都表示預設--> <package name="default" namespace="/" extends="struts-default"> <!--定義名為hello的Action,該Action的處理類為com,action。TestAction,並對映到success.jsp--> <action name="hello" class="com.action.TestAction"> <!--name預設值為"success"--> <result name="success">/success.jsp</result> <!-- 成功則返回success.jsp--> <result name="error">/error.jsp</result> <!-- 失敗則返回error.jsp--> </action> </package> </struts>
3. struts.xml關鍵元素分析
(1)package元素:用來配置包,包是一個獨立的單位其屬性如下:
name屬性:這是一個必須的屬性,標識包的名字,以便其他包被引用
extends屬性:可選屬性,指定包繼承的自其他的包
namespace屬性:可選屬性,指定名稱空間,標識此包下的action的訪問路徑
abstract屬性:可選屬性,指定該包為抽象包
(2)action元素:Struts2框架通過Action物件來處理HTTP請求,請求URL地址對應的Action即在action元素中。
name屬性:必須屬性,標識Action,指定了該Action所處理的請求的URL
class屬性:可選屬性,Action物件所對應的實現類
method屬性:可選屬性,指定請求Action時呼叫的方法
converter屬性:可選屬性,指定型別轉換器的類
(3)result元素:當呼叫Action方法結束後,下一步就是使用result元素來設定返回給瀏覽器的頁面。
dispatcher屬性:將請求forward(轉發)到指定頁面
redirect屬性:將請求重定向到指定頁面
chain屬性:處理Action鏈
freemarker屬性:指定Freemarker模版為檢視
httpheader屬性:控制特殊的HTTP行為
redirect-action屬性:直接跳轉到其他action
stream屬性:向瀏覽器返回一個InputStream(一般用於檔案下載)
velocity屬性:制動使用velocity模版為檢視
xslt屬性:用於XML/XSLT整合
plainText屬性:顯示某個頁面的原始程式碼
dispatcher與redirect的區別:
dispatcher:轉發到指定頁面,頁面的URL不會改變,同時帶request引數,伺服器在上一個頁面的基礎上跳轉到下一個頁面
redirect:重定向到某個頁面,頁面的URL改變,丟失所有的request引數和Action的處理結果,即伺服器重新開一個全新的頁面
(4)include元素:用於在struts.xml配置檔案中包含其他配置檔案,與c/c++中的include類似(用於匯入類庫)
例如:
<struts>
<include file="/a.xml"/>
</struts>
(5)global-results元素:配置包中的全域性結果,與result具有相同的屬性,作用範圍是包下的所有Action。當一個Action返回時,它會優先去尋找區域性result,若沒找到則會查詢全域性結果。
(6)default-action-ref元素:用來配置預設的Action,與Action具有相同的屬性。若Struts2沒有找到對應的Action時,則會執行預設Action。