使用Convention,必须将Struts2下的struts2-convention-plugin-*.*.*.jar复制到WEB-INF/lib路径下
Action的搜索和映射约定:(它会自动搜索位于action、actions、struts、struts2包下的所有java类)
会把如下java类当做Action:
>所有实现了com.opensymphony.xwork2.Action的java类
>所有以Action结尾的java类
:wang.app.actions.LoginAction
wang.app.actions.books.getBooks (该类实现了com.opensymphony.xwork2.Action接口)
wang.app.action.LoginAction
wang.app.struts.auction.bid.BidAction
wang.app.struts2.wage.hr.AddEmployeeAction
允许设置如下三个常量:
>struts.convention.exclude.packages:指定不扫描哪些包下的java类,位于这些包下的java类不会自动映射成Action
>struts.convention.package.Locators:指定某包作为根包(对于actions.wang.LoginAction类,按约定映射为/wang/login,如果该常量设为wang,则该Action将会映射为/login)
>struts.convention.action.packages:Convention除了扫描action.actions.struts.struts2包,还扫描该常量指定的一个或多个包
将扫描包映射为命名空间: (会将action、actions、struts、struts2映射为根命名空间)
:wang.app.actions.LoginAction 映射到/
wang.app.actions.books.GetBooks 映射到/books
wang.app.struts2.wage.hr.AddEmployeeAction 映射到/wage/hr
Action类名映射为Action的name属性:
1.如果Action类型包含Action后缀,将Action后缀去掉,否则不做任何处理
2.得到第1步的结果,将驼峰写法转换为中划线写法
:wang.app.actions.LoginAction 映射到/login.action
wang.app.actions.books.GetBooks 映射到/books/get-books.action
wang.app.struts2.wage.hr.AddEmployeeAction 映射到/wage/hr/add-employee.action
按约定映射Result:
(Convention总会到Web应用的WEB-INF/content路径下定位物理资源,约定是:
actionName+result+suffix,当逻辑视图找不到对应视图资源时,Convention会自动使用actionName+suffix作为视图资源,suffix指的是视图技术)
Action的URL | 返回逻辑视图名 | 结果类型 | 对应物理视图 |
/login | success | Dispatcher | \WEB-INF\content\login-success.jsp |
/wang/get-book | success | Dispatcher | \WEB-INF\content\wang\get-book-success.jsp |
content
|——login.jsp
|——wang
|——get-book-success.jsp
使用Config Browser:(可以看到每个Action详细映射信息)
安装该插件: 将Struts2项目的lib目录下的struts-config-browser-plugin-*.*.*.jar文件复制到WEB-INF/lib路径下
首页地址: http://localhost:8080/应用名/config-borwser/actionNames.action
Action链约定:
Action处理后不进入试图页面,进入另一个Action,须遵守如下约定:
>第一个Action返回的逻辑视图字符串没有对应逻辑视图
>第二个Action与第一个Action处于同一个包下
>第二个Action映射的URL为:firstactionName+resultCode
例:
package org.wang.action
...
public class FirstAction extends ActionSupport
{
...
public String execute()
{
...
return "second";
}
}
(WEB-INF/content下不要提供first-second.jsp或first.jsp,第二个Action类名应为FirstSecondAction)
Convention插入的相关常量:(应看Struts2官方API更佳)