• struts.xml 配置详解之三 拦截器配置


    1.      拦截器( Interceptor )配置

    拦截器能在action 被调用之前和被调用之后执行一些“代码”。Struts2 框架的大部分核心功能都是通过拦截器来实现的,如防止重复提交、类型转换、对象封装、校验、文件上传、页面预装载等等,都是在拦截器的帮助下实现的。

    每一个拦截器都是独立装载的(pluggable) ,我们可以根据实际的需要为每一个action 配置它所需要的拦截器,例如,一个action 需要用来类型装换、文件上传,那么我们可以给它设置相应的两个拦截器。

    1.1 、拦截器配置

    代码清单 1 : struts.xml 片段

    < package name = "loginTest" extends = "struts-default">    

          < interceptors >

               <!-- 定义名为 timer 的拦截器 -->

               < interceptor name = "timer"

               class = "com.opensymphony.xwork2.interceptor.TimerInterceptor" />

               <!-- 定义名为 params 的拦截器 -->

               < interceptor name = "params"

    class = "com.opensymphony.xwork2.interceptor.ParametersInterceptor" />

          </ interceptors >

     

          < action name = "login" class = "com.coderdream.action.LoginAction">

               < result name = "success"> /msg/loginSuc.jsp </ result >

              <!-- 为 login action 指定拦截器引用,当 login action 被调用时,

                    timer 和 params 拦截器也会被调用 -->      

               < interceptor-ref name = "timer" />

               < interceptor-ref name = "params" />

          </ action >

    </ package >

    1.2 、拦截器栈配置

    拦截器栈注意点:

    1、 拦截器栈即引用其他拦截器,也可以引用其他拦截器栈;

    2、 引用其他拦截器栈必须是当前包中 的栈,或者是“父”包中 的栈,如某包继承在默认包,则可以引用默认包中的栈;

    代码清单 2 : struts.xml 片段

    < package name = "loginTest" extends = "struts-default">

          < interceptors >

               <!-- 定义名为 loginStack 的拦截器栈,拦截器栈可以包含其他拦截器栈,

               同时,该栈必须在本包或者  父  包中,如此处的 “struts-default” 包中 -->

               < interceptor-stack name = "loginStack">

                     < interceptor-ref name = "timer" />

                     < interceptor-ref name = "params" />

                     < interceptor-ref name = "basicStack" />

               </ interceptor-stack >

          </ interceptors >

     

          < action name = "login" class = "com.coderdream.action.LoginAction">

               < result name = "success"> /msg /loginSuc.jsp

              </ result >

               < result name = "input"> /msg /loginFail.jsp

              </ result >

               <!-- 为 login actin 指定拦截器引用,引用名既可以是拦截器名,

                    也可以是拦截器栈名 -->

               < interceptor-ref name = "loginStack" />

          </ action >

    </ package >

    1.3 、默认拦截器栈引用

    代码清单 3 : struts.xml 片段

    < package name = "loginTest" extends = "struts-default">

          < interceptors >

               <!-- 定义名为 loginStack 的拦截器栈 -->

               < interceptor-stack name = "loginStack">

                     < interceptor-ref name = "timer" />

                     < interceptor-ref name = "params" />

                     < interceptor-ref name = "basicStack" />

               </ interceptor-stack >

          </ interceptors >

         

          <!-- 定义默认拦截器栈的引用 -->

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

     

          <!-- 包中的所有 action 都将使用默认的拦截器栈引用 -->

          < action name = "login" class = "com.coderdream.action.LoginAction">

               < result name = "success"> /msg/loginSuc.jsp </ result >

          </ action >

          < action name = "user" class = "com.coderdream.action.UserAction">

               < result name = "success"> /msg/userSuc.jsp </ result >

          </ action >

    </ package >

    在struts 的默认配置文件的默认包中,定义了默认拦截器栈的引用:

    代码清单 4 : struts-default.xml 片段

    < package name = "struts-default" abstract = "true">

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

    </ package >

    所以,如果在action 中定义了其他的拦截器引用,那么这个action 将不再使用默认的拦截器引用。

    代码清单 5 : struts.xml 片段

    < package name = "loginTest" extends = "struts-default">    

          < action name = "login" class = "com.coderdream.action.LoginAction">

               < result name = "success"> /msg/loginSuc.jsp </ result >

              <!-- 为 login action 指定拦截器引用,默认的拦截器不再起作用 -->      

               < interceptor-ref name = "timer" />

          </ action >

    </ package >

  • 相关阅读:
    bug、兼容性、适配问题
    关于daterangepicker取消默认值的设置
    重构-改善既有代码设计
    iphoneX 适配
    汇编语言(2)程序表示
    汇编语言(1)基础理论
    css 边框颜色渐变的半圆
    横向时间轴(进度条)
    pdf中内嵌字体问题
    jabRef里引用的相邻同名作者变横线
  • 原文地址:https://www.cnblogs.com/yurujun/p/3183602.html
Copyright © 2020-2023  润新知