• 配置拦截器
    • 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. c#判断外部可执行程序是否已打开(若未打开则打开)

    #region 通过当前代码执行路径向上找到相关exe,并根据processes.Length判断是否已启动 private bool CheckAndOpenExe(string exeName) ...

  2. DNS 访问 Service - 每天5分钟玩转 Docker 容器技术(138)

    在 Cluster 中,除了可以通过 Cluster IP 访问 Service,Kubernetes 还提供了更为方便的 DNS 访问. kubeadm 部署时会默认安装 kube-dns 组件. ...

  3. js将汉字转为相应的拼音

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  4. java中的mvc和三层结构究竟是什么关系

    一件事,要知其然往往很简单,要知其所以然通常不是那么容易,就如最近重新巩固spring的过程中,就觉得还有许多问题其实并不是十分明了. 屈指一算,手头上做过的正式项目也有了四五六七个了,不管用的数据库 ...

  5. VC6安装错误——Error Launching acmboot.exe

    因项目需要,我需要安装Microsoft Visual C++ Professional Version 6 SP5.但是在安装时运行安装目录下的setup.exe,出现Error Launching ...

  6. eclipse中maven的run as打war包失败的问题

    场景一: 由于某些原因,有的时候需要暂时在断网的情况下,或者更标准的说,是在连不上公司的maven公有仓库的情况下打包. 很长一段时间,我打包都是在eclipse中用run as在线打包,直到前不久一 ...

  7. SAS︱操作语句(if、do、select、retain、array)、宏语言、统计量、运算符号

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- SAS中的一些常见的符号.运算符是一种符号①比 ...

  8. 如何使用DirectDraw直接显示RGB、YUV视频数据(播放yuv)

    #include "draw.h"void CTest100Dlg::OnButton1() { // TODO: Add your control notification ha ...

  9. PowerManager和PowerManager.WakeLock详解

    最近在做项目过程中,有一个LocalPush的需求,需要保持屏幕点亮一段时间,并且在这个时间里,启动Service来执行请求服务器的操作,拿到热点的数据.所以,就找了一下相关的android开源项目. ...

  10. 深度学习框架: Keras官方中文版文档正式发布

    今年 1 月 12 日,Keras 作者 François Chollet‏ 在推特上表示因为中文读者的广泛关注,他已经在 GitHub 上展开了一个 Keras 中文文档项目.而昨日,Françoi ...