Struts2学习笔记五 拦截器详解编程语言
拦截器,在AOP中用于在某个方法或字段被访问之前,进行拦截,然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。
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;//创建方式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" !--可选,name指定参数的名称 ;paramValue指定参数的值-- param name="paramName" paramValue /param /interceptor /interceptors比如:
步骤2:配置拦截器栈
可以把多个拦截器组成一个拦截器栈。在使用时,可以将栈内的多个拦截器当成一个整体来引用。当拦截器栈被附加到一个Action上时,在执行Action之前必须先执行拦截器栈中的每一个拦截器。比如:
上面的代码中,定义的拦截器栈是myStack,在myStack栈中,除了引用了自定义的拦截器之外,还引用了一个内置拦截器栈defaultStack,这个拦截器是必须要引入的。
步骤3:指定包中默认拦截器栈
如下配置,整个包中所有的Action都会走这个拦截器栈。
如果只想某个action走这个拦截器栈,可以如下指定:
定制拦截方法
全局结果集
最终配置如下:
?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" /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_*" method="{1}" !-- 为Action单独指定走哪个拦截器(栈) interceptor-ref name="myStack" /interceptor-ref -- result name="success" type="dispatcher" /index.jsp /result /action /package /strutsStruts2标签库
Struts2标签库整理【完整】
Struts2 标签库详解
7613.html
cjavaxml
相关文章
- Spring学习笔记(三)——Spring注解开发&spring与Junit整合测试
- Spring学习笔记(二十八)——springboot单元测试&JUnit5
- 内网学习笔记 | 28、黄金票据
- NLP鱼书学习笔记1-神经网络推理
- Java的学习笔记(15)对象 十
- 前端代码复用学习笔记:整洁架构与清晰架构
- mysql学习笔记 第七天详解数据库
- Hibernate学习笔记一 使用idea开发工具搭建框架详解编程语言
- Java基础学习笔记二十一 多线程详解编程语言
- Python面向对象高级编程——学习笔记详解编程语言
- Python高级特性——学习笔记详解编程语言
- Java学习笔记之三十一详解Java8 lambda表达式编程语言
- Java学习笔记之二十八深入了解Java8新特性详解编程语言
- Java学习笔记之二十二解析接口在Java继承中的用法及实例分析详解编程语言
- Java学习笔记之十三初探Java面向对象的过程及代码实现详解编程语言
- Java学习笔记之十Java中循环语句foreach使用总结及foreach写法失效的问题详解编程语言
- Java学习笔记之一java关键字及作用详解编程语言
- Python基础学习笔记详解编程语言
- bootstrap学习笔记(增加网格应用)详解编程语言
- Spring boot+vue前后端开发学习笔记2详解编程语言
- swoole学习笔记第一季详解编程语言
- SAP学习笔记(MM的库存管理)详解编程语言
- MySQL 学习笔记:如何在 SQL 命令行粘贴并运行 SQL 语句(mysql粘贴)
- MSSQL UNION学习笔记:掌握数据合并的技巧(mssqlunion)
- Javascript学习笔记7原型链的原理
- Erlang语法学习笔记:变量、原子、元组、列表、字符串
- jQuery学习笔记之jQuery+CSS3的浏览器兼容性
- ORACLE学习笔记-添加更新数据函数篇
- Cocos2d-x学习笔记之开发环境搭建