Struts2.xml 本篇博客主要講struts.xml中package下的標簽和標簽屬性,主要分以下四個部分說明: (1)action的配置基本屬性 (2)同一個Action類中不同方法滿足不同的action邏輯 (3)通配符解決多業務問題 (4)配置處理結果: (1)action的配置基本屬性 ...
Struts2.xml
本篇博客主要講struts.xml中package下的標簽和標簽屬性,主要分以下四個部分說明:
(1)action的配置基本屬性
(2)同一個Action類中不同方法滿足不同的action邏輯
(3)通配符解決多業務問題
(4)配置處理結果:
(1)action的配置基本屬性
1 <!--首先聲明本片文章基本還是參考http://www.cnblogs.com/Nouno/p/5683447.html的博客,特此說明--> 2 <?xml version="1.0" encoding="UTF-8"?> 3 <!DOCTYPE struts PUBLIC 4 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 5 "http://struts.apache.org/dtds/struts-2.3.dtd"> 6 <struts> 7 <!-- /primer/helloWorldAction.action 8 package:包 9 * name:包名,唯一的,必選項 10 * namespace:命名空間,唯一的,相當於房間號。可選項,省略情況下是"/"。頁面中請求連接的前半部分 11 * extends:繼承 12 * extends="struts-default":struts2框架底層提供的核心包struts2-core-2.3.3.jar下的struts-default.xml文件 13 * 為什麼要繼承這個struts-default.xml文件? 14 * 因為struts2框架底層提供的struts-default.xml聲明瞭所有的攔截器和攔截器棧, 15 知道在struts2框架運行時執行struts-default.xml文件中的攔截器棧。 16 * 如果不繼承struts-default.xml文件,就沒有辦法使用struts2框架提供的所有攔截器 17 --> 18 <package name="primer" namespace="/" extends="struts-default"> 19 20 <!-- 21 如果找不到對應的action名的時候,配置預設要執行的action 22 * name:指定action的名稱 23 --> 24 <default-action-ref name="error"></default-action-ref>
25 27 <action name="error" class="com.yyc.struts.action.ErrorAction"> 28 <result name="error">/error.jsp</result> 29 </action> 30 <!-- 31 action: 32 * name:對應頁面中請求連接的後面半部分,這裡表示jsp請求鏈接為hello.action才會和它匹配 33 * class:對應要執行的類的完整路徑 ,表示Action類的完整路徑,相當於之前的servlet類 34 *method:對應的class類中要執行的方法,預設執行method="execute()" 35 --> 36 <action name="hello" class="cn.yht.primer.HelloWorldAction" method="execute()"> 37 <!-- 38 result:結果類型 ,可以用來把Action類處理好的數據跳轉到某界面 39 * name:對應的是執行的類的方法的返回值 40 public String execute() throws Exception { 41 System.out.println("HelloWorldAction ************* execute()"); 42 return "success"; 43 } 44 * 預設判斷name="success",後半部分的文本內容:要轉向到的頁面 45 --> 46 <result name="success">/primer/success.jsp</result> 47 </action> 48 <!-- 49 沒有為action指定class 50 * 在struts2框架底層的struts-default.xml文件中,配置了預設執行的類 51 com.opensymphony.xwork2.ActionSupport 52 public String execute() throws Exception { 53 return SUCCESS; 54 } 55 * 實際上,預設執行的是底層提供的ActionSupport類的execute()方法 56 * result結果類型,預設是根據struts2框架底層提供的ActionSupport類的execute()方法返回值,進行跳轉 57 --> 58 <action name="actionNoClass"> 59 <result name="success">/primer/success.jsp</result> 60 </action> 61 </package> 62 </struts>
(2)同一個Action類中不同方法滿足不同的action邏輯
1 <!--這個Action中有兩個方法 2 public class ProductAction extends ActionSupport { 3 public String add(){ 4 System.out.println("添加商品"); 5 return NONE; 6 } 7 public String del(){ 8 System.out.println("刪除商品"); 9 return NONE; 10 } 11 }--> 12 13 <!-- 多個業務需求 --> 14 <action name="addBook" class="com.guigu.struts.action.BookAction" method="add"></action> 15 <action name="delBook" class="com.guigu.struts.action.BookAction" method="del"></action> 16 <!--這樣確實能夠實現一個Action類中的不同方法,都能被調用 17 但是你也許會註意到,每調用一個方法都需要配置action-->
(3)通配符解決多業務問題
1 <!--這裡是jsp文件 2 <h1>客戶管理</h1> 3 <a href="${pageContext.request.contextPath }/customer_add">添加客戶</a><br/> 4 <a href="${pageContext.request.contextPath }/customer_del">刪除客戶</a><br/> 5 <a href="${pageContext.request.contextPath }/customer_edit">修改客戶</a><br/> 6 <a href="${pageContext.request.contextPath }/customer_find">查詢客戶</a><br/> 7 --> 8 <!-- 使用通配符解決多業務問題 --> 9 <!-- method 屬性{1}是取第一個* ,這樣就只需要寫一個action就可以了,我們只要在Action類中寫好相對應的方法即可--> 10 <action name="customer_*" class="com.guigu.struts.action.CustomerAction" method="{1}"> 11 <result >/demo1/{1}.jsp</result> 12 </action>
(4)配置處理結果:
Struts2的Action處理用戶請求結束後,返回一個普通字元串-邏輯視圖名,必須在struts.xml文件中完成邏輯視圖和物理視圖資源的映射,才可讓系統轉到實際的視圖資源。
Struts2通過在struts.xml文件中使用<result …/>元素來配置結果。Struts2提供了兩種結果。
a.局部結果:將<result …/>作為<action …>元素的子元素配置。
b.全局結果:將<result …/>作為<global-results …>元素的子元素配置。
在package元素中配置<global-results>子元素:
<!--全局result(global-results) 有很多時候一個<result>可供很多<action>使用,這時可以使用<global-results>標簽來定義全局的<result>l。執行順序:當一個Action返回的String沒有相應的<result>與之對應,Struts2就會查找全局的<result>。--> <global-results> <result name="error">/Error.jsp</result> <result name="invalid.token">/Error.jsp</result> <result name="login" type="redirect-action">Logon!input</result> </global-results>
歡迎大家留言指點!