Spring MVC 请求流程 - 基于源码解读

it2023-11-07  77

阅读本文需要 5 分钟

前言

一说到 Spring MVC 请求流程,大家都有一张成熟的流程图,我这里有一张是来自于 应巅 老师的 但这不够,我们要从源码的角度上来理解这个过程

打断点

根据以下两个断点的调用栈,可以明确知道一个请求经过的类和方法

Handler(Controller) 方法执行时机 页面渲染时机

分析请求流程

我们知道一个请求最终会交给 DispatcherServlet 的 doDispatch 处理 tips:上一篇 DispatcherServlet继承体系 对此有描述

org.springframework.web.servlet.DispatcherServlet#doDispatch 里面其实做了 5 件事

// 1.检查是否是文件上传的请求 processedRequest = checkMultipart(request); // 2.查询handlerMappings获取执行链 mappedHandler = getHandler(processedRequest); // 3.查询handlerAdapters获取适配器 HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler()); // 4.适配器调用handler并返回mv mv = ha.handle(processedRequest, response, mappedHandler.getHandler()); // 5.跳转页面,渲染视图 processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchEx);

这五行代码,正是篇首流程图的核心,后面将会对 2 ~ 5 行代码单独讲述。

最新回复(0)