- 浏览: 134737 次
- 性别:
- 来自: 武汉
最新评论
-
ping2010:
“备注:半推的第一个例子中,服务器是推向指定的ScriptSe ...
dwr3 Reverse Ajax学习小结 -
r4196503:
14行 copy(imgFile, newPath); 第一 ...
kindeditor上传图片的修改 -
muqingren:
你这个绑定多个表单对象能实现吗?
Spring MVC - Binding to multiple commands -
skying8603:
Util util = new Util(session); ...
dwr3 Reverse Ajax学习小结 -
soliucheng:
在修改数据的时候不需要吧,他会自己把版本号跟上。Hiberna ...
ss3ex中Hibernate的乐观锁使用
今天突然想把ss3ex中的Codebehind Plugin换成Convention Plugin,找了些资料汇总如下:
The Convention Plugin is bundled with Struts since 2.1 and replaces the Codebehind Plugin and Zero Config plugins。使用Convention插件,你需要将其JAR文件放到你应用的WEB-INF/lib目录中,原先web.xml中的配置基本可以不要了。
convention-plugin的约定:
1. 默认所有的结果页面都存储在WEB-INF/content下,你可以通过在Struts的配置文件中设置struts.convention.result.path这个属性的值来改变到其他路径。如:
则将路径配置到了WEB-INF/page 下。
2. 默认包路径包含action,actions,struts,struts2的所有包都会被struts作为含有Action类的路径来搜索。你可以通过设置struts.convention.package.locators属性来修改这个配置。如:
则定义了在项目中,包路径包含web和action的将被视为Action存在的路径来进行搜索。
com.ss3ex.examples.web.demo.*,com.ustb.action.*都将被视为含有Action的包路径而被搜索。
3. 接着,Convention从前一步找到的package以及其子package中寻找 com.opensymphony.xwork2.Action 的实现以及以Action结尾的类:
com.example.actions.MainAction
com.example.actions.products.Display (implements com.opensymphony.xwork2.Action)
com.example.struts.company.details.ShowCompanyDetailsAction
4. 命名空间。从定义的struts.convention.package.locators标示开始到包结束的部分,就是命名空间。举个例子:
Com.ustb.web.user.userAction的命名空间是:“/user”。Com.ustb.web.user.detail.UserAction的命名空间是:“/user/detail”
5. Convention通过如下规则确定URL的具体资源部分:去掉类名的Action部分。然后将每个分部的首字母转为小写,用‘-’分割,你可以设置struts.convention.action.name.separator 如
还是举个例子:
UserAction->user
UserDetailAction ->user-detail。结合上面的。对于com.ustb.web.user.detail.UserDetailAction,映射的url就是/WEB-INF/page/user/detail/user-detail.jsp,“/WEB-INF/page/”是struts.convention.result.path,“user/detail/”是命名空间,user-detail是action分解的。
当然,简单的通过默认的方式来进行配置不能完全满足实际项目的需要。所幸,convention的零配置是非常灵活的。
通过@Action注释
对如下例子:
方法名 默认调用路径 默认映射路径
method1 /hello!method1.action . /WEB-INF/content/hello.jsp
method2 /hello!method2.action. /WEB-INF/content/hello.jsp
通过@Action注释后
方法名 @Action注释后调用路径 @Action注释 后映射路径
method1 /action1!method1.action. /WEB-INF/content/action1.jsp
method1 /user/action2!method2.action /WEB-INF/content/user/action2.jsp
或者
method1 /action1.action. /WEB-INF/content/action1.jsp
method1 /user/action2.action /WEB-INF/content/user/action2.jsp
/WEB-INF/content是struts.convention.result.path,还要加上命名空间,上面的类的命名空间正好是“”。
通过@Actions注释
我们可以通过:/different/url!method1.action 或 /another/url!method1.action 来调用method1 方法。
对应的映射路径分别是/WEB-INF/content/different/url-error.jsp; /WEB-INF/content/another/url-error.jsp
可能误导了大家,一个方法被@Action注释后,只是多了一种调用方式,而不是说覆盖了原来的调用方式。比如对于如下例子:
我们调用method1方法可以通过两种方式:
1 /hello!method1.action 映射 url:/WEB-INF/content/hello-error.jsp
2 /another/url!method1.action 映射 url:/WEB-INF/content/another/url-error.jsp
可见,两种方式均可对method1方法进行调用,唯一的区别就是,两种调用的映射是不一样的,所以,想跳转到不同的界面,这是一个非常好的选择,即同一个ACTION可以映射2个不同的视图。
通过@Namespace 注释
通过 /other/hello-world!method1.action 访问method1 方法。
通过 /other/url!method2.action 访问method2 方法
通过 /different/url!method3.action 访问method3 方法
与@Action 注释不同的是,该注释覆盖了默认的namespace(这里是‘/’),此时再用hello!method1.action 已经不能访问method1 了.
@Results和@Result
1 全局的(global)。
全局results可以被action类中所有的action分享,这种results在action类上使用注解进行声明。
当我们访问 /hello -world !method1.action 时,返回 /WEB-INF/fail.jsp
当我们访问 /hello -world !method2.action 时,返回 /WEB-INF/fail.jsp
当我们访问 /different/url!method2.action 时,返回 /WEB-INF/fail.jsp
2 本地的(local)。
本地results只能在action方法上进行声明。
当我们调用 /hello -world !method1.action 时,返回 /WEB-INF/content/hello-error.jsp
当我们调用 /other/bar!method1.action 时,返回 www.baidu.com
参考资料:
http://cwiki.apache.org/WW/convention-plugin.html
http://javeye.iteye.com/blog/238559
http://sunflowers.iteye.com/blog/357281
The Convention Plugin is bundled with Struts since 2.1 and replaces the Codebehind Plugin and Zero Config plugins。使用Convention插件,你需要将其JAR文件放到你应用的WEB-INF/lib目录中,原先web.xml中的配置基本可以不要了。
convention-plugin的约定:
1. 默认所有的结果页面都存储在WEB-INF/content下,你可以通过在Struts的配置文件中设置struts.convention.result.path这个属性的值来改变到其他路径。如:
<constant name="struts.convention.result.path" value="/WEB-INF/page" />
则将路径配置到了WEB-INF/page 下。
2. 默认包路径包含action,actions,struts,struts2的所有包都会被struts作为含有Action类的路径来搜索。你可以通过设置struts.convention.package.locators属性来修改这个配置。如:
<constant name="struts.convention.package.locators" value="web,action" />
则定义了在项目中,包路径包含web和action的将被视为Action存在的路径来进行搜索。
com.ss3ex.examples.web.demo.*,com.ustb.action.*都将被视为含有Action的包路径而被搜索。
3. 接着,Convention从前一步找到的package以及其子package中寻找 com.opensymphony.xwork2.Action 的实现以及以Action结尾的类:
com.example.actions.MainAction
com.example.actions.products.Display (implements com.opensymphony.xwork2.Action)
com.example.struts.company.details.ShowCompanyDetailsAction
4. 命名空间。从定义的struts.convention.package.locators标示开始到包结束的部分,就是命名空间。举个例子:
Com.ustb.web.user.userAction的命名空间是:“/user”。Com.ustb.web.user.detail.UserAction的命名空间是:“/user/detail”
5. Convention通过如下规则确定URL的具体资源部分:去掉类名的Action部分。然后将每个分部的首字母转为小写,用‘-’分割,你可以设置struts.convention.action.name.separator 如
<constant name="struts.convention.action.name.separator" value="-" />
还是举个例子:
UserAction->user
UserDetailAction ->user-detail。结合上面的。对于com.ustb.web.user.detail.UserDetailAction,映射的url就是/WEB-INF/page/user/detail/user-detail.jsp,“/WEB-INF/page/”是struts.convention.result.path,“user/detail/”是命名空间,user-detail是action分解的。
当然,简单的通过默认的方式来进行配置不能完全满足实际项目的需要。所幸,convention的零配置是非常灵活的。
通过@Action注释
对如下例子:
package com.example.web; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionSupport; public class HelloAction extends ActionSupport { @Action("action1") public String method1() { return SUCCESS; } @Action("/user/action2") public String method2() { return SUCCESS; } }
方法名 默认调用路径 默认映射路径
method1 /hello!method1.action . /WEB-INF/content/hello.jsp
method2 /hello!method2.action. /WEB-INF/content/hello.jsp
通过@Action注释后
方法名 @Action注释后调用路径 @Action注释 后映射路径
method1 /action1!method1.action. /WEB-INF/content/action1.jsp
method1 /user/action2!method2.action /WEB-INF/content/user/action2.jsp
或者
method1 /action1.action. /WEB-INF/content/action1.jsp
method1 /user/action2.action /WEB-INF/content/user/action2.jsp
/WEB-INF/content是struts.convention.result.path,还要加上命名空间,上面的类的命名空间正好是“”。
通过@Actions注释
package com.example.web; import com.opensymphony.xwork2.ActionSupport; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Actions; public class HelloAction extends ActionSupport { @Actions({ @Action("/different/url"), @Action("/another/url") }) public String method1() { return “error”; }
我们可以通过:/different/url!method1.action 或 /another/url!method1.action 来调用method1 方法。
对应的映射路径分别是/WEB-INF/content/different/url-error.jsp; /WEB-INF/content/another/url-error.jsp
可能误导了大家,一个方法被@Action注释后,只是多了一种调用方式,而不是说覆盖了原来的调用方式。比如对于如下例子:
package com.example.web; import com.opensymphony.xwork2.ActionSupport; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Actions; public class HelloAction extends ActionSupport { @Action("/another/url") public String method1() { return “error”; }
我们调用method1方法可以通过两种方式:
1 /hello!method1.action 映射 url:/WEB-INF/content/hello-error.jsp
2 /another/url!method1.action 映射 url:/WEB-INF/content/another/url-error.jsp
可见,两种方式均可对method1方法进行调用,唯一的区别就是,两种调用的映射是不一样的,所以,想跳转到不同的界面,这是一个非常好的选择,即同一个ACTION可以映射2个不同的视图。
通过@Namespace 注释
package com.example.web; import com.opensymphony.xwork2.ActionSupport; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Actions; @Namespace("/other") public class HelloWorld extends ActionSupport { public String method1() { return “error”; } @Action("url") public String method2() { return “error”; } @Action("/different/url") public String method3() { return “error”; } }
通过 /other/hello-world!method1.action 访问method1 方法。
通过 /other/url!method2.action 访问method2 方法
通过 /different/url!method3.action 访问method3 方法
与@Action 注释不同的是,该注释覆盖了默认的namespace(这里是‘/’),此时再用hello!method1.action 已经不能访问method1 了.
@Results和@Result
1 全局的(global)。
全局results可以被action类中所有的action分享,这种results在action类上使用注解进行声明。
package com.example.actions; import com.opensymphony.xwork2.ActionSupport; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Actions; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.Results; @Results({ @Result(name="failure", location="/WEB-INF/fail.jsp") }) public class HelloWorld extends ActionSupport { public String method1() { return “failure”; } @Action("/different/url") public String method2() { return “failure”; } }
当我们访问 /hello -world !method1.action 时,返回 /WEB-INF/fail.jsp
当我们访问 /hello -world !method2.action 时,返回 /WEB-INF/fail.jsp
当我们访问 /different/url!method2.action 时,返回 /WEB-INF/fail.jsp
2 本地的(local)。
本地results只能在action方法上进行声明。
package com.example.actions; import com.opensymphony.xwork2.ActionSupport; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Actions; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.Results; public class HelloWorld extends ActionSupport { @Action(value="/other/bar",results={@Result(name = "error", location = "www.baidu.com",type="redirect")}) public String method1() { return “error”; } }
当我们调用 /hello -world !method1.action 时,返回 /WEB-INF/content/hello-error.jsp
当我们调用 /other/bar!method1.action 时,返回 www.baidu.com
参考资料:
http://cwiki.apache.org/WW/convention-plugin.html
http://javeye.iteye.com/blog/238559
http://sunflowers.iteye.com/blog/357281
发表评论
-
Document对象内容集合
2010-09-18 12:18 947Document对象内容集合 document 文挡对象 - ... -
tomcat6配置https
2010-03-04 12:37 4250tomcat6配置双向认证 1、 ... -
maven-eclipse-plugin 与aspectj
2010-02-06 17:32 7716问题1:最近一段时间以来,项目中使用maven-eclipse ... -
linux中使用broadcom型号卡上网
2010-01-19 15:31 4203确认下网卡型号: sansha ... -
用nginx-0.8.32和一个tomcat6.0.20搭建ss3ex
2010-01-15 14:14 15801、下载nginx-0.8.32和一个tomcat6.0.20 ... -
用apache_2.2.14和tomcat6.0.20搭建ss3ex
2010-01-13 18:40 17251、安装apache_2.2.14-win32-x86-no_ ... -
nginx+tomcat配置负载均衡和集群
2010-01-12 16:25 18171、下载nginx(nginx/Windows-0.8.32) ... -
ss3ex中的自定义URL格式
2009-11-23 22:21 2008自定义URL格式,本方法只是在模仿REST样的URL格式: 比 ... -
ss3ex与Lingo,ss3中spring security2使用的差别
2009-10-29 09:32 2489spring security2中实现数据库管理认证和授权,版 ... -
WEB框架中异步实现方案
2009-10-22 22:15 1686异步解决方案中除了JMS,AJAX,DWR等外的简单选择,就是 ... -
实现线程内和线程间传值,合理使用ThreadLocal
2009-10-10 08:55 6621以下均在ss3ex环境中 1、理解线程 用户请求一个URL,所 ... -
Struts2中页面上访问后台static类中的方法
2009-09-14 19:05 14801、在struts.xml中保证(或者设置) <cons ... -
读取excel文件
2009-09-09 10:41 1364读取excel文件 -
不用session、request传值的另一种解决方案
2009-08-13 19:40 1659不用session、request传值的另一种解决方案: pu ... -
发布ss3ex的maven版本,取名叫sango吧
2009-07-19 23:19 1247都在用maven,跟上步伐,发布一个maven版本的s ... -
tomcat调试maven2项目
2009-07-16 21:49 4791一、搭建maven项目(目的 ... -
eclipse3.4安装m2eclipse
2009-07-15 10:50 2965工作需要,必须要使用maven2。 eclipse版本:ecl ... -
kindeditor上传图片的修改
2009-06-27 12:19 19643最近做新闻系统,用了kindeditor,其中上传图片 ... -
预先抓取,外连接,和直接查询三者直接的区别
2009-06-15 17:51 1156预先抓取,外连接,和直接查询三者直接的区别: [1]. 预先抓 ... -
值集合映射 annotation
2009-06-15 13:29 913值集合映射 @CollectionOfElements ...
相关推荐
Convention Plugin 的使用非常简单,只需要将对应的 JAR 文件放入应用的 `WEB-INF/lib` 目录,或者在 Maven 项目的 POM 文件中添加依赖。如果需要从传统的 Codebehind 方式迁移到 Convention,可以根据官方提供的...
<artifactId>struts2-convention-plugin <version>2.1.6 ``` #### 转换Codebehind项目至Convention模式 若希望在现有项目中融入Convention插件,特别是在结合RESTful设计时,可在项目的struts.xml中加入特定...
然而,随着版本的更新,Struts2引入了一个名为Convention Plugin的新特性,旨在简化配置过程,实现所谓的“零配置”开发。 **什么是Struts2 Convention Plugin?** Convention Plugin是Struts2的一个插件,它基于...
struts2-convention-plugin-2.3.24.1
struts2-convention-plugin-2.3.15.1.jar
本笔记源代码详细展示了如何在Struts2项目中有效地使用convention-plugin。 首先,让我们了解convention-plugin的基本概念。在传统的Struts2应用中,开发者需要为每个Action编写XML配置文件,明确指定Action类、...
9. **插件集成**:Struts2的其他插件,如Struts2-dojo-plugin或Struts2-json-plugin,可以无缝地与Convention Plugin一起使用,提供更丰富的功能,如Ajax支持和JSON输出。 10. **调试与日志**:在开发过程中,开启...
为了使用Convention Plugin,需将对应JAR文件加入到应用的`WEB-INF/lib`目录,或在Maven项目的POM文件中添加依赖: ```xml <groupId>org.apache.struts <artifactId>struts2-convention-plugin <version>2.1.6 ...
Struts2 Convention Plugin是Apache Struts框架的一个重要组成部分,它为开发者提供了一种更为便捷的配置方式,使得在Struts2应用中实现MVC模式变得更加简单。这个测试项目旨在帮助我们理解和掌握如何在实际开发中...
安装使用Convention Plugin时,确保将对应的JAR文件添加到`WEB-INF/lib`目录,或者在Maven项目的`pom.xml`中添加依赖。在项目中启用REST支持,可以在`struts.xml`配置文件中加入特定的常量设置。 通过以上介绍,...
struts2-convention-plugin-2.3.1.jar,使用注解的方式代替xml配置action,必须要引用这个包。
struts2-convention-plugin-2.1.6.jar
Struts开始使用convention-plugin代替codebehind-plugin来实现struts的零配置,使用Convention插件,你需要此JAR文件
在这个版本中,Struts引入了两个重要的插件:Convention Plugin和JSON Plugin,使得JSON支持和配置简化成为可能。接下来,我们将深入探讨这两个插件的功能和如何在实际项目中应用它们。 **Convention Plugin**: ...
struts2-convention-plugin-2.1.8.jar
struts2-convention-plugin-2.3.32
【Struts2 Convention 插件】 Struts2 Convention 插件是从 Struts2.1 版本开始引入的一种零配置或少配置的框架插件,它的目标是通过约定优于配置的原则,简化Action、结果页面(如JSP、FreeMarker)和拦截器等的...
struts2-convention-plugin-2.3.24.jar