多拦截器的运行流程

springmvc.xml

    <!-- 测试拦截器 -->
    <mvc:interceptors>
        <!--配置某个拦截器;默认是拦截所有请求的;  -->
        <bean class="com.atguigu.controller.MyFirstInterceptor"></bean>
        <!-- 配置某个拦截器更详细的信息 -->
        <mvc:interceptor>
            <!-- 只来拦截test01请求 -->
            <mvc:mapping path="/test01"/>
            <bean class="com.atguigu.controller.MySecondInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

MyFirstInterceptor.java

package com.atguigu.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

/**
 * 1、实现HandlerInterceptor接口
 * 2、在SpringMVC配置文件中注册这个拦截器的工作;
 *      配置这个拦截器来拦截哪些请求的目标方法;
 * 
 *
 */
public class MyFirstInterceptor implements HandlerInterceptor {

    /**
     * 目标方法运行之前运行
     */
    @Override
    public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler) throws Exception {
        System.out.println("MyFirstInterceptor...preHandle...");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        System.out.println("MyFirstInterceptor...postHandle...");
    }

    @Override
    public void afterCompletion(HttpServletRequest request,
            HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        System.out.println("MyFirstInterceptor...afterCompletion");
    }

}

MySecondInterceptor.java

package com.atguigu.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

/**
 * 1、实现HandlerInterceptor接口
 * 2、在SpringMVC配置文件中注册这个拦截器的工作;
 *      配置这个拦截器来拦截哪些请求的目标方法;
 * 
 *
 */
public class MyFirstInterceptor implements HandlerInterceptor {

    /**
     * 目标方法运行之前运行
     */
    @Override
    public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler) throws Exception {
        System.out.println("MyFirstInterceptor...preHandle...");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        System.out.println("MyFirstInterceptor...postHandle...");
    }

    @Override
    public void afterCompletion(HttpServletRequest request,
            HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        System.out.println("MyFirstInterceptor...afterCompletion");
    }

}

InterceptorTestController.java

package com.atguigu.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class InterceptorTestController {
    
    @RequestMapping("/test01")
    public String test01(){
        System.out.println("test01....");
        //int i =10/0;
        return "success";
    }

}

2、多个拦截器
正常流程:

MyFirstInterceptor...preHandle...
MySecondInterceptor...preHandle...
test01....
MySecondInterceptor...postHandle...
MyFirstInterceptor...postHandle...
success.jsp....
MySecondInterceptor...afterCompletion...
MyFirstInterceptor...afterCompletion

异常流程:
1、不放行;
1)、哪一块不放行从此以后都没有;
MySecondInterceptor不放行;但是他前面已经放行了的拦截器的afterCompletion总会执行;

MyFirstInterceptor...preHandle...
MySecondInterceptor...preHandle...
MyFirstInterceptor...afterCompletion

流程:filter的流程;
拦截器的preHandle:是按照顺序执行
拦截器的postHandle:是按照逆序执行
拦截器的afterCompletion:是按照逆序执行;
已经放行了的拦截器的afterCompletion总会执行;

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容