Struts2 struts2-convention-plugin(零配置)基礎

零配置並不是沒有配置,而是通過約定大於配置的方式,大量通過約定來調度頁面的跳轉而使得配置大大減少。

一、如何使用Convention
1. 將struts-Convention-plugin-2.1.6.jar文件複製到WEB-INF/lib路徑下
2. 對於Convention插件而言,它會自動搜索位於action,actions,struts,struts2包下的所有java類,Convention插件會把如下兩種java類當成Action處理:
(1) 所有實現了com.opensymphony.xwork2.Action接口的java類
(2) 所有類名以Action結尾的java類

3. 映射Action的name時,遵循如下兩步規則:
1) 如果該Action類名包含Action後綴,將該Action類名的Action後綴去掉。否則不做任何處理。
2) 將Action類名的駝峯寫法(每個單詞首字母大寫、其他字母小寫的寫法)轉成中畫線寫法(所有字母小寫,單詞與單詞之間以中畫線隔開)
如:LoginAction映射的Acion的name屬性爲login,GetBooks映射的Action的name的屬性爲get-books,AddEmployeeAction映射的Action的name屬性爲add-employee

下面是actiong和結果模版的映射關係:

URL Result 
File that could match Result Type
/hello success /WEB-INF/content/hello.jsp Dispatcher
/hello success /WEB-INF/content/hello-success.htm Dispatcher
/hello success /WEB-INF/content/hello.ftl FreeMarker
/hello-world input /WEB-INF/content/hello-world-input.vm Velocity
/test1/test2/hello error /WEB-INF/content/test/test2/hello-error.html Dispatcher
如:下面Action所在包被映射的命名空間如下:
com.fun.actions.LoginAction 映射到 /
com.fun.actions.myoffice.CarInfoAction 映射到 /myoffice
com.fun.struts.myoffice.EntINfoAction 映射到 /myofiice

4. 默認情況下。Convention總會到WEB應用的WEB-INF/content路徑下定位物理資源,定位資源的約定是:actionRUL+resultCODE+suffix。當某個邏輯視圖找不到對應的試圖資源時,Convention會自動視圖使用ActionURL+suffix作爲物理視圖資源。
如:actions.fore.LoginAction 返回success字符串時,Convention優先考慮使用WEB-INF/content/fore目錄下的login-success.jsp作爲視圖資源。如果找不到該文件,login.jsp也可作爲對應的試圖資源。如果返回input字符串,Convention會將WEB-INF/content/fore裏面查找login-input.jsp

5.Action鏈的約定
如果希望一個Action處理結束後不是進入一個試圖頁面,而是進行另一個Action形成的Action鏈。通過Convention插件則只需遵守如下三個約定即可。
1) 第一個Action返回的邏輯視圖字符串沒有對應的視圖資源
2) 第二個Action與第一個Action處在同一個包下
3) 第二個Action影射的URL爲:firstActionURL+resultCODE
如,第一個Action爲OneAction,裏面有個方法返回爲“two”,那麼就得保證,WEB-INF/content/下沒有one.jsp或one-two.jsp 對於第二個action 它的名字應該是OneTwoAction,而對應的url應該是:“one-two.action”


幾個重要的常量
struts.convention.action.disableJarScanning---是否從包中搜索Action
struts.convention.action.package--------Convention插件以該常量指定包作爲根包
struts.convention.result.path ---設置Convention插件定位視圖資源的根路徑。默認值爲/WEB-INF/content
struts.convention.result.flatLayout—如果是爲false則可以將試圖放置Action對應的目錄下,無需放入WEB-INF/content

注:

1) struts.Convention.exclude.packges:指定不掃描哪些包下的java類,位於這些包結構下的java類將不會自動映射成Action;
2) struts.convention.package.locators:Convention插件使用該常量指定的包作爲搜尋Action的根包。對於actions.fore.LoginAction類,按約定原本應映射到/fore/login;如果將該常量設爲fore,則該Action將會映射到/login
3) struts.convention.action.packages:Convention插件以該常量指定包作爲根包來搜索Action類。Convention插件除了掃描action,actions,struts,struts2四個包的類以外,還會掃描該常量指定的一個或多個包,Convention會試圖從中發現Action類。
注意:struts.convention.package.locators和struts.convention.action.packages兩個常量的作用比較微妙,開發者在利用這兩個常量時務必小心。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章