一、首先說明一點:所謂的基於Convention插件的約定優於配置的使用,並不是嚴格意義上的零配置,struts.xml文件並不能完全舍棄。
獲得Convention插件功能,所必需的jar包有:|asm-x.x.jar|asm-commons-x.x.jar|struts2-convention-plugin-x.x.jar|
如果將struts2-config-browser-plugin-x.x.jar放入項目中,則可以通過http://{ip}:{port}/{Application}/config-browser/actionNames.action來查看應用中的映射關系
其中常用的配置信息有
| struts.convention.action.disableJarScanning | 設置是否從Jar包里搜索Action類。如果開發者喜歡將Acion類打包成JAR,則應將該常量設為true。默認值為true。 |
| struts.convention.action.packages | Convention插件以該常量指定包做為根包來搜索Action類 |
| struts.convention.result.path | 設置Convention插件定位仕途資源的根路徑。默認值為/WEB-INF/content |
| struts.convention.result.flatLayout | 如果設置為false,則可以將是土頁面放置到Action對應的目錄下(無須放入WEB-INF/content) |
| struts.convention.action.suffix | Convention搜索Action類的類名后綴,默認值為Action |
| struts.convention.action.disableScanning | 是否禁止通過包掃描Action。默認值是false |
| struts.convention.action.mapAllMatches | 設置即使沒有@Action注解,依然創建Action影射。默認值為false |
| struts.convention.action.checkImplementsAction | 設置是否將實現了Action接口的類映射成Action,默認值是false |
| struts.convention.default.parent.package | 設置Convention映射的Action所在包的默認父包,默認值是convention-default |
| struts.convention.action.name.lowercase | 設置映射Action時,是否將Action的name屬性值轉換為所有字母小寫,默認值是false |
| struts.convention.action.name.separator | 設置映射Action時指定Acion的name屬性值各單詞之間的分隔符,默認值是中划線 |
| struts.convention.package.locators | Convention插件使用該常量指定的包做為搜索Action的根包。默認值是action,actions,struts,struts2 |
| struts.convention.package.locators.disable | 指定禁止從Action的根包里搜尋Action。默認值是false |
| struts.convention.exclude.packages | 指定排除在搜索Action之外的包。默認值為org.apache.struts.*,org.apache.struts2.*, |
| struts.convention.packae.locators.basePackage | 如果指定了該常量,Convention只會從以該常量值開始的包中搜索Action類 |
| struts.convention.relative.result.types | 指定Convention映射Result時默認支持的結果類型,默認值是dispatcher,velocity,freemarker |
| struts.convention.redirect.to.slash | 設置是否重定向到斜線(/)。例如用戶請求/foo,但/foo不存在時,如果設置該常量為true則可重定向到/foo/。默認值是true |
二、每個Action的name屬性,根據該Action的類名映射,映射Action的name時,遵循如下兩步規則。
1.如果該Action類名包含Action后綴,將該Action類名的Action后綴去掉。否則不做任何處理。
2.將Action類名的駝峰寫法轉成中划線寫法,所有字母小寫。
例如:LoginAction映射的Action的name屬性為login,GetBooks映射的Action的name屬性為get-books,AddEmployeeAction映射的Action的name屬性為add-employee。
三、Action處理用戶請求以后會返回一個字符串做為邏輯視圖,該邏輯視圖必需映射到實際的物理視圖。Convention默認也為作為邏輯視圖和物理視圖之間的映射提供了約定。
默認情況下,Convention總會到Web應用的WEB-INF/content路徑下定位物力資源,定位資源的約定時actionName+resultcode+suffix。當某個邏輯視圖找不到對應的物理視圖資源時,Convention會自動試圖使用actionName+suffix作為物理視圖資源。
四、Action處理結束后如果不是進入視圖頁面,而是進入另外一個Action形成Action鏈的話,則通過Convention插件只需要遵守如下三個約定即可。
1.第一個Action返回的邏輯視圖字符串沒有對應的是視圖資源
2.第二個Action與第一個Action處於同一個包下
3.第二個Action映射的URL為:firstactionName+resultcode
例如第一個Action類名為FirstAction,並且返回second字符串,則第二個Action的類名為FirstSecondAction,且兩個Action在同一個包下,且視圖資源中沒有first-second.jsp或者first.jsp的物理視圖資源。
