struts2中的拦截器详解。
来源:互联网 发布:fliqlo mac 编辑:程序博客网 时间:2024/06/05 15:46
一.struts2中的拦截器简介
拦截器是在某个方法或者字段被访问之前进行拦截,然后在之前或者之后加入某些操作的手段。拦截器的方法大多数通过代理来实现,struts2中的拦截器实现比较简单,当请求到达strut2的servletdispatcher时,struts2会查找配置文件,并根据配置文件实例化相对的拦截器对象,然后串成一个列表,最后一个一个调用列表中的拦截器。struts2提供了很多内置的拦截,大多数情况都能满足需求,当开发者有特殊需求时,可自定义拦截器。
二.struts2中自定义拦截器的三种方式
自定义拦截器需要直接或者间接实现Interceptor类。该类定义为。
public interface Interceptor extends Serializable{void init();void destroy();String interceptor (ActionInvocation invocation)throw Exception; }
其中,init()方法在拦截器创建时就被调用,在拦截器整个生命周期中只被调用一次,可用来对相关资源做初始化。
destroy()方法,在拦截器实例被销毁之前,用来对拦截器相关的资源进行释放,也只被执行一次。
interceptor()方法,是拦截器的核心方法,用来实现具体的拦截操作。返回字符用来跳转到相应的视图页面,
其中,ActionInvocation参数中包含被拦截的action的引用,可以通过该参数的invoke()方法转给下一个拦
截器或者转到action的execute()方法;
自定义拦截器方法一
直接实现interceptor,在自定义拦截器中实现拦截器接口定义的方法。
自定义拦截器方法二
继承AbstractInterceptor,该抽象类的具体实现如下。
public abstract class AbstractInterceptor implements Interceptor{void init(){};void destroy(){};String interceptor (ActionInvocation invocation)throw Exception; }
由此可见,AbstractInterceptor类已经对Interceptor接口进行了空实现,自定义拦截器只需要实现interceptor方法即可,在需要打开系统资源时,才覆盖init()和destroy()。
自定义拦截器方法三
实现过滤方法的拦截器MethodFilterInterceptor,此拦截器继承了AbstractInterceptor ,是一个拦截某一个具体的方法的方法过滤拦截器,并且,已经自动实现好了Intercept()方法 ,因此,我们想要拦截某一个方法的时候,只要继承MethodFilterInterceptor类,然后实现doIntercept()就可以 。实例如下。
public class MyInterceptor extends MethodFilterInterceptor { @Override protected String doIntercept(ActionInvocation invocation) throws Exception { System.out.println("------MyInterceptor invoked begin------"); String result = invocation.invoke(); System.out.println("------MyInterceptor invoked finish------"); return result; } }
三.自定义拦截器的配置。
拦截器的配置在strut.xml中完成,使用标签<interceptors>
步骤一:注册拦截器。
注册拦截器用<interceptor>标签。语法格式如下。
name属性用来指定拦截器的名字,class属性用来指定拦截器的实现类,<param>用来传入参数。
步骤二:配置拦截器栈
在实际开发中,需要在action执行前后同时执行多个拦截动作,此时可把多个拦截器组成一个拦截器栈。
定义拦截器栈使用<interceptor-stack>,当配置多个拦截器,使用<interceptor-ref>来指定多个拦截器,
语法格式如下。
小结,以上两步的配置可以总结为下图所示。
以上配置中,定义的拦截器栈是myStack,除了引进两个自定义的拦截器interpretor1和interpretor2外,
还引用了一个内置的拦截器栈defaultStack,并且,这个拦截器必须要引入。
步骤三:定制拦截方法
在拦截器栈配置时,定制方法的拦截,使用标签<param>,语法实例如下。
<interceptor-ref name=“InterceptorName"><!-- 指定哪些方法不拦截 <param name="excludeMethods">add,delete</param> --> <!-- 指定哪些方法需要拦截 --> <param name="includeMethods">add,delete</param></interceptor-ref>
步骤四:指定包中默认拦截器栈
使用标签<default-interceptor-ref>,为包指定默认的拦截器。语法格式如下。
<default-interceptor-ref name="myStack"></default-interceptor-ref>还可以为单独的action指定拦截器,使用标签<interceptor-ref>,语法格式如下。
<interceptor-ref name="myStack"></interceptor-ref>
四.总结
拦截器是实现struts2的基础,熟悉掌握自定义拦截器能够更好的发挥strut2的功能。
- Struts2中的拦截器详解
- struts2中的拦截器详解。
- Struts2拦截器详解
- Struts2拦截器详解
- Struts2拦截器详解
- struts2拦截器详解
- struts2 拦截器详解
- Struts2 拦截器 详解
- Struts2拦截器详解
- Struts2拦截器详解
- Struts2拦截器详解
- Struts2拦截器详解
- Struts2 拦截器详解
- struts2拦截器详解
- Struts2拦截器详解
- Struts2--拦截器详解
- Struts2拦截器详解
- struts2拦截器详解
- linux下UART的应用层编程及测试小程序
- linux内核调度算法(3)--多核系统的负载均衡
- Fiddler
- 关于dubbo+zookeeper在安置配置时遇到的一些问题
- 欧拉定理
- struts2中的拦截器详解。
- 初学Linux--信号
- linux下的僵尸进程处理SIGCHLD信号
- 整数划分问题
- 重新认识JS的this、作用域、闭包、对象
- java 实现冒泡排序
- 图片上下排列3px间隔的消除方法
- who are you-实验吧1
- Could not find goal 'create' in plugin org.apache.maven.p plugin:3.0.1 among available goals crawl