struts 2讀書筆記—–Convention外掛程式與“約定”支援

來源:互聯網
上載者:User

      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

 1 public class FirstAction extends ActionSupport{ 2     private String tip1; 3  4     public String getTip1() { 5         return tip1; 6     } 7      8     public void setTip1(String tip1) { 9         this.tip1 = tip1;10     }11 12     public String execute(){13         setTip1("第一個action提示");14         return "second";15     }16 }

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

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

      下面是第二個Action:FirstSecondAction.jsp 

 

 1 public class FirstSecondAction extends ActionSupport { 2  3     private String tip2; 4      5     public String getTip2() { 6         return tip2; 7     } 8  9     public void setTip2(String tip2) {10         this.tip2 = tip2;11     }12 13     public String execute() throws Exception {14         setTip2("第二個action 提示....");15         return SUCCESS;16     }17     18 }

 

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

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

1 <form action="first">            2         <input type="submit" value="點選連結第二個action">3 </form>

       第二個jsp頁面:第二個視圖資源。當第二個Action處理使用者請求完後,轉到該視圖資源。並列印相應的資訊 。

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

 

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

 

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

    

       讀李剛《輕量級java EE公司專屬應用程式實戰(第三版)—struts 2+Spring 3+Hibernate整合開發》

 

 

      

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.