struts2注解总结----@InterceptorRef
来源:互联网 发布:mac系统怎么切换用户名 编辑:程序博客网 时间:2024/05/17 03:12
写在前面:
本文主要讲的是注解方式的拦截器的使用,所以xml文件的不会细讲,文中的代码也比较简单,没有什么权限控制啊,拦截信息之类的代码,重点还是说明注解方式的使用方法,了解了使用方法之后,内容可以自行扩展,这个根据自己的需要来,好了,就这样。
上次写了@Action和@Result两种注解的使用方式,这次要讲的是@Interceptor和@ParentPackage
介绍:
@InterceptorRef/@InterceptorRefs:
@InterceptorRef可以就是用来配置拦截器的,有如下属性
- value:指定拦截器(栈)的名字,即在下面配置的name(一般只有value时,可以省略value)
- params:是一个字符串数组,用来传递参数
虽然是使用注解的方式,但是,还是需要在xml文件中预先配置好拦截器的信息
<interceptor name="interceptor1" class="struts2.interceptor.TestInterceptor1"></interceptor><interceptor-stack name="interceptorStack1"><interceptor-ref name="defaultStack"/><interceptor-ref name="interceptor1"/></interceptor-stack>
具体的拦截器类如下
public class TestInterceptor1 extends AbstractInterceptor {@Overridepublic String intercept(ActionInvocation arg0) throws Exception {System.out.println("--------TestInterceptor1--------");return arg0.invoke();}}
好了,这样就定义好了拦截器,如果使用xml配置的方式,那么我们需要使用下面的方式来使用拦截器
<action name="login" class="struts.action.xxx"> <!-- .... --> <interceptor-ref name="interceptorStack1"/></action>既然Action都是用注解配置的,那么这时的拦截器就不需要写在这了,具体配置有两种方式,一种是配置在类上的,另外一种是配置在方法上的,下面是配置在方法上的(action例子还是上次文章的例子,具体->别点我,别点我!!不要啊~~)
@Namespace("/")@ParentPackage("default")public class TestAction1 extends ActionSupport {@Action(value = "add", results = { @Result(name = "add", location = "/add.jsp")},interceptorRefs={@InterceptorRef("interceptorStack1")})public String add() throws Exception {return "add";}}
interceptorRefs可以放多个@InterceptorRef,和results类似
当访问/add的时候,控制台会打印出 ---> --------TestInterceptor1--------接下来是在类上使用注解
@Namespace("/")@ParentPackage("default")@InterceptorRefs({@InterceptorRef("interceptorStack1")})public class TestAction1 extends ActionSupport {@Action(value = "add", results = { @Result(name = "add", location = "/add.jsp")})public String add() throws Exception {return "add";}}这样的效果和上面的是一样的,访问响应的action会打出 ---> --------TestInterceptor1--------
@InterceptorRefs可以配置多个拦截器,和在@Action中指定interceptorRefs= {}类似,当然,也可以只用@InterceptorRef指定一个拦截器
好了,这就是两种使用的方式,从上面的例子看来,好像没有什么区别,其实,区别还是有的,接下来先看下面的action
@Namespace("/")@ParentPackage("default")@InterceptorRef("interceptorStack1")public class TestAction1 extends ActionSupport {@Action(value = "add", results = { @Result(name = "add", location = "/add.jsp") })public String add() throws Exception {return "add";}@Action(value = "delete", results = { @Result(name = "delete", location = "/delete.jsp") })public String delete() throws Exception {return "delete";}}这样当访问/delete和/add时都会打印出 ---> --------TestInterceptor1--------
即配置在类上的拦截器是作用在所有方法上的
再看下下面混合使用两种方式
@Namespace("/")@ParentPackage("default")@InterceptorRef("interceptorStack1")public class TestAction1 extends ActionSupport {@Action(value = "add", results = { @Result(name = "add", location = "/add.jsp")},interceptorRefs = {@InterceptorRef("interceptorStack2")<span style="white-space:pre"></span>})public String add() throws Exception {return "add";}@Action(value = "delete", results = { @Result(name = "delete", location = "/delete.jsp") })public String delete() throws Exception {return "delete";}}
当访问/delete时会打印出 ---> --------TestInterceptor1--------
这是当然的,delete方法并没有什么改变,和上面作用在类上的拦截器的例子一样,拦截器1会拦截器该方法
而访问/add的时候会发生什么?这时会打印出
---> --------TestInterceptor1-------- 和
---> --------TestInterceptor2--------
(拦截器2和1的定义和1一样,只是将1改成2)
这就是作用在方法上的拦截器和定义在类上的区别
定义在方法上的拦截器会只拦截这个方法,而定义在类上的拦截器会拦截所有的方法
0 0
- struts2注解总结----@InterceptorRef
- 关于struts2注解Namespace的问题总结
- struts2注解总结----@Action和@Result
- struts2注解总结----@Action和@Result
- struts2注解总结----@Action和@Result
- struts2注解总结----@Action和@Result
- struts2注解
- struts2注解
- struts2 注解
- struts2 注解
- struts2注解
- struts2注解
- struts2注解
- struts2注解
- Struts2注解
- struts2注解
- struts2注解
- struts2注解
- 凡是现实的都是合理的
- Using __iadd__ & __radd__
- Sicily T-primes
- 第二周项目三——时间类(2)
- Openfire3.10beta版源码在eclipse上部署编译
- struts2注解总结----@InterceptorRef
- 2014蓝桥杯--神奇算式
- 第二章 Spring MVC入门 —— 跟小贤学SpringMVC
- Hibernate查询缓存的利弊
- 【云分析】之四《IDC云计算转型进行时,转型了又能怎样?》
- VC Socket网络通信
- 数字签名
- 插入信息失败不能为NULL
- 第三周课后实践-阅读程序