zoukankan      html  css  js  c++  java
  • springMVC 拦截器源码解析

    直接上源码

    //doDispatch方法  
    //1、处理器拦截器的预处理(正序执行)  
    HandlerInterceptor[] interceptors = mappedHandler.getInterceptors();  
    if (interceptors != null) {  
        for (int i = 0; i < interceptors.length; i++) {  
        HandlerInterceptor interceptor = interceptors[i];  
            if (!interceptor.preHandle(processedRequest, response, mappedHandler.getHandler())) {  
                //1.1、失败时触发afterCompletion的调用  
                triggerAfterCompletion(mappedHandler, interceptorIndex, processedRequest, response, null);  
                return;  
            }  
            interceptorIndex = i;//1.2、记录当前预处理成功的索引  
    }  
    }  
    //2、处理器适配器调用我们的处理器  
    mv = ha.handle(processedRequest, response, mappedHandler.getHandler());  
    //当我们返回null或没有返回逻辑视图名时的默认视图名翻译(详解4.15.5 RequestToViewNameTranslator)  
    if (mv != null && !mv.hasView()) {  
        mv.setViewName(getDefaultViewName(request));  
    }  
    //3、处理器拦截器的后处理(逆序)  
    if (interceptors != null) {  
    for (int i = interceptors.length - 1; i >= 0; i--) {  
          HandlerInterceptor interceptor = interceptors[i];  
          interceptor.postHandle(processedRequest, response, mappedHandler.getHandler(), mv);  
    }  
    }  
    //4、视图的渲染  
    if (mv != null && !mv.wasCleared()) {  
    render(mv, processedRequest, response);  
        if (errorView) {  
            WebUtils.clearErrorRequestAttributes(request);  
    }  
    //5、触发整个请求处理完毕回调方法afterCompletion  
    triggerAfterCompletion(mappedHandler, interceptorIndex, processedRequest, response, null); 
  • 相关阅读:
    Linux mysql 远程访问
    Linux下高并发socket最大连接数所受的各种限制
    Linux之gunzip命令
    不停在终端中报log
    FIO测试
    yum是什么?(linux命令)
    ubuntu grub 登录
    百度网盘命令行方式,解决ubuntu16.04百度网盘无法运行的问题
    excel使用经验汇总
    ubuntu 安装 ipfs 经验
  • 原文地址:https://www.cnblogs.com/stevehu1231/p/8977792.html
Copyright © 2011-2022 走看看