zoukankan      html  css  js  c++  java
  • SpringMVC多拦截器的执行

    如果有多个拦截器,执行的顺序是在SpringMVC的配置文件里的前后顺序。

    <mvc:interceptors>
      <bean class="com.neuedu.interceptor.Inteceptor1"></bean>
      <mvc:interceptor>
        <mvc:mapping path="/test"/>
        <bean class="com.neuedu.interceptor.Inteceptor2"></bean>
      </mvc:interceptor>
    </mvc:interceptors>

    第一个拦截器在前面就先执行第一个拦截器的preHandle方法。

    第一个拦截器

    package com.neuedu.interceptor;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    public class Inteceptor1 implements HandlerInterceptor {
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
                throws Exception {
            // TODO Auto-generated method stub
            System.out.println("first-preHandle");
            return true;
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                ModelAndView modelAndView) throws Exception {
            System.out.println("first-postHandle");
            
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
                throws Exception {
            System.out.println("first-afterCompletion");
            
        }
    
    }

    这样第二个拦截器:

    package com.neuedu.interceptor;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    public class Inteceptor2 implements HandlerInterceptor {
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
                throws Exception {
            // TODO Auto-generated method stub
            System.out.println("second-preHandle");
            return false;
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                ModelAndView modelAndView) throws Exception {
            System.out.println("second-postHandle");
            
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
                throws Exception {
            System.out.println("second-afterCompletion");
            
        }
    
    }

    请求的方法:

    @Controller
    public class BController {
        @RequestMapping(value="/test")
        public void test(){
    //        
            System.out.println("目标方法执行");
            
            
        }
    }

    执行的结果:

    first-preHandle
    second-preHandle
    目标方法执行
    second-postHandle
    first-postHandle
    second-afterCompletion
    first-afterCompletion

    结果说明多拦截器的顺序是:

     先执行第一拦截器的preHandle

    然后第二个拦截器的preHandle

    目标方法的方法

    第二个拦截器的postHandle

    第一个拦截器的postHandle

    第二个拦截器的afterCompletion

    第一个拦截器的afterCompletion

  • 相关阅读:
    推荐一个博客,或许给技术流的自己一些启示
    Boost多线程-替换MFC线程
    Python:Matplotlib 画曲线和柱状图(Code)
    AI:机器人与关键技术--总是被科普
    OnLineML一:关于Jubatus 的简介...
    使用PCL::GPU::遇到问题
    dll文件:关于MFC程序不能定位输入点
    实践:使用FLANN.LSH进行检索
    模式识别两种方法:知识和数据
    几个方便编程的C++特性
  • 原文地址:https://www.cnblogs.com/xuesheng/p/7425874.html
Copyright © 2011-2022 走看看