struts拦截器的几种配置方式

1.通过package包配置后继承:

拦截器配置:

    <package name="struts-testlogin" extends="struts-default">
        <interceptors>
            <interceptor name="testloginInterceptor" class="test.web.filter.TestLoginItcp" />
            <interceptor-stack name="testInterceptor">
                <interceptor-ref name="defaultStack" />
                <interceptor-ref name="testloginInterceptor" />
            </interceptor-stack>
        </interceptors>
        <!-- 在这里配置默认的拦截器,可以是testloginInterceptor,也可以是testInterceptor
            如果是testloginInterceptor则只走testloginInterceptor的拦截
            如果是 testInterceptor则按照顺序走defaultStack、testloginInterceptor的拦截-->
        <default-interceptor-ref name="testloginInterceptor"></default-interceptor-ref>

    </package>

拦截器的使用:

    <package name="test" namespace="/Test" extends="struts-testlogin">
        <action name="getName" class="test.TestAction">
            <result>test.vm</result>
        </action>
        <action name="getLoginName" class="test.TestAction">
            <result>testLogin.vm</result>
            <!-- 使用此拦截器 -->  
            <interceptor-ref name="testloginInterceptor" />
        </action>
    </package>

在上述的action配置中,getName的action默认的拦截器就是struts-testlogin指定的默认拦截器。

getLoginName配置中,使用的拦截器是指定的testloginInterceptor拦截器。

他们的区别是,getName会按照顺序走defaultStack、testloginInterceptor的拦截,而getLoginName只走testloginInterceptor拦截器。

2.直接在package中配置

 <package name="test" namespace="/Test" extends="struts-default">
          <interceptors>
            <interceptor name="testloginInterceptor" class="test.web.filter.TestLoginItcp" />
            <interceptor-stack name="testInterceptor">
                <interceptor-ref name="defaultStack" />
                <interceptor-ref name="testloginInterceptor" />
            </interceptor-stack>
        </interceptors>
        <action name="getName" class="test.TestAction">
            <result>test.vm</result>
        </action>
        <action name="getLoginName" class="test.TestAction">
            <result>testLogin.vm</result>
            <!-- 使用此拦截器 -->  
            <interceptor-ref name="testloginInterceptor" />
        </action>
    </package>

在上述的action配置中,getName的action是没有指定拦截器,则不进行拦截。

getLoginName指定的拦截器就是testloginInterceptor拦截器。

如果在package中指定默认拦截器则getName的action会使用默认的拦截器,而getLoginName的拦截器不会变。

指定默认拦截器的配置:

<package name="test" namespace="/Test" extends="struts-default">
          <interceptors>
            <interceptor name="testloginInterceptor" class="test.web.filter.TestLoginItcp" />
            <interceptor-stack name="testInterceptor">
                <interceptor-ref name="defaultStack" />
                <interceptor-ref name="testloginInterceptor" />
            </interceptor-stack>
        </interceptors>

        <!-- 指定默认拦截器 -->
        <default-interceptor-ref name="testInterceptor">
        <action name="getName" class="test.TestAction">
            <result>test.vm</result>
        </action>
        <action name="getLoginName" class="test.TestAction">
            <result>testLogin.vm</result>
            <!-- 使用此拦截器 -->  
            <interceptor-ref name="testloginInterceptor" />
        </action>
    </package>

3.配置多个拦截器

 <package name="test" namespace="/Test" extends="struts-default">
          <interceptors>
            <interceptor name="testloginInterceptor" class="test.web.filter.TestLoginItcp" />
             <interceptor name="checkloginInterceptor" class="test.web.filter.CheckLoginItcp" />
            <interceptor-stack name="testInterceptor">
                <interceptor-ref name="defaultStack" />
                <interceptor-ref name="testloginInterceptor" />
                <interceptor-ref name="checkloginInterceptor" />
            </interceptor-stack>
        </interceptors>
        <!-- 指定默认拦截器 -->
        <default-interceptor-ref name="testInterceptor">
        <action name="getName" class="test.TestAction">
            <result>test.vm</result>
        </action>
        <action name="getLoginName" class="test.TestAction">
            <result>testLogin.vm</result>
            <!-- 使用此拦截器 -->  
            <interceptor-ref name="testloginInterceptor" />
        </action>
    </package>

在上述配置中,默认的拦截器会顺序过defaultStack,testloginInterceptor,checkloginInterceptor三个拦截器的拦截。

4.使用拦截器

拦截器可以在package中制定,也可以在action中制定,指定的方式是:<interceptor-ref name="testloginInterceptor" />
他们的唯一区别是拦截器的工作范围不同,package会影响到其下面的所有action,而action只对本action起作用,不会影响到别的。

当这两者都存在时,以最小粒度的配置为准,即action的配置会覆盖package的配置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值