Struts2的拦截器笔记--excludeMethods

先是正常的拦截器配置(struts.xml中配置):

<package name="GumiAction" extends="struts-default">
    <!-- 声明拦截器、注册拦截器-->
    <interceptors>
        <interceptor name="TestInterceptor" class="com.Vocaloid.Kaito.Interceptor.TestInterceptor"></interceptor>
        <interceptor name="Test2Interceptor" class="com.Vocaloid.Kaito.Interceptor.Test2Interceptor"></interceptor>
        <interceptor name="Test3Interceptor" class="com.Vocaloid.Kaito.Interceptor.Test3Interceptor"></interceptor>
    </interceptors>
    <action name="i18nAction" class="com.Vocaloid.Kaito.Action.I18nAction" method="i18nLogin">
        <interceptor-ref name="Test3Interceptor">
            <param name="excludeMethods">i18nLogin</param>
        </interceptor-ref>
        <interceptor-ref name="Test2Interceptor">

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

        </interceptor-ref>
        <interceptor-ref name="defaultStack"></interceptor-ref>
        <result name="success">/Jsp/i18nSuccess.jsp</result>
    </action>

</package>

为了追踪方法调用顺序,我在每个可能被调用的方法前加了信息输出。此时的输出信息为:


可见,excludeMethods正常工作,排除了Test3Interceptor拦截器。

下面问题来了,如果我要让excludeMethods起作用,按设想,应该是我写在哪个拦截器上,在调用I18nAction方法时就排除哪个拦截器。可当我把excludeMethods写到Test2Interceptor或者TestInterceptor时,智能强大的idea直接给我报了红色的错误:



虽说xml文件有时即使报错也可以启动项目并正确执行,不过这一次好像没那么简单:


尽管Tomcat启动了,不过在启动时就报错了。

那测试一下实际效果:


很遗憾,Test2Interceptor并没有被排除成功。同样的TestInterceptor也没能生效。

一开始以为是拦截器声明的顺序问题,不过即使改了声明顺序或者在action中的使用顺序,仍然无法起作用。那么问题出在哪里呢?

经过反复尝试以后发现,原来问题出在拦截器的定义上。

自定义的拦截器类有三种实现方式:

1、实现接口Interceptor (implements Interceptor);

2、继承抽象类AbstractInterceptor (extends AbstractInterceptor );

3、继承MethodFilterInterceptor (extends MethodFilterInterceptor);

excludeMethods这个参数,只能用于继承MethodFilterInterceptor 类的拦截器上。如果用于其他两种定义方式定义的拦截器,则在框架启动时会报ognl.NoSuchPropertyException的异常。从名字就可以看出,这两类拦截器上根本没有excludeMethods这样的参数(NoSuchProperty)。


感慨一下idea果然还是很强大啊,用myeclipse和eclipse的同学,完全看不到这样的红色错误提示啊(滑稽)。



至于这三种类定义的拦截器有什么区别嘛。。。。别问我我也不知道- -反正现在用Struts2的貌似也不多了,大概了解一下,为以后学新框架做铺垫就好wwwwww

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值