struts2的Interceptor配置说明(二)

默认的拦截器栈能够满足大部分应用的需求。大部分应用没有必要添加拦截器或者改变既存的拦截器栈


很多action有共通的关注点。有些action需要对input进行check,有些action可能需要对文件上传进行预处理,有些action需要对多次提交进行保护,
很多action在页面显示之前,需要下拉列表和其他控件预填充。


struts2通过使用拦截器使得共享action关注点的解决方案变得容易。当url请求 一个已经map到action的资源时,框架会调用action类,但是在action被执行之前
调用会被另一个类拦截。Action执行之后,调用会被再次拦截。拦截类我们称之为拦截器


拦截器的理解




在一些情况下,因为多次提交或者验证失败,所以一个拦截器可能需要保持一个action不断执行。拦截器也能够在action执行之前,改变action的状态


自定义struts.xml
<package name="default" extends="struts-default">
   <interceptors>
        <interceptor name="timer" class=".."/>
        <interceptor name="logger" class=".."/>
        <interceptor-stack name="myStack">
           <interceptor-ref name="timer"/>
           <interceptor-ref name="logger"/>
        </interceptor-stack>
    </interceptors>


<action name="login"
     class="tutuorial.Login">
         <interceptor-ref name="myStack"/>
         <result name="input">login.jsp</result>
         <result name="success"
             type="redirectAction">/secure/home</result>
</action>
</package>


方法过滤
MethodFilterInterceptor是一个抽象拦截器,可以作为一个自定义具体拦截器的基类。而这个具体拦截器可以根据列出的action的方法名字进行有选择的拦截执行。
默认情况下会拦截action中所有的方法
过滤器包含了两种参数:
excludeMethods:指定的action方法都不会被拦截
includeMethods:指定的action方法都会拦截
说明:如果一个方法名字在两个地方都存在,则会被认为是include的方法
扩展了此能力的拦截器有:
TokenInterceptor
TokenSessionStoreInterceptor
DefaultWorkflowInterceptor
ValidationInterceptor


拦截器参数重载(主要是对默认struts配置文件里面的配置进行重载)
拦截器的参数可以用一下几种方式重载

方法一:
<action name="myAction" class="myActionClass">
    <interceptor-ref name="exception"/>
    <interceptor-ref name="alias"/>
    <interceptor-ref name="params"/>
    <interceptor-ref name="servletConfig"/>
    <interceptor-ref name="prepare"/>
    <interceptor-ref name="i18n"/>
    <interceptor-ref name="chain"/>
    <interceptor-ref name="modelDriven"/>
    <interceptor-ref name="fileUpload"/>
    <interceptor-ref name="staticParams"/>
    <interceptor-ref name="params"/>
    <interceptor-ref name="conversionError"/>
    <interceptor-ref name="validation">
        <param name=" excludeMethods">myValidationExcudeMethod</param>
    </interceptor-ref>
    <interceptor-ref name="workflow">
        <param name=" excludeMethods">myWorkflowExcludeMethod</param>
    </interceptor-ref>
</action>


方法二:
<action name="myAction" class="myActionClass">
    <interceptor-ref name="defaultStack">
        <param name=" validation.excludeMethods">myValidationExcludeMethod</param>
        <param name=" workflow.excludeMethods">myWorkflowExcludeMethod</param>
    </interceptor-ref>
</action>


方法三:
<interceptors>
    <interceptor-stack name="parentStack">
        <interceptor-ref name="defaultStack">
            <param name="params.excludeParams">token</param>
        </interceptor-ref>
    </interceptor-stack>
</interceptors>

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

拦截器参数重载(主要是对拦截器本身属性的重载)
<interceptor-stack name="parentStack">
  <interceptor-ref name="postPrepareParameterFilter">
    <param name="defaultBlock">true</param>
  </interceptor-ref>
</interceptor-stack>


<package name="child2" namespace="/child" extends="parentPackage">
  <action name="list" class="SomeAction">
    <interceptor-ref name="parentStack">
      <param name="postPrepareParameterFilter.allowed">myObject.name</param>
    </interceptor-ref>
  </action>
</package>


拦截器实现了com.opensymphony.xwork2.interceptor.PreResultListener,会在action执行之后执行,在result之前执行
thisWillRunFirstInterceptor
  thisWillRunNextInterceptor
    followedByThisInterceptor
      thisWillRunLastInterceptor
        MyAction1
        MyAction2 (chain)
        MyPreResultListener
        MyResult (result)
      thisWillRunLastInterceptor
    followedByThisInterceptor
  thisWillRunNextInterceptor
thisWillRunFirstInterceptor


翻译自http://struts.apache.org/docs/interceptors.html
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值