• Struts2拦截器


    拦截器能够在动作运行之前或之后运行附加的动作。

    常见的应用有身份验证、日志记录等。


    默认拦截器定义在struts-default包中。当中有几个重要的拦截器:

    • params。它的作用是将请求中的数据映射到动作JavaBean中。
    • static-params。它的作用是将action配置中的參数传递给Action。它比ParametersInterceptor优先运行,因此能够用于实现參数的默认值。
    • workflow。作用是验证。它的作用是调用action中的validate等方法,假设验证失败,就停止运行。
    • validation。

      作用是验证。与workflow不同的是,它通过Annotation的方式进行验证,无须编写验证代码。

    • prepare。用来调用prepareInput、prepareUpdate等方法。

    • token。用于防止表单反复提交。它是一个表单的隐藏域,用<s:token/>实现。
    • servletConfig。将servlet中的session、request、application等传递给Action。

      Action须要实现SessionAware、RequestAware等接口才干接收到Servlet对象。


    对于每一个拦截器,每次请求intercept仅仅会被调用一次。intercept一般都会调用invoke方法,它的作用是运行下一个拦截器,假设没有下一个拦截器,那么会运行Action中的代码。

    以下是一个拦截器的样例。注意它在动作运行前和运行后都添加了额外的操作。

    public String intercept(ActionInvocation invoker) throws Exception {
        System.out.println("Before invoke");
        String result = invoker.invoke();
        System.out.println("After invoke");
    }
    


    所以拦截器的工作流程是这种:首先框架调用第一个拦截器。第一个拦截器通过invoke方法调用第二个拦截器,第二个拦截器也是通过同一个invoke方法调用第三个拦截器,这样一条非常长的调用链下来,直到拦截器调用完毕为止。最后运行Action中的代码。


    invoke方法,第一次调用的时候会运行第一个拦截器,第二次调用运行第二个拦截器……最后一次调用运行Action中的代码。

    它的返回值含义是视图名称。所以在拦截器中能够取代Action提前返回视图名称。


    拦截器的配置。在struts.xml文件里,拦截器的配置应该包含两个部分,声明拦截器、定义拦截器栈。

    声明拦截器的代码示比例如以下。一个包中仅仅能有一个interceptors标签。

    <interceptors>
      <interceptor name="params" class="ParametersInterceptor"/>
      <interceptor name="timer" class="TimerInterceptor"/>
    </interceptors>
    

    这样拦截器就声明好了。接下来定义拦截器栈。在引用拦截器的时候能够传入參数。

    <interceptor-stack name="defaultStack">
      <interceptor-ref name="params"/>
      <interceptor-ref name="workflow">
        <param name="execludeMethod>input,back,cancel</param>
      </interceptor-ref>
    </interceptor-stack>
    
    <default-interceptor-ref name="defaultStack"/>
    


    给动作指定拦截器。须要注意的是,仅仅要指定了不论什么一个拦截器。那么默认的拦截器就不会运行。

    <action name="MyAction" class="com.test.MyAction">
      <interceptor-ref name="timer"/>
      <interceptor-ref name="logger"/>
      <interceptor-ref name="defaultStack"/>
      <result>success.jsp</result>
    </action>
    







  • 相关阅读:
    天下第一 (spfa判断环)
    网络的可靠性 (最小生成树)
    星际之门(一) (快幂+最小生成树)
    吝啬的国度 建图+深搜
    表达式求值 第九届河南省省赛
    Apple Tree (树形结构变为线性结构+树状数组)
    士兵杀敌(五)(线段树??)
    动物统计加强版
    Supermarket
    生活的烦恼
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/7212303.html
Copyright © 2020-2023  润新知