struts2 中的零配置


從struts2.1開始,struts2引入了Convention插件來支持零配置,從而使struts2根據約定來自動配置,不再使用struts.xml進行配置。

使用Convention插件的前提條件:將struts2-convention-plugin-2.2.1.jar文件復制到應用的WEB-INF/lib目錄下。

Convention插件,它會自動搜索位於action、actions、struts、struts2包下的所有Java類,它會把如下兩種Java類當成Action處理:

  1.所有實現了com.opensymphony.xwork2.Action的Java類。

  2.所有類名以Action結尾的Java類。

Convention插件允許設置的3個常量:

  1.struts.convention.exclude.packages:指定不掃描那些包下的Java類,這些包下的Java類將不會自動映射成Action。

  2.struts.convention.package.locators: Convention插件使用該常量指定的包作為搜索Action的根包。即用這個屬性修改Convention插件默認的搜索包action、actions、struts、struts2。 例如:對於action.lee.Loginn類,按約定映射到/lee/login;如果將該常量設為lee.則該Action類將映射到/login.

  3.struts.convention.action.packages:指定除插件本身默認的搜索action、actions、struts、struts2包以外的其它包。

  (注意struts.convention.package.locators和struts.convention.action.packages的區別

映射Action的name時,遵循如下兩步規則:

  1.果該Action類名包含Action后綴,將該Action類名的Action后綴去掉。否則不做任何處理。

 

  2.Action類名的駝峰寫法(每個單詞首字母大寫、其他字母小寫的寫法)轉成中畫線寫法(所有字母小寫,單詞與單詞之間以中畫線隔開)例如:    LoginAction映射的Acion的name屬性為login,GetBooks映射的Action的name的屬性為get-books,AddEmployeeAction映射的Action的name屬性為add-employee

 

按約定映射Result

  Action處理用戶用戶請求之后都會返回一個字符串作為邏輯視圖,該邏輯視圖必須映射到實際的物理視圖。Convention插件默認也為作為邏輯視圖和物理視圖之間的映射提供了約定。

  默認情況下,Convention插件總會到WEB-INF/content路徑下定位物理資源,定位資源的約定是:actionName+result+suffix.當某個邏輯后視圖找不到對應的物理視圖時,Convention插件會自動試圖使用actionName+suffix作為物理資源。 例如:zj.qiao.actions.user.LoginAction類,返回success字符串時,Convention將優先考慮使用WEB-INF/content/user/login-success.jsp作為視圖資源,如果找不到,WEB-INF/content/user/login.jsp也可作為對應的視圖資源。

 

Convention的Annotation

  1.Action相關的兩個Annotation是@Action 和@Actions

  2.Action中可指定一個value屬性。類似於指定<action name=””/>屬性值

  3.Action中還可以指定一個params屬性,該屬性是一個字符串數組,用於該Acion指定的參數名和參數值。params屬性應遵守如下格式:{“name1”,”value1”,”name2”,”value2”}

  4.Actions 也用於修飾Action類里的方法,用於將該方法映射到多個URL.@Actions用於組織多個@Action.因此它可將一個方法映射成多個邏輯Action。

  例如如下代碼:

  

 1 package com.fun.actions;
 2  
 3 
 4  
 5 
 6  
 7 
 8 import org.apache.struts2.convention.annotation.Action;
 9 import org.apache.struts2.convention.annotation.Actions;
10  
11 
12 import com.fun.service.LoginService;
13 import com.opensymphony.xwork2.ActionSupport;
14  
15 
16 public class LoginAction extends ActionSupport {
17     private String str;
18     @Actions({
19        @Action(value="login1",params={"str","注入的值"}),
20        @Action(value="login2")
21        
22     })
23     public String login(){
24        return "str";
25     }
26     @Action(value="ggg")
27     public String abc(){
28        return "abc";
29     }
30     public String getStr() {
31        return str;
32     }
33     public void setStr(String str) {
34        this.str = str;
35     }
36     
37 }

我們可以通過/login1.action訪問,而在訪問時,str這個屬性已經有值,為str=”注入的值 返回的視圖是login1-str.jsp

當我們用/login2.action訪問時,str的值為null。返回的視圖為 login2-str.jsp

而我們通過/ggg.action調用的是abc()方法,返回的視圖為/ggg-abc.jsp

 

與Result配置相關的Annotation

  1.ResultPath @Result 和Results

  2.Results用於組織多個@Result因此它只需指定一個value屬性值,該value屬性值為多個@Result

  3.Result相當於struts.xml文件中的<result/>元素的做喲歐諾個。使用@Result必須指定一個name屬性,相當於<result name=””/>另外,它還有幾個可選的屬性。

       type 相當於<result type=””/>指定返回視圖資源的類型

       location 相當於<result>…..</result>中間部分,用於指定實際視圖位置

       params:該屬性相當於<result/>元素里多個<param../>子元素的作用,用於為該Result指定參數值。該屬性應滿足{“name1”,”value1”,”name2”,”value2”}格式

  4.Result有以下兩種用法

    Action級的Result映射:以@Actions組合多個@Action后修飾的Action類。這種Result映射對該Action里的所有方法都有效。

    方法級Result映射:將多個@Result組成數組后作為@Action的results屬性值。這種Result映射僅對被修飾的方法有效。

  5.ResultPath則用於修飾包和Action類,用於改變被修飾Action所對應的物理視圖資源的根路徑。舉例說:默認情況下,Convention都會到WEB-INF/content路徑下找物理視圖資源,一旦我們使用@ResultPath(“/abc”)修飾該Action,系統將回到abc目錄下尋找物理視圖資源。舉例:在默認情況下,Convention都會到WEB-INF/content路徑下需找物理視圖資源,一旦我們使用@ResultPath(“/abc”)修飾該Action,系統會到abc目錄下尋找物理視圖資源。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM