一、前文:
使用Convention插件,你需要将其JAR文件放到你应用的WEB-INF/lib目录中,你也可以在你Maven项目的POM文件中添加下面包依赖
三、约定:
找到相应的结果result。
2.搜索Action规则:
a).默认包路径包含action,actions,struts,struts2的所有包都会被struts作为含有Action类的路径来搜索。
你可以通过设置struts.convention.package.locators属性来修改这个配置,你可以通过如下配置更改:
这样也能搜索到actioning包中的Action。
convention会将上述找到的Action类解析出相应的路径URL
解析规则是:
a).命名空间:
从定义的.package.locators标示开始到包结束的部分,就是命名空间。举个例子:
b).具体资源部分命名:
Convention通过如下规则确定URL的具体资源部分:去掉类名的Action部分。
然后将将每个分部的首字母转为小写,用’-’分割,你可以设置struts.convention.action.name.separator 如
4.关于Results and result codes
下面是actiong和结果模版的映射关系:
上面只是我根据文档的一小部分总结,
Convention 官方文档:http://struts.apache.org/2.3.3/docs/convention-plugin.html
使用Convention插件,你需要将其JAR文件放到你应用的WEB-INF/lib目录中,你也可以在你Maven项目的POM文件中添加下面包依赖
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-convention-plugin</artifactId>
<version>2.3.3</version>
</dependency>
三、约定:
1.默认所有的结果页面都存储在WEB-INF/content下,你可以通过设置struts.convention.result.path这个属性的值来改变到其他路径
<constant name="struts.convention.result.path" value="/WEB-INF/page" />
实验:
1).创建一个com.wayne.web.action.LoginAction
package com.wayne.web.action;
import com.opensymphony.xwork2.ActionSupport;
/**
* Created by IntelliJ IDEA.
* User: wayne
* Date: 12-5-8
* Time: 下午4:34
*/
public class LoginAction extends ActionSupport{
@Override
public String execute() throws Exception {
System.out.println("login....");
return SUCCESS;
}
}
2)在WEB-INF/content创建一个login.jsp
3)访问http://localhost:8083/MyModule/login 出现login.jsp内容
注:官方文档上给出了一种no action exists(无Action类)存在的情况,即在没有真实Action的情况下Convention插件也会根据路径
找到相应的结果result。
实验:
1).在WEB-INF/content创建一个reg.jsp
2).在不创建RegAction的前提下,访问http://localhost:8083/MyModule/reg
2.搜索Action规则:
a).默认包路径包含action,actions,struts,struts2的所有包都会被struts作为含有Action类的路径来搜索。
你可以通过设置struts.convention.package.locators属性来修改这个配置,你可以通过如下配置更改:
<constant name="struts.convention.package.locators" value="web,action" />
注:刚开始,以为locators配置只能在上面给出的四种包里面选择,后测试发现
<constant name="struts.convention.package.locators" value="action,actioning" />
这样也能搜索到actioning包中的Action。
如果想让其忽略某些包搜索,插件提供了struts.convention.exclude.packages;
struts.convention.action.packages 这个配置struts2说是如果你想设置某些特殊的搜索根路径你可以用这个,可能就是要分的清晰一点。
b).在以上面的包为根路径搜索,搜索 继承com.opensymphony.xwork2.Action的类或者类名以Action结尾的类,将其视为Action类。
例如:
com.example.actions.MainAction
com.example.actions.products.Display (implements com.opensymphony.xwork2.Action)
com.example.struts.company.details.ShowCompanyDetailsAction
3.路径URL规则
convention会将上述找到的Action类解析出相应的路径URL
com.example.actions.MainAction -> /main
com.example.actions.products.Display -> /products/display
com.example.struts.company.details.ShowCompanyDetailsAction -> /company/details/show-company-details
解析规则是:
a).命名空间:
从定义的.package.locators标示开始到包结束的部分,就是命名空间。举个例子:
Com.ustb.web.user.userAction的命名空间是:”/user”。
Com.ustb.web.user.detail.UserAction的命名空间是:”/user/detail”
b).具体资源部分命名:
Convention通过如下规则确定URL的具体资源部分:去掉类名的Action部分。
然后将将每个分部的首字母转为小写,用’-’分割,你可以设置struts.convention.action.name.separator 如
<constant name="struts.convention.action.name.separator" value="-" />
4.关于Results and result codes
下面是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
上面只是我根据文档的一小部分总结,
更详细可以看文档,或者看这个链接