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来加入或者排除过滤的方法。

  • 相关阅读:
    解决ListView异步加载数据之后不能点击的问题
    android点击实现图片放大缩小 java技术博客
    关于 数据文件自增长 的一点理解
    RAC 实例不能启动 ORA1589 signalled during ALTER DATABASE OPEN
    Linux 超级用户的权利
    RAC 实例 迁移到 单实例 使用导出导入
    Shell 基本语法
    Linux 开机引导与关机过程
    RAC 实例不能启动 ORA1589 signalled during ALTER DATABASE OPEN
    Oracle RAC + Data Guard 环境搭建
  • 原文地址:https://www.cnblogs.com/xu2shuang97664/p/4571816.html
Copyright © 2011-2022 走看看