• 配置拦截器
    • 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. html input密码显示为*号

    <!DOCTYPE html> <html encoding="utf-8"> <head> <style> *{margin:0; ...

  2. HDMI中的AVmute是什么功能

    1. HDMI AVMute是HDMI TMDS数据岛周期General Control Packet中的一个标示. 2. AVMute字面意思是Audio Video Mute声音图像消隐,简单来说 ...

  3. HTML5中的checkbox

    HTML5中的checkbox 1.选中checkbox (1)<input type="checkbox" checked/> (2)<input type=& ...

  4. directX--关于CSource和CSourceStream (谁调用了fillbuffer)

    CSourceStream类,是CSource类的OutputPin[source.h/source.cpp]派生自CAMThread和CBaseOutputPinl         成员变量: CS ...

  5. python学习之字典(Dictionary)练习

    Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串.数字.元组等其他容器模型 字典中分为键值对 , key 类型需要时被哈希. value 类型可以是 字符串.数字.元组等其他容器模 ...

  6. Nslookup命令小结

    Nslookup命令小结 0.nslookup的定义 Nslookup是由微软发布用于对DNS服务器进行检测和排错的命令行工具.   两种模式: 一.非交互模式     nslookup –qt=类型 ...

  7. 浅谈MySQL的优化

    平时在开发中大多在写业务逻辑,很少关注于底层sql的执行效率,大多能交给batis的mapper做的就交给它去做. 然而这些天越来越发现,大家还是很愿意手写sql的,往往一段业务逻辑,可以用稍微复杂一 ...

  8. 用Java实现栈结构

    栈是一种先进后出的数据结构,出栈入栈都是操作的栈顶元素,下面是利用Java语言实现的一个简单的栈结构 class MyStack{ private int size;//栈大小 private Obj ...

  9. Stanford CS224N 第二课: word2vec详细介绍

    word2vec模型 word2vec 模型有两种: Continuous Skip-gram Model 和 Continuous Bag of Words Model (CBOW). 本文主要讲解 ...

  10. Python Cookbook(第3版)中文版:15.14 传递Unicode字符串给C函数库

    15.14 传递Unicode字符串给C函数库¶ 问题¶ 你要写一个扩展模块,需要将一个Python字符串传递给C的某个库函数,但是这个函数不知道该怎么处理Unicode. 解决方案¶ 这里我们需要考 ...