Struts2的拦截器interceptor
2016-07-15 12:11
766 查看
1.什么是拦截器(interceptor)
拦截器是strut2框架的中提供的一种java类。
2.拦截器的作用
1.可以拦截访问action的请求
2.给这个action加入新的丰富功能(上传、参数自动接收、类型自动转换等等)需要配置之后,指明哪一个拦截器去拦截哪一个action或者哪一些action,这样这个拦截器才会去拦截我们的这个action每一个拦截器就可以给我们的action加入一个新的功能.
3.拦截器(interceptor)如何工作的
a.有一个拦截器的类(struts2框架自带的或者我们自己定义的一个类)
b.在配置文件中把这个拦截器类配置出来.
c.指明这个拦截器要拦截哪一个或者哪一些action.
d.客户端发送一个请求访问一个被拦截器拦截的action
e.这个请求会先被struts2的filter所拦截,filter会先检查这个请求是不是请求的action,如果是action的话,那么会再检查这个action有没有被定义的拦截器所拦截,有如果那么就把这个请求交给拦截器去处理.
4.如何自定义一个拦截器
struts2框架已经写好了很多个拦截器(在struts2的核心jar包),同时也把这些拦截器配置在配置文件里面(在struts-default.xml中).
除此以外,我们还能写自己的的拦截器。
要写一个拦截器,首先要实现一个接口:com.opensymphony.xwork2.interceptor.Interceptor
例如:
然后再struts.xml文件中配置出这个拦截器类:
当前一个action需要被多个拦截器拦截的时候,正常情况下,我们需要在这个action中去引用要使用到的多个拦截器,但是我们可以使用一个拦截器栈去包含那几个拦截器,然后在action中直接引用这个拦截器栈就可以了.
1.一个拦截器栈可以包含多个拦截器
2.一个拦截器栈还可以包含其他拦截器栈
3.定义拦截器或者拦截器栈都要在<interceptors>标签中
例如:
6.默认拦截器/拦截器栈
在一个package中,我们可以把一个拦截器或者拦截器栈声明为一个默认的拦截器/拦截器栈
作用:将来这个package中所有的action都会被这个默认的拦截器/拦截器栈所拦截。
例如:myStack是一个拦截器或者拦截器栈
一般情况下,我们所写的任何action都会被一个叫做defaultStack的拦截器栈所拦截,这个拦截器栈中包含了十几个拦截器,这些拦截器给我们的action提供了很多丰富的功能.因为我们写所有的package都是直接或间接的继承了struts-default.xml文件中的一个名字叫struts-default的package,struts-default包中又把名字叫defaultStack的拦截器栈配置成了一个默认的拦截器栈,那么我们的package就把这个配置继承了过来,所有我们的action正常情况下都会被defaultStack所拦截
但是如果我们一旦指明了某一个action被我们所写的一个拦截器/拦截器栈所拦截,那么这个action就不会被defaultStack拦截了.所以我们可以在action中主动的再声明 这个action被defaultStack所拦截,或者把defaultStack加入到我们自定义的拦截器栈里面(拦截器栈可以包含拦截器栈)
7.package之间的继承
我们可以专门再定义一个package,在这个package里面我们只做拦截器/拦截器栈的定义:
注意:一定要保证action至少是被defaultStack这个拦截器栈所拦截的
在struts.xml中只定义出来一个拦截器,这个拦截器是不会被初始化和销毁的,在action中引用过以后才能让struts2框架帮我们去初始化这个拦截器,但是还是不能销毁,如果还想销毁的话,那么就要在一个拦截器栈中去引用一下这个拦截器才可以.
8.拦截器(interceptor)和过滤器(filter)的比较
相同点:
1.都是一种java类
2.都能拦截客户端发给服务器端的请求
3.拦截到请求之后都可以做一些相应的处理,最后还可以把这个请求放行.
4.都需要实现各自相应的接口以及在相应的配置文件中配置.
不同点:
1.拦截器(interceptor)是struts2框架中的定义的,过滤器(filter)是web里面的对象,是J2EE标准里面定义的.
2.拦截器(interceptor)只会拦截器访问action的请求,过滤器(filter)能够拦截所有请求.
3.拦截器(interceptor)定义在struts.xml文件中,过滤器(filter)定义在web.xml文件中.
4.拦截器(interceptor)对象的创建、调用、销毁是struts2框架负责的,过滤器(filter)对象的创建、调用、销毁服务器负责的.
我们自己定义的filter能不能拦截Struts2框架中的action
1.可以拦截
2.需要在web.xml文件中把我们自己的filter配置在struts2的filter的上面才可以.
因为web.xml文件中filter配置的先后顺序控制filter起作用的顺序,同时如果struts的filter先拦截到访问action的请求后,不会把这个请求交给下面的filter,而是交给了他它内部的拦截器(interceptor)了,但是如果我们自己filter拦截到请求之后,还是依然会交给下一个filter,也就是交给struts2的filter.
好了,拦截器就说完了~
拦截器是strut2框架的中提供的一种java类。
2.拦截器的作用
1.可以拦截访问action的请求
2.给这个action加入新的丰富功能(上传、参数自动接收、类型自动转换等等)需要配置之后,指明哪一个拦截器去拦截哪一个action或者哪一些action,这样这个拦截器才会去拦截我们的这个action每一个拦截器就可以给我们的action加入一个新的功能.
3.拦截器(interceptor)如何工作的
a.有一个拦截器的类(struts2框架自带的或者我们自己定义的一个类)
b.在配置文件中把这个拦截器类配置出来.
c.指明这个拦截器要拦截哪一个或者哪一些action.
d.客户端发送一个请求访问一个被拦截器拦截的action
e.这个请求会先被struts2的filter所拦截,filter会先检查这个请求是不是请求的action,如果是action的话,那么会再检查这个action有没有被定义的拦截器所拦截,有如果那么就把这个请求交给拦截器去处理.
4.如何自定义一个拦截器
struts2框架已经写好了很多个拦截器(在struts2的核心jar包),同时也把这些拦截器配置在配置文件里面(在struts-default.xml中).
除此以外,我们还能写自己的的拦截器。
要写一个拦截器,首先要实现一个接口:com.opensymphony.xwork2.interceptor.Interceptor
例如:
public class InterceptorOne implements Interceptor{ private static final long serialVersionUID = 1L; @Override public void destroy() { // TODO Auto-generated method stub System.out.println("InterOne销毁"); } @Override public void init() { // TODO Auto-generated method stub System.out.println("InterOne创建"); } ////拦截到访问action的情况的时候调用这个方法 @Override public String intercept(ActionInvocation invocation) throws Exception { // TODO Auto-generated method stub System.out.println("before One inter"); //调用下一个拦截器或者action类 //invoke()其实就是帮我们去调用action中将要执行的方法,比如execute方法 //invoke()的放回值其实就是action中方法执行完返回的字符串 String resultCode=invocation.invoke(); System.out.println("after One Inter"+resultCode); return resultCode; } }
然后再struts.xml文件中配置出这个拦截器类:
<interceptors> <interceptor name="OneInter" class="com.xu.struts2.web.interceptor.InterceptorOne"> </interceptor> </interceptors>最后指明这个拦截器在哪一个action中起作用:
<action name="web" class="com.xu.struts2.web.action.WebAction"> <result name="success" >/WEB-INF/jsp/index.jsp</result> <!-- 拦截器的引用 --> <interceptor-ref name="oneInterStack"></interceptor-ref> </action>5. 拦截器栈
当前一个action需要被多个拦截器拦截的时候,正常情况下,我们需要在这个action中去引用要使用到的多个拦截器,但是我们可以使用一个拦截器栈去包含那几个拦截器,然后在action中直接引用这个拦截器栈就可以了.
1.一个拦截器栈可以包含多个拦截器
2.一个拦截器栈还可以包含其他拦截器栈
3.定义拦截器或者拦截器栈都要在<interceptors>标签中
例如:
<interceptors> <interceptor name="OneInter" class="com.xu.struts2.web.interceptor.InterceptorOne"> </interceptor> <interceptor-stack name="oneInterStack"> <!-- 这是我们自己定义的一个拦截器 --> <interceptor-ref name="OneInter"></interceptor-ref> <!-- 这是struts-default.xml文件中定义的一个拦截器 --> <interceptor-ref name="basicStack"></interceptor-ref> </interceptor-stack> </interceptors>
6.默认拦截器/拦截器栈
在一个package中,我们可以把一个拦截器或者拦截器栈声明为一个默认的拦截器/拦截器栈
作用:将来这个package中所有的action都会被这个默认的拦截器/拦截器栈所拦截。
例如:myStack是一个拦截器或者拦截器栈
<default-interceptor-ref name="myStack"></default-interceptor-ref>注意:
一般情况下,我们所写的任何action都会被一个叫做defaultStack的拦截器栈所拦截,这个拦截器栈中包含了十几个拦截器,这些拦截器给我们的action提供了很多丰富的功能.因为我们写所有的package都是直接或间接的继承了struts-default.xml文件中的一个名字叫struts-default的package,struts-default包中又把名字叫defaultStack的拦截器栈配置成了一个默认的拦截器栈,那么我们的package就把这个配置继承了过来,所有我们的action正常情况下都会被defaultStack所拦截
但是如果我们一旦指明了某一个action被我们所写的一个拦截器/拦截器栈所拦截,那么这个action就不会被defaultStack拦截了.所以我们可以在action中主动的再声明 这个action被defaultStack所拦截,或者把defaultStack加入到我们自定义的拦截器栈里面(拦截器栈可以包含拦截器栈)
7.package之间的继承
我们可以专门再定义一个package,在这个package里面我们只做拦截器/拦截器栈的定义:
<package name="MyInter" extends="struts-default" namespace="/"> <interceptors> <interceptor name="myInterceptor" class="com.briup.web.interceptor.MyInterceptor"></interceptor> <interceptor-stack name="myStack"> <interceptor-ref name="myInterceptor"></interceptor-ref> <!-- 这是struts-default.xml文件中定义的一个拦截器栈 --> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors> <!-- 声明默认拦截器/拦截器栈 --> <!-- 当前包中所有的action都会被这个myStack所拦截器 --> <!-- 继承了当前包的其他包里面的所有action也会被这个myStack所拦截器 --> <default-interceptor-ref name="myStack"></default-interceptor-ref> </package>然后我们可以让其他的package去继承我们这个MyInter包,这样一来,其他包中的action都会被我们这个MyInter包中的默认拦截器栈myStack所拦截了。
注意:一定要保证action至少是被defaultStack这个拦截器栈所拦截的
在struts.xml中只定义出来一个拦截器,这个拦截器是不会被初始化和销毁的,在action中引用过以后才能让struts2框架帮我们去初始化这个拦截器,但是还是不能销毁,如果还想销毁的话,那么就要在一个拦截器栈中去引用一下这个拦截器才可以.
8.拦截器(interceptor)和过滤器(filter)的比较
相同点:
1.都是一种java类
2.都能拦截客户端发给服务器端的请求
3.拦截到请求之后都可以做一些相应的处理,最后还可以把这个请求放行.
4.都需要实现各自相应的接口以及在相应的配置文件中配置.
不同点:
1.拦截器(interceptor)是struts2框架中的定义的,过滤器(filter)是web里面的对象,是J2EE标准里面定义的.
2.拦截器(interceptor)只会拦截器访问action的请求,过滤器(filter)能够拦截所有请求.
3.拦截器(interceptor)定义在struts.xml文件中,过滤器(filter)定义在web.xml文件中.
4.拦截器(interceptor)对象的创建、调用、销毁是struts2框架负责的,过滤器(filter)对象的创建、调用、销毁服务器负责的.
我们自己定义的filter能不能拦截Struts2框架中的action
1.可以拦截
2.需要在web.xml文件中把我们自己的filter配置在struts2的filter的上面才可以.
因为web.xml文件中filter配置的先后顺序控制filter起作用的顺序,同时如果struts的filter先拦截到访问action的请求后,不会把这个请求交给下面的filter,而是交给了他它内部的拦截器(interceptor)了,但是如果我们自己filter拦截到请求之后,还是依然会交给下一个filter,也就是交给struts2的filter.
好了,拦截器就说完了~
相关文章推荐
- extjs 为某个事件设置拦截器
- 监听器获取Spring配置文件的方法
- 浅析JAVA中过滤器、监听器、拦截器的区别
- java自定义拦截器用法实例
- PHP的拦截器实例分析
- 快速学习AngularJs HTTP响应拦截器
- Android编程之监听器的实现方法
- Android编程之监听器用法实例分析
- Angularjs注入拦截器实现Loading效果
- Spring MVC--拦截器实现和用户登陆例子
- 利用java监听器实现在线人数统计
- JavaWeb中Struts2拦截器深入分析(一)
- Java的Struts2框架中拦截器使用的实例教程
- 防止未登录用户操作―基于struts2拦截器的简单实现
- struts2过滤器和拦截器的区别分析
- Oracle监听口令及监听器安全详解
- 在Java的Struts中判断是否调用AJAX及用拦截器对其优化
- SpringMVC+MyBatis项目总结(四)
- struts使用拦截器注解
- 10 过滤器和监听器