zoukankan      html  css  js  c++  java
  • 拦截器

    计应134  徐雪双

    1.拦截器

    拦截器(Interceptor)是Struts2框架的核心组成部分,Struts2拦截器是在访问某个Action或Action的某个方法被访问之前,进行拦截然后在之前或之后加入某些操作。拦截器是AOP(面向方面编程)在Struts2框架中的具体实现。

    拦截器是动态拦截Action调用的对象。它提供了一种机制,使开发者可以定义一个特定的功能模块,这个模块可在Action执行之前或之后运行,也可在一个Action执行之前阻止Action的执行。同时还提供了一种可以提取Action中可重用部分的方式。

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

    Action被拦截器包围,所有的用户请求都会被拦截器拦截,然后交给Action处理,处理结果以逻辑视图的方式返回给用户,而这个调用的执行流程是由Struts2的配置文件(struts.xml)实现的。

    2.拦截器的实现原理

    大部分时候,拦截器方法都是通过代理的方式来调用的。Struts 2的拦截器实现相对简单。当请求到达Struts 2的Action时,Struts 2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表(list),最后一个一个地调用列表中的拦截器。

    拦截器可以是Struts2框架定制的,也可以是用户自定义。

    3.拦截器的配置

    在struts2.xml文件中定义拦截器只需为拦截器指定一个拦截器名就可以了,拦截器<interceptor…/>元素定义,其格式为:

    <interceptor name=”拦截器名” class=”拦截器实现类”/>

    自定义拦截器栈的语法格式如下:

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

      <interceptor-inf name=”拦截器1”/>

      <interceptor-inf name=”拦截器2”/>

    ……

    </interceptor-stack>

    自定义拦截器必须事先com.opensymphony.xwork2.interceptor.Interceptor接口,该接口声明了3个方法:

    (1)void init()方法:在服务器启动时加载一次,并且只加载一次。

    (2)void destroy()方法:当拦截器销毁时执行

    (3)String intercept(ActionInvocation invocation) throes Exception;该方法是用户需要实现的拦截动作。该方法会返回一个字符串作为逻辑视图。

    Struts2中提供的抽象类是更简单的一种实现拦截器的方式:

    public abstract class AbstractInterceptor implements Interceptor;

    public abstract class MethodFilterInterceptor extends Abstracterceptor;

    其中AbstractInterceptor提供了init()和destroy()的空实现,使用时只需覆盖intercept()方法;而MethodFilterInterceptor则提供了includeMethods和excludeMethods两个属性,用来过滤执行该过滤器的action方法。可以通过param来加入或者排除过滤的方法。

  • 相关阅读:
    ArrayList removeRange方法分析
    LinkedHashMap源码分析(基于JDK1.6)
    LinkedList原码分析(基于JDK1.6)
    TreeMap源码分析——深入分析(基于JDK1.6)
    51NOD 2072 装箱问题 背包问题 01 背包 DP 动态规划
    51 NOD 1049 最大子段和 动态规划 模板 板子 DP
    51NOD 1006 最长公共子序列 Lcs 动态规划 DP 模板题 板子
    8月20日 训练日记
    CodeForces
    CodeForces
  • 原文地址:https://www.cnblogs.com/xu2shuang97664/p/4571816.html
Copyright © 2011-2022 走看看