拦截器的基本使用方法

来源:互联网 发布:阿托伐他汀 知乎 编辑:程序博客网 时间:2024/04/30 13:08

一、定义一个拦截器类

1、实现Interceptor接口(最原始的方法)

Public void destroy()

Public void init()在启动服务器的时候执行

Public String intercept(ActionInvocation invocation){

   Invocation.invoke();

}

2、在struts中定义拦截器

<interceptors>

    <interceptor name="" class="" > </interceptor>

</interceptors>

 

1、action使用拦截器

<interceptor-ref name="" ></interceptor-ref>

 

注意:一旦在action里定义了自己的拦截器,默认的拦截器就不再起作用,我们要在action最后加上默认的拦截器:defaultStack;拦截器配置里可以添加属性:

<interceptor name="" class="" > 

    <param name="test">test属性的值</param>

</interceptor>。获得该属性值的方法如下:

 

在拦截器类里定义一个方法

Private String test ; 

Public void setTest(){}

Public void getTest(){}

<interceptors>

<interceptor name="" class="test1" > 

    <param name="test"> zhuyingming </param>

</interceptor>

</interceptors>

解释:启动服务时先在test1类里并执行setTest方法把<param>里的值赋值给test ,再执行init方法

 

 

二、继承AbstractInterceptor

 

1、定义拦截器的可以直接继续AbstractInterceptor(该类实现了Interceptor接口,并提供了空实现的initdestroy的方法),只需要实现其抽象方法intercept即可,默认拦截excute方法,其他的与原始定义拦截器的使用方式一样。

 

 

 

三、方法拦截器

指定方法的拦截 MethodFilterInterceptor 抽象类 该类继承 AbstractInterceptor

 

实现doInterceptor方法

Public String doInterceptor (ActionInvocation invocation)

excludeMethods 不过率的方法

includeMethods 拦截的方法

两种都有的话 为includeMethods

在使用的时候指定

<interceptor-ref name="theInterceptor1">

<param name="excludeMethods">MethodName</param>

<param name="includeMethods">MethodName</param>

</interceptor-ref>

 

1)如果即没有指定includeMethods也没有指定excludeMethods的方法默认的时includeMethos方法

2)如果仅仅指定了includeMethods的方法,没有包含在includeMethods里的方法就不会被拦截。(与执行不执行没有关系)s

 

(3)拦截器执行 和 方法执行

<action name = " actionName" class="actionClass" method="methodName">

   <interceptor-ref name="">

          <param name="includeMethods">execute</param>

          <param name="excludeMethods">Myexecute</param>

   </interceptor-ref>

</action>

action执行的方法是MethodName 方法execute不执行

如果Myexecute方法在excludeMethods里面,则拦截器不执行,方法仍然会执行

原创粉丝点击