作用

拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。

拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提供了一种可以提取action中可重用的部分的方式。

拦截器栈(Interceptor Stack)类似于过滤器链。拦截器栈就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器栈的拦截器就会按其之前定义的顺序被调用。

也可以叫做拦截器链(Interceptor Stack),拦截器栈一词更明确的表名了连接器链的实现方式。

Struts2的拦截器和Filter类似。在执行Action的execute方法之前,Struts2会首先执行在struts.xml中引用的拦截器,在执行完所有引用的拦截器的intercept方法后,会执行Action的execute方法。

当请求到达Struts 2的ServletDispatcher时,Struts 2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表(list),最后一个一个地调用列表中的拦截器。

使用

  1. 自定义一个普通类。
  2. 继承 AbstractInterceptor 类,使该类变为拦截器类
  3. 重写类中的 intercept 方法
  4. 在 intercept 方法中实现业务逻辑。
  5. 如果调用  invocation.invoke() 方法,则是需要放过被拦截的方法。
  6. return 的字符串,会在struts.xml文件中找对应的<result></result> 结果集,跳转到相对应的页面(比如登录页面等)。
  7. 在struts.xml文件中添加拦截器的配置。
  8. 配置自定义拦截器
  9. 配置自定义拦截器栈
  10. 配置默认使用的拦截器栈

示例

  1. 自定义的拦截器类
package com.mr.interceptor;import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;/***  1:继承 AbstractInterceptor 类,使该类变为拦截器类*  2:重写类中的 intercept 方法 *  3:在 intercept 方法中实现业务逻辑。 *  4:如果调用 invocation.invoke() 方法,则是需要放过被拦截的方法 *  5:return 的字符串,会在struts.xml文件中找对应的<result></result> 结果集,*       跳转到相对应的页面(比如登录页面等)。*/
public class MyInterceptor extends AbstractInterceptor {@Overridepublic String intercept(ActionInvocation invocation) throws Exception {System.out.println("进入拦截器!");// 获取到actionNameString name = ServletActionContext.getContext().getName();if("loginAction".equals(name)) {return invocation.invoke();// 返回 invocation.invoke() 代表放行该方法}return "toLogin"; //返回字符串,会在struts.xml文件中找对应的<result></result> 结果集}}
  1. struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""http://struts.apache.org/dtds/struts-2.0.dtd">
<struts><!-- package提供了将多个Action组织为一个模块的方式 package的名字必须是唯一的 package可以扩展 当一个package扩展自 另一个package时该package会在本身配置的基础上加入扩展的package 的配置 父package必须在子package前配置 name:package名称 extends:继承的父package名称 abstract:设置package的属性为抽象的 抽象的package不能定义action 值true:false namespace:定义package命名空间 该命名空间影响到url的地址,例如此命名空间为/test那么访问是的地址为http://localhost:8080/struts2/test/XX.action --><package name="struts2" extends="struts-default"><!-- 拦截器 --><interceptors><!-- 自定义拦截器 --><interceptor name="myInterceptor" class="com.mr.interceptor.MyInterceptor"></interceptor><!-- 自定义拦截器栈 --><interceptor-stack name="myStack"><!-- 引入自定义拦截器 --><interceptor-ref name="myInterceptor"/><!-- 引入默认的拦截器栈注意:这个拦截器栈是必须引入的,因为struts2的默认工作需要使用该拦截器栈。--><interceptor-ref name="defaultStack"/></interceptor-stack></interceptors><!-- 默认使用的拦截器栈:只要是该<package> 标签中的 <action> 全部会被引用到  --><default-interceptor-ref name="myStack"></default-interceptor-ref><!-- 自定义全局的结果集该package中的所有返回值,都可以找该结果集--><global-results><result name="toLogin">/index.jsp</result></global-results><!-- Action配置一个Action可以被多次映射(只要action配置中的name不同)name:action名称 class: 对应的类的路径--><action name="hello" class="com.mr.action.HelloAction"><!-- 节点配置 name : result名称 和Action中返回的值相同 type : result类型 不写则选用superpackage的type struts-default.xml中的默认为dispatcher dispatcher :转发redirect :重定向--><result name="hello">/WEB-INF/view/hello.jsp</result></action></package>
</struts>

struts2拦截器的使用及作用相关推荐

  1. Struts2拦截器属性excludeMethods、includeMethods配置无效之解决方法

    参考:http://blog.csdn.net/coolcoffee168/article/details/7963251 在配置struts2 拦截器属性excludeMethods.include ...

  2. 从struts2拦截器到自定义拦截器

    http://www.cnblogs.com/withyou/p/3170440.html 拦截器可谓struts2的核心了,最基本的bean的注入就是通过默认的拦截器实现的,一般在struts2.x ...

  3. struts2 拦截器_Struts 2拦截器示例

    struts2 拦截器 Welcome to Struts 2 Interceptor Example. While working on Struts 2, most of the time you ...

  4. jsp/servlet过滤器和struts2拦截器的有什么区别

    jsp/servlet过滤器和struts2拦截器的有什么区别 542430725 | 浏览 3715 次  问题未开放回答  推荐于2016-11-14 01:43:29 最佳答案 过滤器,是在ja ...

  5. struts2拦截器理论知识

    软件设计中DRY规则,即不要写重复的代码,这样可以大大减轻后期维护的工作量!但是问题来了,重复的代码是不可避免的,比如在用户发送请求之前先判断用户是否登录,怎么办呢?于是就把这些重复代码提取出来,封装 ...

  6. struts2拦截器简介

    2019独角兽企业重金招聘Python工程师标准>>> 一.理解Struts2拦截器 1. Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦 ...

  7. Struts2拦截器浅析(二)

    Struts2内建拦截器 params拦截器 负责将请求参数设置为Action属性. staticParams拦截器 将配置文件中的action元素的子元素param参数设置为Action属性 ser ...

  8. 《struts2拦截器的使用》

    struts2 拦截器的使用 在struts2的工作原理博文中http://blog.csdn.net/u010412719/article/details/51193352,可以看到,拦截器是str ...

  9. struts2拦截器总结

    以下是struts2拦截器的内容: Struts2运转流程图: 10.jpg 其实拦截器Interceptors是struts2的最核心的内容,拦截器支撑起了struts2整个的运转流程. 要想理解拦 ...

  10. Struts2拦截器的使用

    如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈defaultStack,如下(这里我是引用了str ...

最新文章

  1. 筛指定区间的素数[区间偏移二次筛法]
  2. Linux管道指令(pipe)与shell 重定向的区别
  3. 今天发现了VISTA系统的一个BUG
  4. 【ASP.NET】js动态生成的控件,在后台获取不到怎么办?
  5. JavaEE Web开发之Servlet篇
  6. html5 页面 参数传递,详解html中页面跳转传递参数的问题
  7. [Leedcode][JAVA][第289题][生命游戏]
  8. GPS NMEA-0183协议常用数据格式及解析攻略
  9. 使用WebStorm将项目部署到IIS
  10. 什么是决定计算机内部寄存器,问题解答之 计算机中寄存器定义,分类
  11. Extjs3.3结合fckeditor2.6.6实现可视化编辑器(java版)
  12. 嵌入式系统——软件知识产权
  13. linux 系统启动级别,LINUX系统启动级别介绍与解释
  14. Android UI 控件
  15. mysql 如何避免间隙锁_mysql 间隙锁
  16. 通过jacob实现office在线预览
  17. 测试theano有无使用GPU
  18. manjaro pacman 使用方法总结
  19. 编辑为什么建议转投_为何投文章总被拒?听听期刊编辑的干货建议
  20. 计算机用户域怎么删除,如何删除域内非活动计算机账号?

热门文章

  1. 计算机考研复试题(近十万字)
  2. 图灵奖得主Bengio和LeCun称自监督学习可使AI达到人类智力水平
  3. java导出excel水印_java解决poi导出excel文字水印,导出excel不可操作问题
  4. Protues8.6仿真STM32出现错误-VDDA和VSSA的问题解决办法
  5. python sobel算子_图像边缘检测:Canny算子、Prewitt算子和sobel算子
  6. 【运维面试】面试官: 你们公司的上线流程是怎么样的?
  7. Linux网络编程:状态机
  8. SQLMAP命令详解
  9. 暴风电视TV 55X 3.0系统通过adb Root修改桌面,删除无用app
  10. 【JavaWEB】Redis基础