Convention 零配置及其在springside3 mini-web中的使用
来源:互联网 发布:网络课程评价的目的 编辑:程序博客网 时间:2024/05/17 23:43
使用Convention插件,需要将其JAR文件放到你应用的WEB-INF/lib目录中,你也可以在你maven项目的POM文件中添加下面包依赖
- <dependency>
- <groupId>org.apache.struts</groupId>
- <artifactId>struts2-convention-plugin</artifactId>
- <version>2.1.6</version>
- </dependency
convention-plugin的约定
1.默认情况下,Convention会默认所有的结果页面都存储在WEB-INF/content下,你也可以在struts的配置文件中设定struts.convention.result.path的值到一个新的路径。如
- <constant name="struts.convention.result.path" value="/WEB-INF/page" />
这样的话所有结果页面的会存储在WEB-INF/page下了,把jsp放在WEB-INF下有一个好处,别人就没有办法直接访问了,这样就可以简化spring security的配置工作。
2. 默认情况下,包的路径包含action,actions,struts,struts2的所有包都会被struts作为含有Action类的路径来搜索。你可以通过设置struts.convention.package.locators属性来修改这个配置,如springside的struts.xml中是这样配置的,
- <constant name="struts.convention.package.locators" value="web" />
则在项目中,包的路径含有web的将被视为Action存在的路径来进行搜索。
3. 接着,Convention从前一步找到的package以及其子package中寻找com.opensymphony.xwork2.Action 的实现以及以Action结尾的类,如:
com.courseonline.test.web.account.UserAction 就会被扫描到。
4. 命名空间。从定义的.package.locators标示开始到包结束的部分,就是命名空间。举个例子,上面我们定义了
- <constant name="struts.convention.package.locators" value="web" />
所以 com.courseonline.test.web.account.UserAction的命名空间是:“/account”。
5. Convention通过如下规则确定URL的具体资源部分:去掉类名的Action部分。然后将每个分部的首字母转为小写,用‘-’分割,你可以设置struts.convention.action.name.separator如
- <constant name="struts.convention.action.name.separator" value="-" />
比如上面的例子com.courseonline.test.web.account.UserAction 对应的jsp为/WEB-INF/content/account/use.jsp
如果是com.courseonline.test.web.account.UserDetailAction 对应的jsp为/WEB-INF/content/account/use-detail.jsp
下面是convention的一些常用注解
1.@Action 注解
- public class UserAction extends ActionSupport {
- @Action("url1")
- public String method1() {
- return SUCCESS;
- }
- @Action("/account/url2")
- public String method2() {
- return SUCCESS;
- }
- }
未用@Action注解前
默认调用路径
访问方法
默认映射路径
/user!method1.action
method1
/WEB-INF/content/user.jsp
/user!method2.action
method2
/WEB-INF/content/user.jsp
使用@Action注解后
@Action注解后调用的路径
访问方法
@Action注解后映射的路径
/url1!method1.action
method1
/WEB-INF/content/url1.jsp
/account/url2!method2.action
method2
/WEB-INF/content/account/url2.jsp
2.@Namespace 注释
- @Namespace("/account")
- public class UserDetailAction extends ActionSupport {
- public String method1() {
- return "error";
- }
- @Action("url")
- public String method2() {
- return “error”;
- }
- @Action("/different/url2")
- public String method3() {
- return “error”;
- }
- }
调用路径
访问方法
映射路径
/account/user-detail!method1.acton
method1
/WEN-INF/content/account/user-detail-error.jsp
/account/url!method2.acton
method2
/WEN-INF/content/account/url.jsp
/different/url2!method3.action
method3
/WEN-INF/content/different/url2.jsp
与@Action 注释不同的是,该注释覆盖了默认的namespace(默认的是’/’),此时再用user-detail!method1.action 已经不能访问method1了.
3.@Result
Convention允许action类为每个action定义不同的results,results分为两类,全局的(global)和本地的(local),全局results可以被action类中所有的action分享,这种results在action类上使用注解进行声明。本地results只能在action方法上进行声明。下面是两种results注解的例子.
1)全局的(global)。
- @Results({@Result(name="failure", location="/WEB-INF/fail.jsp") })
- public class UserAction extends ActionSupport {
- String method1() {
- return “failure”;
- }
- @Action("/different/url")
- public String method2() {
- return “failure”;
- }
- }
调用路径
访问方法
映射路径
/user!method1.action
method1
/WEB-INF/fail.jsp
/different/url!method2.action
method2
/WEB-INF/fail.jsp
2 本地的(local)。
- public class UserAction extends ActionSupport {
- @Action(value="/other/ url ",results={@Result(name = "error", location = " /WEB-INF/fail",type="redirect")})
- public String method1() {
- return “error”;
- }
- }
调用路径
访问方法
映射路径
/user!method1.action
method1
/WEB-INF/content/user-error.jsp
/other/url!method2.action
method1
/WEB-INF/fail.jsp
有了上面的知识,现在来看看springside 3 的mini-web项目中部分用到的convention插件的地方,理解起来就不难了。
比较典型的是UserAction.java。
- @Namespace("/account")
- @Results( { @Result(name = CrudActionSupport.RELOAD, location = "user.action", type = "redirect") })
- public class UserAction extends CrudActionSupport<User> {
- ………………
- @Override
- public String list() throws Exception {
- …………
- return SUCCESS;
- }
- @Override
- public String input() throws Exception {
- …………
- return INPUT;
- }
- @Override
- public String save() throws Exception {
- …………
- return RELOAD;
- }
- ………………
- }
这里我只选了三个返回结果分别为SUCCESS、INPUT、和RELOAD的方法来做例子。
调用路径
访问方法
映射路径
/account/user!list.action
list
/WEB-INF/content/account/user.jsp
/account/user!input.action
input
/WEB-INF/content/account/user-input.jsp
/account/user!save.action
save
/WEB-INF/content/account/user.jsp
在调用save方法后,为什么会返回/WEB-INF/content/account/user.jsp这个页面 呢?因为在全局的Result定义名为reload的result重定向到user.action, 其他result则按照convention默认,所以当调用完save方法后,返回的是RELOAD,又被重定向到user.action,然后返回到/WEB-INF/content/account/user.jsp 了;同理,访问input方法时,返回的是INPUT,所以会返回/WEB-INF/content/account/user-input.jsp
@Namespace("/account") 表示定义URL映射对应/account/user.action
@Results( {@Result(name = CrudActionSupport.RELOAD, location = "user.action",type = "redirect") })
定义名为reload的result重定向到user.action,其他result则按照convention默认.
以上说的不一定都是正确的,如有错误请指正,谢谢。
参考资料:http://www.blogjava.net/libin2722/articles/256525.html
以上:blog.csdn.net/javaer617/article/details/6413055
- Convention 零配置及其在springside3 mini-web中的使用
- Convention 零配置及其在springside3 mini-web中的使用
- J2EE: Convention 零配置及其在springside3 mini-web中的使用
- struts使用convention-plugin实现零配置
- Struts使用convention-plugin实现零配置
- Struts使用convention-plugin实现零配置
- STRUTS2 Convention零配置
- struts的零配置(convention插件的使用规则)
- 使用struts-convention插件来实现struts2零配置
- Struts2 注解零配置方法(convention插件使用)
- Struts2 注解零配置方法(convention插件使用)
- Struts2开始使用convention-plugin实现零配置
- struts2 Convention插件零配置,使用注解开发
- 简述STRUTS2 Convention零配置
- 简述Struts2 Convention零配置
- 简述Struts2 Convention零配置
- 简述Struts2 Convention零配置
- 简述STRUTS2 Convention零配置
- 五大对象response 、request 、session、 application、 serve
- 浅谈android蓝牙睡眠机制
- springside3里面的hibernate
- su - root 与su root的区别
- 配置 MyEclipse 的 WebLogic 8 服务器
- Convention 零配置及其在springside3 mini-web中的使用
- 跨平台动态库加载
- 【介绍】KDD Cup2012 数据挖掘竞赛主题一:预测围脖的推荐结果(腾讯赞助)
- Android -- SurfaceFlinger 合成主线程 系列 (三)
- Davinci DM6446开发攻略——DSP开发工程建立
- Linux主机开机顺序
- win7 网页打不开,只能登录QQ问题
- C++加密解密函数及用法示例
- Eclipse中的快捷键