1. 幾個重要的元素1.1 package元素package元素用來配置包。在Struts2框架中,包是一個獨立的單位,通過name屬性來唯一標(biāo)識包。還可以通過extends屬性讓一個包繼承另一個包,extends屬性值就是被繼承包的name屬性值,繼承包可以從被繼承包那里繼承到攔截器、Action等。 在Struts2框架中是通過包來管理action、result、interceptor、interceptor-stack等配置信息的。包屬性如下:
-extends
-namespace
示范: <package name="caiwu" extends="struts-default" namespace="/caiwu"> </package> 1.2 action元素Struts2框架通過Action對象來處理HTTP請求,該請求的URL地址對應(yīng)的Action即配置在action元素中。 action元素屬性
示范: <action name="list" class="com.clzhang.struts2.demo3.ListAction"> </action> <action name="listSalarySum" class="com.clzhang.struts2.demo3.ListAction" method="listSalarySum"> </action> 1.3 result元素 當(dāng)調(diào)用Action方法處理結(jié)束返回后,下一步就是使用result元素來設(shè)置返回給瀏覽器的視圖。配置result元素時常需要指定name和type兩個屬性。 result屬性
Struts2支持的結(jié)果類型
示范: <action name="login" class="com.clzhang.struts2.demo1.LoginAction"> <result name="input">/struts2/demo1/login.jsp</result> <result name="error">/struts2/demo1/wrong.jsp</result> <result name="list" type="redirectAction"> <param name="idInList">${id}</param> <param name="actionName">listBook</param> </result> </action> 需要注意dispatcher和redirect的區(qū)別,也就是轉(zhuǎn)發(fā)和重定向的區(qū)別,重定向會丟失所有的請求參數(shù),而且會丟失Action處理結(jié)果。 1.4 include元素在Struts2中提供了一個默認的struts.xml文件,但如果package、action、interceptors等配置比較多時,都放到一個struts.xml文件不太容易維護。因此,就需要將struts.xml文件分成多個配置文件,然后在struts.xml文件中使用<include>標(biāo)簽引用這些配置文件。 示范: <include file="caiwu.xml"></include> <include file="cangku.xml"></include> 1.5 global-results元素有很多時候一個<result>初很多<action>使用,這時可以使用<global-results>標(biāo)簽來定義全局的<result>。 示范: <global-results> <result name="user">/struts2/demo3/user.jsp</result> <result name="sum">/struts2/demo3/sum.jsp</result> <result name="default">/struts2/demo3/default.jsp</result> </global-results> 1.6 default-action-ref元素如果在請求一個沒有定義過的Action資源時,系統(tǒng)就會拋出404錯誤。這種錯誤不可避免,但這樣的頁面并不友好。我們可以使用<default-action-ref>來指定一個默認的Action,如果系統(tǒng)沒有找到指定的Action,就會指定來調(diào)用這個默認的Action。 示范: <default-action-ref name="acctionError"></default-action-ref> <action name="acctionError"> <result>/jsp/actionError.jsp</result> </action> 2. Action的動態(tài)調(diào)用(DMI)Struts2提供了包含多個處理邏輯的Action處理方式,即DMI(Dynamic Method Invocation,動態(tài)方法調(diào)用)。它是通過請求對象中的一個具體的方法來實現(xiàn)動態(tài)的操作。具體說,在請求Action的URL地址后加上請求方法字符串,與Action對象中的方法進行匹配。其中,Action對象名稱和方法之間用“!“隔開。 更多內(nèi)容參考:struts2:多業(yè)務(wù)方法的處理(動態(tài)調(diào)用,DMI) 示范: <A href="list!listUser.action" target="_blank">3.2 通過URL嘆號參數(shù)</A> 3. 通配符在實際的項目開發(fā)中,會出現(xiàn)多個Action定義的絕大部分都是相同的情況,這時就會產(chǎn)生大量冗余。對于這種情況,Struts2也給出了相應(yīng)的解決方法,即使用通配符。
通配符“*“通常用在<action>標(biāo)簽的name屬性中,而在class、name屬性及result元素中使用{n}的形式來代表前面第n個*所匹配的字符串,{0}來代表URL請求的整個Action字符串。 示范一: <!-- 使用*通配符,第一個*表示調(diào)用方法,第二個*表示Action --> <action name="*_*" class="com.clzhang.struts2.action.{2}Action" method="{1}"> <result name="success">/{0}Suc.jsp</result> </action> 在上面代碼中,當(dāng)URL請求是/update_Login.action時,會調(diào)用LoginAction類中的update()方法,處理結(jié)束返回到update_LoginSuc.jsp。 示范二: <!-- 不管調(diào)用哪個Action,默認返回名為Action名的JSP --> <action name="*_*"> <result>/{0}.jsp</result> </action> 上面代碼中沒有指定class屬性,也沒指定result元素的name,這樣不管訪問哪個Action都會返回與該Action名字相同的JSP頁面。 4. 常量配置在之前提到struts.properties配置文件的介紹中,我們曾經(jīng)提到所有在struts.properties文件中定義的屬性,都可以配置在struts.xml文件中。而在struts.xml中,是通過<constant>標(biāo)簽來進行配置的。 示范: <constant name="struts.action.extension" value="action"></constant> <constant name="struts.ognl.allowStaticMethodAccess" value="true" /> <constant name="struts.ui.theme" value="simple"></constant> <constant name="struts.custom.i18n.resources" value="message"></constant> <constant name="struts.i18n.encoding" value="UTF-8"></constant>
|
|