• 配置拦截器
    • Struts.xml 配置文件中,使用<interceptor…/>来定义拦截器,有属性 name 表示拦截器的名称,class 表示拦截器的具体首先类,可以使用<param…/>子元素来配置拦截器的参数,配置示例:

      <package name="包名称" extends="抽象包名称">

      <interceptors>

      <interceptor name="拦截器名称" class="拦截器实现类">

      <param name="参数名称">参数值</param>

      </interceptor>

      </interceptors>

      </package>

    • 可以把多个拦截器配置为一个拦截器栈,使用<interceptor-stack…/>来配置拦截器栈,归属于<interceptors…>元素下,有属性name表示拦截器栈的名称,使用<interceptor-ref…/>来引用拦截器,可以使用<param…/>子元素来配置拦截器的参数,配置示例:

      <interceptor-stack name="拦截器栈名称">

      <interceptor-ref name="拦截器名称">

      <param name="参数名称">参数值</param>

      </interceptor-ref>

      </interceptor-stack>

      注意:完全可以把拦截器栈当成一个更大的拦截器来处理,因此拦截器栈中,可以引用另一个拦截器栈;如果在<interceptor-ref…/>定义了拦截器参数,则会替换在<interceptor…/>中定义的参数值。

    • Action 要使用拦截器和拦截器栈,可以在<Action../>中增加<interceptor-ref…/>子元素,其配置格式和拦截器栈的配置一样,如果要覆盖拦截器栈的某个拦截器的参数值,则可以使用[拦截器名称].[参数名称]这种形式来传入参数。
    • 可以在包中使用<default-interceptor-ref…/>来定义默认拦截器,如果 Action 没有定义拦截器,则默认拦截器会生效,如果Action显示的定义了拦截器,则包的默认拦截器会不生效,系统默认的拦截器栈名称是 defaultStack,如果显示定义了拦截器还想使用默认的拦截器,则需要显示的定义这个系统拦截器。
  • 自定义拦截器
    • Struts2 中需要开发自己的拦截器类,则需要实现 Interceptor 接口,Struts2 还提供了 AbstractInterceptor 抽象类继承Interceptor接口,实现了空白的 init 和 destroy 方法,Interceptor 接口的声明如下:

      public interface Interceptor extends Serializable {

      void init();

      void destroy();

      String intercept(ActionInvocation invocation) throws Exception;

      }

      • 方法 init:拦截器实例化后,在执行拦截前系统将调用该方法,这个方法只执行一次
      • 方法 destroy:拦截器销毁前,系统将调用该方法,这个方法只执行一次
      • 方法 intercept:该方法是用户需要实现的拦截动作,可以直接返回一个字符串,系统将会跳转到逻辑视图对应的物理视图资源,不会调用被拦截的Action;其参数 ActionInvocation 包含了被拦截的 Action 的引用,可以通过调用该参数 invoke方法,将控制权给下一个拦截器,如果不存在拦截器则会调用被拦截的 Action
  • 方法过滤拦截器
    • 在默认情况下,拦截器会拦截 Action 的所有方法,如果只需要拦截指定方法,此时就需要使用struts2拦截器的方法过滤特性,struts2 提供了一个 MethodFilterInterceptor 类,该类继承于 AbstractInterceptor类,需要重写 doIntercept 方法来对方法进行过滤,提供了二个参数来对方法进行过滤:
      • 参数 excludeMethods:排除的方法,配置了这个参数的方法将不会被拦截器拦截
      • 参数 includeMethods:包含的方法,配置了个参数的方法将被拦截,该参数配置的优先级最高,如果都没有配置参数,则默认是所有方法都包含,都会被拦截
    • Struts2 提供的支持方法过滤的拦截器有:
      • TokenInterceptor:防止表单重复提交的拦截器
      • TokenSessionStroreInterceptor
      • DefaultWorkflowInterceptor
      • ValidationInterceptor

         
         

  • 拦截器执行顺序,在Action的控制方法执行之前,位于拦截器链前面的拦截器将先发送作用;在Action的控制方法执行之后,位于拦截器链前面的拦截器将后发送作用。

     
     

笔记:Struts2 拦截器的更多相关文章

  1. Struts2学习笔记五 拦截器

    拦截器,在AOP中用于在某个方法或字段被访问之前,进行拦截,然后在之前或之后加入某些操作.拦截是AOP的一种实现策略. Struts2中,拦截器是动态拦截Action调用的对象.它提供了一种机制可以使 ...

  2. Struts2 拦截器配置以及实现

    @(Java ThirdParty)[Struts|Interceptor] Struts2 拦截器配置以及实现 Struts2的拦截器应用于Action,可以在执行Action的方法之前,之后或者两 ...

  3. struts2 拦截器

    拦截器:对Action的访问.可以拦截到Action中某个方法.与过滤器不同,过滤器过滤的是请求.过滤JSP.html.但是拦截器不能拦截jsp.html的访问. Struts2 拦截器在访问某个 A ...

  4. Struts2拦截器的使用 (详解)

    Struts2拦截器的使用 (详解) 如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈default ...

  5. struts2拦截器

    一.自定义拦截器 struts2拦截器类似于servlet过滤器 首先定义一个拦截器这个拦截器实现了Interceptor接口: package cn.orlion.interceptor; impo ...

  6. Struts2拦截器模拟

    前言: 接触Struts2已经有一段时间,Student核心内容就是通过拦截器对接Action,实现View层的控制跳转.本文根据自身理解对Struts2进行一个Java实例的模拟,方便大家理解! 示 ...

  7. Struts2拦截器初涉

    Struts2拦截器初涉 正在练习struts,本例是从一个pdf上摘抄的例子,那本pdf都不知道叫什么名字,不过感觉很适合初学者. 在这里要实现一个简单的拦截器"GreetingInter ...

  8. 浅谈Struts2拦截器的原理与实现

    拦截器与过滤器           拦截器是对调用的Action起作用,它提供了一种机制可以使开发者定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行.同时也是提供了 ...

  9. 基于SSH2框架Struts2拦截器的登录验证实现(转)

        大象在这里假设你已经弄清楚了Struts2拦截器的基本概念,可以进入实际运用了.那么我们在之前的基础上只需要做下小小的改变,就可以使用Struts2的拦截器机制实现登录的验证.     修改数 ...

随机推荐

  1. windows与虚拟机linux能ping通设置

    作为以后参考所用. 首先,介绍如何在VMWare中设置linux的网络.一般网络选项有Bridged,NAT,host-only几种,本次以host-only作详细说明,如下图: 在选择host-on ...

  2. Caused by: org.h2.jdbc.JdbcSQLException: Table "T_STUDENT_INFO" not found; SQL statement

    1.错误描述 org.hibernate.exception.SQLGrammarException: error executing work at org.hibernate.exception. ...

  3. 芝麻HTTP:TXT文本存储

    将数据保存到TXT文本的操作非常简单,而且TXT文本几乎兼容任何平台,但是这有个缺点,那就是不利于检索.所以如果对检索和数据结构要求不高,追求方便第一的话,可以采用TXT文本存储.本节中,我们就来看下 ...

  4. RHEL部署ipa红帽身份验证

    1.先下载必须包 yum install -y ipa-server bind bind-dyndb-ldap 2.初始化ipa基本配置 ipa-server-install * Configure ...

  5. ThinkCMF的跳转303 404等页面的方法

    1. 控制器方法: return $this->redirect('http://www.thinkcmf.cmf',[],301); 或者助手函数: return redirect('http ...

  6. 实现一个简单的订阅与发布模式的代码块,和redux

    /** * Created by Mrzou on 2018/3/11. */ //实现简单的订阅与发布模式的代码块export function pattern() { let currentLis ...

  7. 第十篇:Map/Reduce 工作机制分析 - 数据的流向分析

    前言 在MapReduce程序中,待处理的数据最开始是放在HDFS上的,这点无异议. 接下来,数据被会被送往一个个Map节点中去,这也无异议. 下面问题来了:数据在被Map节点处理完后,再何去何从呢? ...

  8. [BZOJ1707] [Usaco2007 Nov] tanning分配防晒霜 (贪心)

    Description 奶牛们计划着去海滩上享受日光浴.为了避免皮肤被阳光灼伤,所有C(1 <= C <= 2500)头奶牛必须在出门之前在身上抹防晒霜.第i头奶牛适合的最小和最 大的SP ...

  9. React-Native安装使用

    先附上React-Native官方文档中文版:http://wiki.jikexueyuan.com/project/react-native/getting-started.html 好,接下来我们 ...

  10. Redis进阶实践之十七 Redis协议的规范

    一.介绍            Redis客户端使用称为RESP(Redis的序列化协议)的协议与Redis服务器进行通信. 虽然协议是专门为Redis设计的,但它可以用于其他客户端 - 服务器软件项 ...