- 浏览: 890533 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (687)
- java (127)
- servlet (38)
- struts (16)
- spring (22)
- hibernate (40)
- javascript (58)
- jquery (18)
- tomcat (51)
- 设计模式 (6)
- EJB (13)
- jsp (3)
- oracle (29)
- RUP (2)
- ajax (3)
- java内存管理 (4)
- java线程 (12)
- socket (13)
- path (5)
- XML (10)
- swing (2)
- UML (1)
- JBPM (2)
- 开发笔记 (45)
- Note参考 (15)
- JAXB (4)
- Quartz (2)
- 乱码 (2)
- CSS (2)
- Exception (4)
- Tools (7)
- sqlserver (3)
- DWR (7)
- Struts2 (47)
- WebService (2)
- 问题解决收藏 (7)
- JBOSS (7)
- cache (10)
- easyUI (19)
- jQuery Plugin (11)
- FreeMarker (6)
- Eclipse (2)
- Compass (2)
- JPA (1)
- WebLogic (1)
- powerdesigner (1)
- mybatis (1)
最新评论
-
bugyun:
受教了,谢谢
java 正则表达式 过滤html标签 -
xiongxingxing_123:
学习了,感谢了
java 正则表达式 过滤html标签 -
wanmeinange:
那如果无状态的。对同一个任务并发控制怎么做?比如继承Quart ...
quartz中参数misfireThreshold的详解 -
fanjieshanghai:
...
XPath 元素及属性查找 -
tianhandigeng:
还是没明白
quartz中参数misfireThreshold的详解
Annotation 参考
Convention使用某些注解语句来覆写插件默认的action到url的映射和自动搜索渲染到的页面。此外,你还可以修改action配置文件中定义的父XWORK的包信息
Action annotation
Convention 插件可以使用Action注解语句来修改action返回的URL地址。本注解同时也允许包含在Actions语句中,用来使一个action对应于多个URL。在action 方法中使用本注解语句,可以参考以下代码:
1.package com.example.actions;
2.
3.import com.opensymphony.xwork2.ActionSupport;
4.import org.apache.struts2.convention.annotation.Action;
5.
6.public class HelloWorld extends ActionSupport {
7. @Action("/different/url")
8. public String execute() {
9. return SUCCESS;
10. }
11.}
现在我们action类中将使用 /different/url 来替代默认的 /hello-world,如果未指定@Result(参考下节),result的路径将会使用action的namespace,上面的例子中将会返回一下路径 "/WEB-INF/content/different/url.jsp"。
Action类中的单个方法可以使用Actions 注解来映射多个地址。
1.package com.example.actions;
2.
3.import com.opensymphony.xwork2.ActionSupport;
4.import org.apache.struts2.convention.annotation.Action;
5.import org.apache.struts2.convention.annotation.Actions;
6.
7.public class HelloWorld extends ActionSupport {
8. @Actions({
9. @Action("/different/url"),
10. @Action("/another/url")
11. })
12. public String execute() {
13. return SUCCESS;
14. }
15.}
另外的 Action 或 Actions 的使用方法是,在单个action类中定义多个action方法,每个方法对应一个不同的地址。下面是多个action方法的范例:
1.package com.example.actions;
2.
3.import com.opensymphony.xwork2.ActionSupport;
4.import org.apache.struts2.convention.annotation.Action;
5.import org.apache.struts2.convention.annotation.Actions;
6.
7.public class HelloWorld extends ActionSupport {
8. @Action("/different/url")
9. public String execute() {
10. return SUCCESS;
11. }
12.
13. @Action("url")
14. public String doSomething() {
15. return SUCCESS;
16. }
17.}
前面的例子中,第二个URL地址是不推荐的,上面url将使用java 包名作为namespace,而不会直接使用Action注解的地址。
Interceptor 和 interceptor stacks 同样可以使用interceptorRefs 注解来指定。下例演示了在action中同时添加"validation"和"defaultStack"拦截器。
1.package com.example.actions;
2.
3.import com.opensymphony.xwork2.ActionSupport;
4.import org.apache.struts2.convention.annotation.Action;
5.import org.apache.struts2.convention.annotation.Actions;
6.
7.public class HelloWorld extends ActionSupport {
8. @Action(interceptorRefs={@InterceptorRef("validation"), @InterceptorRef("defaultStack")})
9. public String execute() {
10. return SUCCESS;
11. }
12.
13. @Action("url")
14. public String doSomething() {
15. return SUCCESS;
16. }
17.}
可以通过params属性来将参数传递给结果。属性的值是一个偶数个元素的String的数组,由形如{"key0", "value0, "key1", "value1" ... "keyN", "valueN"}所组成,举个例子:
1.package com.example.actions;
2.
3.import com.opensymphony.xwork2.ActionSupport;
4.import org.apache.struts2.convention.annotation.Action;
5.import org.apache.struts2.convention.annotation.Actions;
6.
7.public class HelloWorld extends ActionSupport {
8. @Action(interceptorRefs=@InterceptorRef(value="validation",params={"programmatic", "false", "declarative", "true}))
9. public String execute() {
10. return SUCCESS;
11. }
12.
13. @Action("url")
14. public String doSomething() {
15. return SUCCESS;
16. }
17.}
如果未指定interceptors,将会使用默认的。
InterceptorRef annotation
Interceptors 可以在方法级进行指定,使用Action 注解或在类上使用InterceptorRefs注解。Class级别的拦截会被应用到类包含的所有action上。可以参考下面例子:
1.package com.example.actions;
2.
3.import com.opensymphony.xwork2.ActionSupport;
4.import org.apache.struts2.convention.annotation.Action;
5.import org.apache.struts2.convention.annotation.Actions;
6.
7.@InterceptorRefs({
8. @InterceptorRef("interceptor-1"),
9. @InterceptorRef("defaultStack")
10.})
11.public class HelloWorld extends ActionSupport {
12. @Action(value="action1", interceptorRefs=@InterceptorRef("validation"))
13. public String execute() {
14. return SUCCESS;
15. }
16.
17. @Action(value="action2")
18. public String doSomething() {
19. return SUCCESS;
20. }
21.}
下面的拦截机将会应用到“action1”中:"interceptor-1","defaultStack"中的所有拦截机, "validation"
"defaultStack"中的所有拦截机也会对”action2”生效
Result annotation
Convention 允许action类为每个action定义不同的results,results分为两类,全局的(global)和本地的(local),全局results可以被action类中所有的action分享,这种results在action类上使用注解进行声明。本地results只能在action方法上进行声明。下面是两种results注解的例子:
1.package com.example.actions;
2.
3.import com.opensymphony.xwork2.ActionSupport;
4.import org.apache.struts2.convention.annotation.Action;
5.import org.apache.struts2.convention.annotation.Actions;
6.import org.apache.struts2.convention.annotation.Result;
7.import org.apache.struts2.convention.annotation.Results;
8.
9.@Results({
10. @Result(name="failure", location="fail.jsp")
11.})
12.public class HelloWorld extends ActionSupport {
13. @Action(value="/different/url",
14. results={@Result(name="success", location="http://struts.apache.org", type="redirect")}
15. )
16. public String execute() {
17. return SUCCESS;
18. }
19.
20. @Action("/another/url")
21. public String doSomething() {
22. return SUCCESS;
23. }
24.}
参数同样可以在results中通过params属性进行传递,和上面一样,由形如{"key0", "value0, "key1", "value1" ... "keyN", "valueN"}所组成。可参考下例:
1.package com.example.actions;
2.
3.import com.opensymphony.xwork2.ActionSupport;
4.import org.apache.struts2.convention.annotation.Action;
5.import org.apache.struts2.convention.annotation.Actions;
6.import org.apache.struts2.convention.annotation.Result;
7.import org.apache.struts2.convention.annotation.Results;
8.
9.public class HelloWorld extends ActionSupport {
10. @Action(value="/different/url",
11. results={@Result(name="success", type="httpheader", params={"status", "500", "errorMessage", "Internal Error"})}
12. )
13. public String execute() {
14. return SUCCESS;
15. }
16.
17. @Action("/another/url")
18. public String doSomething() {
19. return SUCCESS;
20. }
21.}
Namespace annotation
namespace注解允许action使用指定的路径替代默认的以package包名作为路径。本注解可以在action类或Java 包中的package-info.java类中进行设置。设置在action类中的namespace注解,对本action类中所有的action都有效,这是不完全合乎规范的action URL处理地址。设置在package-info.java中的namespace注解,将会改变本java包下所有的action的默认namespace。下面是此注解的例子:
1.package com.example.actions;
2.
3.import com.opensymphony.xwork2.ActionSupport;
4.import org.apache.struts2.convention.annotation.Action;
5.import org.apache.struts2.convention.annotation.Namespace;
6.
7.@Namespace("/custom")
8.public class HelloWorld extends ActionSupport {
9. @Action("/different/url")
10. public String execute() {
11. return SUCCESS;
12. }
13.
14. @Action("url")
15. public String doSomething() {
16. return SUCCESS;
17. }
18.}
在上例中的action 会对2个不同的地址响应:/different/url 和 /custom/url
下面是一个在package-info.java中使用namespace注解的例子:
1.@org.apache.struts2.convention.annotation.Namespace("/custom")
2.package com.example.actions;
@org.apache.struts2.convention.annotation.Namespace("/custom")
package com.example.actions;
这会改变com.example.actions包下所有action的默认namespace。请注意一点,本注解不会应用到子一级的包中。
ResultPath annotation
ResultPath 注解用来更改默认的results存储路径,注解可以放到action的类中,也可以放到package-info.java 文件夹中。参考下例:
1.package com.example.actions;
2.
3.import com.opensymphony.xwork2.ActionSupport;
4.import org.apache.struts2.convention.annotation.Action;
5.import org.apache.struts2.convention.annotation.ResultPath;
6.
7.@ResultPath("/WEB-INF/jsps")
8.public class HelloWorld extends ActionSupport {
9. public String execute() {
10. return SUCCESS;
11. }
12.}
上面的result将以 WEB-INF/jsps 替换默认的 WEB-INF/content
ParentPackage annotation
ParentPackage注解用来定义具体action类的父XWork包或java包,下面例子演示了在action类上使用本注解:
1.package com.example.actions;
2.
3.import com.opensymphony.xwork2.ActionSupport;
4.import org.apache.struts2.convention.annotation.Action;
5.import org.apache.struts2.convention.annotation.ParentPackage;
6.
7.@ParentPackage("customXWorkPackage")
8.public class HelloWorld extends ActionSupport {
9. public String execute() {
10. return SUCCESS;
11. }
12.}
ExceptionMapping Annotation
ExceptionMapping 注解用来影射action抛出的异常。可以参考exception mapping documentation 获得详细信息。注解用类级别,在这种情况下,注解会应用到类里面的所有action
1.@ExceptionMappings({
2. @ExceptionMapping(exception = "java.lang.NullPointerException", result = "success", params = {"param1", "val1"})
3.})
4.public class ExceptionsActionLevelAction {
5.
6. public String execute() throws Exception {
7. return null;
8. }
9.}
可以在ExceptionMapping注解中使用params 属性来传递具体值给结果渲染页。ExceptionMapping注解同样可以在action级别进行设置:
1.public class ExceptionsMethodLevelAction {
2. @Action(value = "exception1", exceptionMappings = {
3. @ExceptionMapping(exception = "java.lang.NullPointerException", result = "success", params = {"param1", "val1"})
4. })
5. public String run1() throws Exception {
6. return null;
7. }
8.}
Actions in jar files
默认情况下,Convention 插件不会从jar文件中寻找action。如果想实现这一功能,jar文件必须被struts.convention.action.includeJars 所定义的正则 匹配到。在例子中 myjar1.jar和 myjar2.jar 将被插件检测到:
1.<constant name="struts.convention.action.includeJars" value=".*/myjar1.*?jar(!/)?,.*/myjar2*?jar(!/)?" />
<constant name="struts.convention.action.includeJars" value=".*/myjar1.*?jar(!/)?,.*/myjar2*?jar(!/)?" />
提示:正则表达式只针对jar文件的路径进行匹配,而不是文件名。jar的URL应该包含jar文件的路径并以"!/"结尾。
Automatic configuration reloading
Convention插件可以自动重新加载配置的功能,无需重启容器,就可以刷新类中包含的action。这自动加载automatic xml 配置文件类似。你必须在struts.xml 中添加以下代码来启用本功能:
1.<constant name="struts.devMode" value="true"/>
2.<constant name="struts.convention.classes.reload" value="true" />
此功能没有在所有容器中进行过测试,强力建议不要在生产环境中使用。
发表评论
-
ognl表达式
2011-07-07 00:36 1299OGNL是Object Graphic Navigation ... -
在Struts 2_0中实现表单数据校验
2011-07-07 00:02 1144转换与校验(Conversion & Validati ... -
简单的struts2输入校验框架
2011-05-13 23:43 10881.输入页面login.jsp: <%@ page ... -
struts2在学习(十二)--表单验证的两种方式
2011-05-13 23:13 960第四个示例:注解方式校验器---用户注册页面user2_reg ... -
struts2在学习(十一)--表单验证的两种方式
2011-05-13 23:09 906第二个示例:XML配置式校验器---登录和注册页面user_l ... -
struts2在学习(十)--表单验证的两种方式
2011-05-13 22:56 11641. Struts2中的输入校验2. 编码方式校验 1) A ... -
struts2采用convention-plugin实现零配置
2011-05-13 21:58 1120最近开始关注struts2的新特性,从这个版本开始,Strut ... -
基于SSH2框架Struts2拦截器的登录验证实现
2011-04-01 22:00 2291通过之前的Struts2.1.6+Spring2.5.6+H ... -
通过ActionContext类访问Servlet对象
2011-04-01 21:40 1920ActionContext类位于com.opensympho ... -
webwork 之销毁session
2011-04-01 17:35 1767销毁的意思?不是清空 ... -
Struts2 Convention Plugin(二)
2011-03-18 01:25 1149Results and result codesStruts ... -
Struts2 Convention Plugin(一)
2011-03-18 01:25 1102Introduction从struts2.1版本开始,Conv ... -
struts2页面中的标签调用类的方法
2011-03-15 16:33 1619<s:set name="str" ... -
Apache Struts 2.2.1 GA版发布
2011-03-14 17:14 1337昨日,Apache软件基金会发布了Struts 2.2.1 G ... -
spring2 +hibernate 3 + struts 配置
2011-03-14 15:15 12131. web.xml 1. <?xml versi ... -
Struts2 中action之间的跳转
2011-03-14 12:32 1254转载于http://zhou568xiao.iteye.com ... -
Struts2 的Result Type
2011-03-13 16:35 1048http://www.blogjava.net/duanzhi ... -
struts2 跳转类型 result type=chain、dispatcher、redirect(redirect-action)
2011-03-13 16:32 1623dispatcher 为默认跳转类型,用于返回一个视图资源(如 ... -
struts2防止重复提交
2011-03-10 23:07 1295struts2的防止重复提交 也使用到了 token (令牌机 ... -
Struts2 数据输入校验(1) —— 函数验证
2011-02-20 20:47 914用struts2标签库来实现上述目的的基本原理: 错误消息分为 ...
相关推荐
Struts2 Convention Plugin 是从 Struts2.1 版本开始引入的一个插件,它的主要目标是实现 Struts2 框架的零配置。通过约定优于配置的原则,开发者可以更加专注于业务逻辑,减少大量的 XML 配置工作。以下是 ...
Struts2 Convention Plugin是Apache Struts框架的一个重要组成部分,它为开发者提供了一种更为便捷的配置方式,使得在Struts2应用中实现MVC模式变得更加简单。这个测试项目旨在帮助我们理解和掌握如何在实际开发中...
然而,随着版本的更新,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是Apache Struts框架的一个重要插件,主要目标是简化MVC(Model-View-Controller)架构中的配置工作。这个插件引入了一种约定优于配置(Convention over Configuration)的理念,允许...
struts2-convention-plugin-2.1.6.jar
struts2-convention-plugin-2.3.1.jar,使用注解的方式代替xml配置action,必须要引用这个包。
为了在项目中启用Convention插件,首先需要添加`struts2-convention-plugin`到项目的依赖中。对于Struts2.1.6版本来说,需要将`struts-Convention-plugin-2.1.6.jar`文件放置于项目的`WEB-INF/lib`目录下。 #### 2....
### Struts2 Convention Plugin详解 #### 一、引言 从Struts2的2.1版本开始,Convention Plugin被引入,旨在替代原有的Codebehind Plugin,实现Struts2框架下的零配置理念。这一转变简化了应用程序的开发流程,...
struts2-convention-plugin-2.3.32
struts2-convention-plugin-2.1.8.jar
struts2-convention-plugin-2.3.24.jar
struts2-convention-plugin-2.3.1.2.jar
Struts开始使用convention-plugin代替codebehind-plugin来实现struts的零配置,使用Convention插件,你需要此JAR文件
struts2-convention-plugin-2.3.15.3.jar struts2配置Action注解要用到的包,真正实现零配置
Struts2 Convention Plugin 应用详解 Struts2 是一个非常流行的开源 Java 框架,用于构建基于 Model-View-Controller(MVC)架构的Web应用程序。它提供了丰富的功能和灵活性,使得开发者能够更高效地开发Web应用。...