zoukankan      html  css  js  c++  java
  • struts2拦截器

    引自http://emavaj.blog.163.com/blog/static/133280557201011945440749/

    Struts2里面想定义个拦截器是非常简单的

    只需要集成Struts2的抽象类

    AbstractInterceptor

    然后重写intercept方法,就可以完成拦截器

    最后在struts.xml中配置上:

    <interceptors>
       <interceptor name="interceptorName" class="类路径"/>

    </interceptors>

    这样就可以在action中使用interceptor-ref来引用拦截器了

    在此过程中,有一些问题是特别需要注意的

    1) 拦截器的工作原理

    invocation.invoke();

    这一句就是拦截器的核心,调用下一个拦截器,最后执行Action 中的方法

    invoke返回的String就是Action的结果

    如果:

    public String intercept(ActionInvocation invocation) throws Exception {

      //....

      return "login";

    }

    请求处理后返回命名为login的result. 拦截器中可以动态改变Action对应的result的值

    拦截器不可以为http请求对应的对象添加属性

    invocation.getInvocationContext()(从而拿到request、session)从而放置额外的属性.

    2) Action的前后拦截

    如果能理解拦截器的意义,那么这个肯定是理解的

    -------------- Action执行前拦截:

    // ....你的逻辑

    String re = invocation.invoke();

    return re;

    -------------- Action执行后拦截:

    String re = invocation.invoke();

    //....你的逻辑  (其中re的值可能被改变,从而导致result的走向不同)

    return re;

    3) 默认拦截器栈

    许多个拦截器的一个组就是一个拦截器栈

    Struts2的默认拦截器栈(defaultStack),可以说就是Struts2 大部分默认功能的实现代码

    (参数获取,流处理,结果集)

    如果你定义了一个自己的拦截器

    之后你让你的Action使用到这个拦截器,而且仅使用了这个拦截器(也就是没有使用Struts2默认拦截器栈)

    那么你的Action就丢失了所有Struts提供的默认功能(包括参数传递,流处理等等)

    所以你选要的是,使用回Struts2的默认拦截栈,再加上你的拦截器

    方法1,把你的拦截器并入默认拦截器中:

    <interceptors>
       <interceptor name="新拦截器" class="com.xxxxxxxx"/>
       <interceptor-stack name="新默认拦截器(名字随便)">
        <interceptor-ref name="defaultStack"/>
        <interceptor-ref name="新拦截器"/>
       </interceptor-stack>
      </interceptors>
      <default-interceptor-ref name="新默认拦截器"/>

    方法2,你的Action同时使用多个拦截器(如果顺序有关系,注意顺序)

    ...略

  • 相关阅读:
    51 Nod 1086 多重背包问题(单调队列优化)
    51 Nod 1086 多重背包问题(二进制优化)
    51 Nod 1085 01背包问题
    poj 2559 Largest Rectangle(单调栈)
    51 Nod 1089 最长回文子串(Manacher算法)
    51 Nod N的阶乘的长度 (斯特林近似)
    51 Nod 1134 最长递增子序列(经典问题回顾)
    51 Nod 1020 逆序排列
    PCA-主成分分析(Principal components analysis)
    Python中cPickle
  • 原文地址:https://www.cnblogs.com/highriver/p/2067268.html
Copyright © 2011-2022 走看看