Struts2的Convention插件與“約定”支持

jopen 8年前發布 | 10K 次閱讀 Struts2 Web框架

           Convention插件的主要特點是“約定優于配置”。

 

           Action的搜索和映射約定

           為了能夠使用Convention插件,必須在Struts 2 應用中安裝Convention插件,即將Struts2-convention-plugin.jar文件復制到Struts 2應用的WEB-INF/lib路徑下。

           對于convention插件而言,他會對以下兩種java類的Action處理:

           1、  所有實現了com.opensymphony.xwork2.Action的java類

           2、   所有類名以Action結尾的java類

 

           Struts 2的convention插件還允許設置如下三個常量

          

常量

說明

Struts.convention.exclude.packages

指定不掃描那些包的java類,位于這些包結構下的java類將不會被自動映射成Action

Struts.convention.package.locators

Convention插件使用該常量指定的包作為搜索Action的根包。如:對于action.user.LoginAction類,按約定本應映射到/user/login;

如果將該常量設置為user,則該Action將會映射到/login

Struts.convention.action.packages

Convention插件以該常量指定包作為根包來搜索Action類。

         

           當找到合適的Action類后,Convention插件將會按照約定部署這些Action。部署Action時,actions、action、struts、struts2包會映射成根命名空間,而這些包下的子包則會被映射成對應的命名空間。

           如:

                Com.app.action.books.GetBooks                                 映射到/books

                Com.app.action.RegistAction                                         映射到/

                Com.app.action.struts.manage.user.UserAction      映射到/manage/user

 

           按約定映射name屬性

           Action的name屬性(即該action所要處理的URL),根據該Action的類名映射,映射Action的name時,需要遵循如下兩個步驟:

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

           2、  將Action類名的寫法(每個單詞首字母大寫、其他字幕小寫)轉成中劃線寫法(有字母小寫,單詞與單詞之間用中劃線隔開)。

           如:

                  Com.app.action.LoginAction                                  映射到:/login.action

                  Com.app.action.user.loginAction                           映射到:user/login.action

                  Com.app.action.user.loginRegistAction               映射到:user/login-regist.action

 

           對于Action類的代碼依然不需要做任何的改變。

 

           按約定映射result

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

默認情況下,convention總會到Web應用的WEB-INF\content路徑下定位物理資源。故定位資源約定為、:actionName+resultCode+suffix。當某個邏輯視圖找不到對應的視圖資源是,convention會自動試圖使用actionName+suffix作為物理視圖資源

           如:假定所有的結果類型全部為:Dispatcher

Action的URL

返回的邏輯視圖名

對應的物理視圖

/login

success

\WEB-INF\content\login-success.jsp

/user/login

success

\WEB-INF\content\user\login-success.jsp

/user/regist

error

\WEB-INF\content\user\regist-error.jsp

           Action鍵的約定

            如果想一個Action處理結束后不是進入視圖頁面,而是進入另一個Action形成Action鏈。則只需要遵守下面三個約定:

            1、第一個Action返回的邏輯視圖字符串沒有對應的視圖資源。

            2、第二個Action與第一個Action處于同一個包下。

            3、第三個Action映射的URL為:firstactionname+resultcode

 

            下面是一個實例:

             第一個Action處理用戶請求后、轉到第二個Action繼續處理。再由第二個Action轉到視圖頁面,并打印相應的信息

            第一個Action:FirstActionjava

public class FirstAction extends ActionSupport{
    private String tip1;

    public String getTip1() {
        return tip1;
    }

    public void setTip1(String tip1) {
        this.tip1 = tip1;
    }

    public String execute(){
        setTip1("第一個action提示");
        return "second";
    }
}


          該Action處理用戶請求后返回“second”字符串,為了讓該Action處理結束后進入第二個Action。對于這個返回的字符串,第二個Action的映射的URL應為:first-second。

所以第二個Action的類名為:FirstSecondAction。

         下面是第二個Action:FirstSecondAction.jsp 

public class FirstSecondAction extends ActionSupport {

    private String tip2;

    public String getTip2() {
        return tip2;
    }

    public void setTip2(String tip2) {
        this.tip2 = tip2;
    }

    public String execute() throws Exception {
        setTip2("第二個action 提示....");
        return SUCCESS;
    }

}

           當firstAction處理用戶請求之后,系統將會自動調用FirstSecondAction處理用戶請求。然后轉到視圖資源。

          第一個jsp頁面:thefirst.jsp點擊按鈕后,轉到第一個action處理用戶請求      該Action=”first“      

<form action="first">            
        <input type="submit" value="點擊鏈接第二個action">
</form>


        第二個jsp頁面:第二個視圖資源。當第二個Action處理用戶請求完后,轉到該視圖資源。并打印相應的信息 。

       由于第二個Actiond的result的映射是:first-second-success。所以該視圖資源的名字為:first-second-success.jsp

${tip1 }<Br />
    ${tip2 }<br />

 

       將會得到下面的顯示頁面:

    

      讀李剛《輕量級java EE企業應用實戰(第三版)—struts 2+Spring 3+Hibernate整合開發》


 

 

      

來自: http://blog.csdn.net/chenssy/article/details/7277651

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!