Action的搜索和映射约定
(1)安装Convention插件:将Struts2项目下的struts2-convention-plugin-2.3.31.jar文件复制到Struts2应用的WEB-INF\lib路径下。
(2)Action的搜索:对于Convention插件而言,它会自动搜索位于action、actions、struts、struts2包下的所有Java类,Convention差价会把如下两种Java类当成Action处理:
①所有实现了com.opensymphony.xwork2.Action的Java类
②所有类名以Action结尾的Java类。
(3)Convention插件允许设置的三个常量:
①struts.convention.exclude.packages:指定不扫描哪些包下的Java类,位于这些包结构下的Java类将不会被自动映射成Action。
②struts.convention.package.locators:Convention插件使用该常量指定的包作为搜寻Action的根包。对于actions.slow.LoginAction类,按约定原本应映射到/slow/login;如果将该常量设定为slow,则该Action将会映射到/slow。
③struts.convention.action.packages:Convention插件以该常量指定包作为根包来搜索Action类。Convention插件除了扫描action、actions、struts、struts2四个包的类之外,还会扫描该常量指定的一个或多个包,Convention会试图从中发现Action类。
(4)部署Action时,action、actions、struts、struts2包会映射成根命名空间,而这些包下则被映射成对应的命名空间。如下:
csdn.slow.actions.LoginAction 映射到 /
//下面类实现了com.opensymphony.xwork2.Action接口
csdn.slow.actions.books.GetBooks 映射到 /books
csdn.slow.action.LoginAction 映射到 /
csdn.slow.struts.auction.bid.BidAction 映射到 /auction/bid
csdn.slow.struts.wage.hr.AddEmployeeAction 映射到 /wage/hr
(5)Action的name属性根据该Action的类名映射,映射Action的name时,遵循如下两步规则:
①如果该Action类名包含Action后缀,将该Action类名的Action后缀去掉。否则不做任何处理。例如:LoginAction=>login。
②将Action类名的驼峰写法转成中划线写法。(所有字母小写,单词与单词之间以中划线隔开)例如:GetBooks=>get-books,AddEmployeeAction=>add-employee。
③示例:
csdn.slow.actions.LoginAction 映射到 /login.action
//下面类实现了com.opensymphony.xwork2.Action接口
csdn.slow.actions.books.GetBooks 映射到 /books/get-books.action
csdn.slow.action.LoginAction 映射到 /login.action
csdn.slow.struts.auction.bid.BidAction 映射到 /auction/bid/bid.action
csdn.slow.struts.wage.hr.AddEmployeeAction 映射到 /wage/hr/add-employee.action
按约定映射Result
(1)Result的约定映射
Action的URL | 返回的逻辑视图名 | 结果类型 | 对应的物理视图 |
---|---|---|---|
/login | success | Dispather | \WEB-INF\content\login-success.jsp |
/login | success | Dispather | \WEB-INF\content\login-success.html |
/login | success | Dispather | \WEB-INF\content\login.jsp |
/login | success | Dispather | \WEB-INF\content\login.html |
/slow/get-book | error | FreeMarker | \WEB-INF\content\slow\get-book-error.ftl |
/slow/get-book | error | FreeMarker | \WEB-INF\content\slow\get-book.ftl |
/slow/get-book | Iuput | Velocity | \WEB-INF\content\slow\get-book-input.vm |
/slow/get | iuput | Velocity | \WEB-INF\content\slow\get-input.vm |
(2)安装Config Browser插件:将Struts2项目下的struts2-config-browser-plugin-2.3.31.jar文件复制到Struts2应用的WEB-INF\lib路径下。
(3)访问Config Browser的首页(需要先重启Web):http://localhost:8080/Struts2_3_9_1/config-browser/actionNames.action
上面截图说明LoginAction和GetBooks映射成功。
Action链的约定
(1)Action链:一个Action处理结束后,没有进入视图页面,而是进行另一个Action。
(2)三个约定:
①第一个Action返回的逻辑视图字符串没有对应的视图资源。
②第二个Action与第一个Action处于同一包下。
③第二个Action映射的URL为:firstactionName+resultcode
自动重加载映射
<!-- 配置Convention插件自动重加载映射 -->
<constant name="struts.convention.classes.reload" value="true"/>