Struts2自定义拦截器

        >>提供了init()和destroy()方法的空实现

    <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,如果显示定义了拦截器还想使用默认的拦截器,则需要显示的定义这个系统拦截器。

    >>void init():初始化拦截器所需资源

    -   参数 excludeMethods:排除的方法,配置了这个参数的方法将不会被拦截器拦截

    -   参数 includeMethods:包含的方法,配置了个参数的方法将被拦截,该参数配置的优先级最高,如果都没有配置参数,则默认是所有方法都包含,都会被拦截


-   Struts2 提供的支持方法过滤的拦截器有:


    -   TokenInterceptor:防止表单重复提交的拦截器

    -   TokenSessionStroreInterceptor

    -   DefaultWorkflowInterceptor

    -   ValidationInterceptor


           

            >>实现拦截器功能

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

继承AbstractInterceptor类

  • 自定义拦截器

    • 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
      方法来对方法进行过滤,提供了二个参数来对方法进行过滤:

        >>推荐使用

  • 配置拦截器

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

    >>String intercept(ActionInvocation ai)   throws Exception

网站地图xml地图