1. 程式人生 > >Strut2中strus.xlm檔案的配置詳解

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。