Struts2学习笔记五 拦截器
2017-08-08 18:41
381 查看
拦截器,在AOP中用于在某个方法或字段被访问之前,进行拦截,然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。
Struts2中,拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个Action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提供了一种可以提取Action中可重用的部分的方式。
拦截器链:就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。
Struts2拦截器是可插拔的,拦截器是AOP的一种实现。Struts2拦截器栈就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,Struts2拦截器链中的拦截器就会按其之前定义的顺序被调用。
方式2:继承AbstractInterceptor类
方式3:继承MethodFilterInterceptor类
只有当自定义的拦截器需要打开系统资源时,才需要覆盖init()方法和distory()方法。所以继承会更方便。
要想让拦截器起作用,首先要对它进行配置。定义拦截器的语法格式如下:
比如:
View Code
Struts2 标签库详解
Struts2中,拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个Action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提供了一种可以提取Action中可重用的部分的方式。
拦截器链:就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。
拦截器的实现原理
大部分时候,拦截器方法都是通过代理的方式来调用的。Struts2的拦截器实现相对简单。当请求到达Struts2的ServletDispatcher时,Struts2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表,最后一个一个地调用列表中的拦截器。Struts2拦截器是可插拔的,拦截器是AOP的一种实现。Struts2拦截器栈就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,Struts2拦截器链中的拦截器就会按其之前定义的顺序被调用。
自定义拦截器
方式1:实现Interceptor接口//拦截器:第一种创建方式 //拦截器生命周期:随项目的启动而创建,随项目关闭而销毁 public class MyInterceptor implements Interceptor { @Override //初始化方法 public void init() { } @Override //拦截方法 public String intercept(ActionInvocation arg0) throws Exception { return null; } @Override //销毁方法 public void destroy() { } }
方式2:继承AbstractInterceptor类
//创建方式2: 继承AbstractInterceptor -> struts2的体贴 //帮我们空实现了init 和 destory方法. 我们如果不需要实现这两个方法,就可以只实现intercept方法 public class MyInterceptor2 extends AbstractInterceptor { @Override public String intercept(ActionInvocation arg0) throws Exception { return null; } }
方式3:继承MethodFilterInterceptor类
//继承:MethodFilterInterceptor 方法过滤拦截器 //功能: 定制拦截器拦截的方法. // 定制哪些方法需要拦截. // 定制哪些方法不需要拦截 public class MyInterceptor3 extends MethodFilterInterceptor{ @Override protected String doIntercept(ActionInvocation invocation) throws Exception { //前处理 System.out.println("MyInterceptor3 的前处理!"); //放行 String result = invocation.invoke(); //后处理 System.out.println("MyInterceptor3 的后处理!"); return result; //return "success";//不执行后续的拦截器以及Action,直接交给Result处理结果.进行页面跳转 } }
只有当自定义的拦截器需要打开系统资源时,才需要覆盖init()方法和distory()方法。所以继承会更方便。
拦截器的配置
步骤1:注册拦截器要想让拦截器起作用,首先要对它进行配置。定义拦截器的语法格式如下:
<interceptors> <!--name指定拦截器的名称,class指定拦截器实现类--> <interceptor name="interceptorName" class="interceptorClass"> <!--可选,name指定参数的名称 ;paramValue指定参数的值--> <param name="paramName">paramValue</param> </interceptor> </interceptors>
比如:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="inter" namespace="/" extends="struts-default" > <interceptors> <!-- 1.注册拦截器 --> <interceptor name="myInter3" class="cn.itcast.a_interceptor.MyInterceptor3"></interceptor> <!-- 2.注册拦截器栈 --> <interceptor-stack name="myStack"> <!-- 自定义拦截器引入(建议放在20个拦截器之前) --> <interceptor-ref name="myInter3"> <!-- 指定哪些方法不拦截 <param name="excludeMethods">add,delete</param> --> <!-- 指定哪些方法需要拦截 --> <param name="includeMethods">add,delete</param> </interceptor-ref> <!-- 引用默认的拦截器栈(20个) --> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors> <!-- 3.指定包中的默认拦截器栈 --> <default-interceptor-ref name="myStack"></default-interceptor-ref> <action name="Demo1Action_*" class="cn.itcast.a_interceptor.Demo1Action" method="{1}" > <!-- 为Action单独指定走哪个拦截器(栈) <interceptor-ref name="myStack"></interceptor-ref>--> <result name="success" type="dispatcher" >/index.jsp</result> </action> </package> </struts>
View Code
Struts2标签库
Struts2标签库整理【完整】Struts2 标签库详解
相关文章推荐
- Struts2学习笔记12:Struts2的拦截器【续】
- [原创]java WEB学习笔记70:Struts2 学习之路-- struts2拦截器源码分析,运行流程
- Struts2学习笔记之自定义拦截器
- [原创]java WEB学习笔记65:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) ModelDriven拦截器 paramter 拦截器
- struts2 拦截器学习笔记01
- struts2学习笔记-----拦截器
- Struts2拦截器Interceptor学习笔记
- Struts2学习笔记(5)--拦截器
- 【Struts2学习笔记-6--】Struts2之拦截器
- Struts2学习笔记04 之 拦截器
- struts2学习笔记(8)——拦截器原理
- struts2系列学习笔记(11)---------------拦截器
- [原创]java WEB学习笔记74:Struts2 学习之路--自定义拦截器,struts内建的拦截器
- struts2 学习笔记拦截器
- Struts2 学习笔记18 拦截器原理分析
- struts2学习笔记 -- day09 Struts2的拦截器
- struts2学习笔记之拦截器(Interceptor)
- struts2第十三讲学习笔记,拦截器interceptor的详细讲解
- struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo
- struts2学习笔记之拦截器(Interceptor)