SpringMVC学习5 - 拦截器

HandlerExecutionChain是一个执行链,从HandlerMapping(处理器映射器)返回给DispatcherServlet(前端控制器),其中包含了Handler对象和拦截器Interceptor对象(数组),SpringMVC的拦截器接口定义了3个方法:
1、preHandler:调用Handler之前执行
2、postHandler:调用Handler之后执行
3、afterCompletion:视图渲染完成之后执行




拦截器的执行过程:



  拦截器是顺序执行,按图从左到右,先执行拦截器中的preHandler方法,一直执行到Handler处理业务逻辑,处理完Handler之后,按上图再倒叙的执行拦截器postHandler方法。



自定义拦截器的实现:

自定义拦截器:

package com.its.springmvc.interceptors;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

/**
 * 自定义拦截器
 */
public class MyHandlerInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        System.out.println("--------MyHandlerInterceptor的前置方法执行了----------");
        /**
         * true:放行通过 
         * false:拦截不通过
         */
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        System.out.println("--------MyHandlerInterceptor的后置方法执行了----------");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        System.out.println("--------MyHandlerInterceptor的视图渲染完成方法执行了----------");
    }
}


在springmvc配置文件中配置拦截器:



配置多个自定义拦截器:




拦截器总结:
1、拦截器的执行过程和Struts2的拦截器执行过程类似。
2、拦截器的前置方法是顺序执行,如果其中一个返回false则请求被拦截(不通过)。
3、拦截器的后置方法是倒序执行,后置方法只有在前置方法全部执行后才能被执行。
4、拦截器的完成方法是倒序执行,完成方法不仅是在最后执行,而且如果前置方法返回false,也会被执行(已经通过执行的拦截器的完成方法)。


SpringMVC拦截器执行顺序源码分析:
1、拦截器的前置方法是正序执行


2、拦截器的后置方法是倒序执行



3、拦截器的完成方法是倒序执行





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值