Struts2引入Convention(約定)插件支持零配置。約定優於配置。
一、約定Action
1.安裝Convention插件
將Struts2項目下的struts-convention-plugin-2.2.1.jar文件複製到Struts2應用的WEB-INF\lib路徑下即可,會搜索位於action、actions、struts、struts2包下的所有Java類,
Convention插件會把如下兩種Java類當成Action 處理:
(1)所有實現了com.opensymphony.xwork2.Action的Java類。
(2)所有類名以Action結尾的Java類
Struts2的Convention插件還允許設置如下三個常量:
(1)struts.convention.exclude.packages:指定不掃描哪些包下的Java類
(2)struts.convention.package.locators:Convention插件使用該常量指定的包作爲搜索Action的根包。對於actions.lee.LoginAction類,按約定原本映射到/lee/login;如果將該常量設置爲lee,則該Action將會映射到/login。
(3) struts.convention.action.packages:Convention插件以該常量指定包作爲根包來搜索Action。會搜索位於action、actions、struts、struts2包以及該常量定義的包下的所有Java類。
Action的URL映射
(1)如果該Action類名包含Action後綴,將該Action類名的Action後綴去掉。否則不做任何處理。如org.actions.LoginAction映射到/login.action
(2)將Action類名的駝峯寫法轉成中劃線寫法,如org.actions.books.GetBooks映射到/books/get-books.action
二、約定Result
Action處理用戶請求之後會返回一個字符串作爲邏輯視圖,該邏輯視圖必須映射到實際的物理視圖纔有意義。Convention默認也爲作爲邏輯視圖和物理視圖之間的映射提供了約定。
下圖是Convention支持的一些映射實例:
三、Action鏈的約定
如果希望一個Action處理結束後不是進入視圖頁面,而是進行另一個Action形成Action鏈,則通過Convention插件只需遵守如下三個約定即可:
(1)第一個Action返回的邏輯視圖字符串沒有對應的視圖資源
(2)第二個Action與第一個Action處於同一個包下
(3)第二個Action映射的URL爲:firstactionName+ resultcode
四、自動重加載映射
配置Struts2的兩個常量(web.xml、struts.xml、struts.properties都可進行配置):
<!-- 配置Struts2應用處於開發模式 -->
<constant name=”struts.devMode” value=”true”/>
<!-- 配置Convention插件自動重加載映射 -->
<constant name=”struts.convention.classes.reload”value=”true”/>
五、Convention插件相關Annotation
Struts2的Convention插件主要集中在管理Action和Result映射之上,而Struts2的配置文件除了管理Action、Result之外,還需要管理攔截器、異常處理等相關信息,Convention使用Annotation來管理這些配置。除此之外,Convention還允許使用Annotation管理Action和Result的配置,從而覆蓋Convention約定。