目录

一、SpringMVC处理请求源码分析

1、前端控制器 DispatcherServlet 继承结构

2、SpringMVC处理请求流程

3、核心方法深度剖析

1)getHandler方法剖析

2)getHandlerAdapter方法剖析

3)ha.handle方法剖析

4)processDispatchResult方法剖析

二、SpringMVC九大组件初始化

1、九大组件

 2、九大组件的初始化时机

 3、Spring与Spring MVC 初始化的关联性


一、SpringMVC处理请求源码分析

1、前端控制器 DispatcherServlet 继承结构

2、SpringMVC处理请求流程

1) 调用getHandler()获取到能够处理当前请求的执行链 HandlerExecutionChain(Handler+拦截器)

2)调用getHandlerAdapter();获取能够执行1)中Handler的适配器

3)适配器调用Handler执行ha.handle(总会返回一个ModelAndView对象)

调用processDispatchResult()方法完成视图渲染跳转

 

 

3、核心方法深度剖析

1)getHandler方法剖析

遍历两个HandlerMapping,试图获取能够处理当前请求的执行链

2)getHandlerAdapter方法剖析

遍历各个HandlerAdapter,看哪个Adapter支持处理当前Handler

 

3)ha.handle方法剖析

进入

4)processDispatchResult方法剖析

 

二、SpringMVC九大组件初始化

1、九大组件

在DispatcherServlet中定义了九个属性,每一个属性都对应一种组件

 
/** MultipartResolver used by this servlet. */ 
// 多部件解析器
@Nullable
private MultipartResolver multipartResolver;
/** LocaleResolver used by this servlet. */ 
// 区域化 国际化解析器
@Nullable
private LocaleResolver localeResolver;
/** ThemeResolver used by this servlet. */ 
// 主题解析器
@Nullable
private ThemeResolver themeResolver;
/** List of HandlerMappings used by this servlet. */ 
// 处理器映射器组件
@Nullable
private List<HandlerMapping> handlerMappings;
/** List of HandlerAdapters used by this servlet. */ 
// 处理器适配器组件
@Nullable
 
private List<HandlerAdapter> handlerAdapters;
/** List of HandlerExceptionResolvers used by this servlet. */ 
// 异常解析器组件
@Nullable
private List<HandlerExceptionResolver> handlerExceptionResolvers;
/** RequestToViewNameTranslator used by this servlet. */ 
// 默认视图名转换器组件
@Nullable
private RequestToViewNameTranslator viewNameTranslator;
/** FlashMapManager used by this servlet. */ 
// flash属性管理组件
@Nullable
private FlashMapManager flashMapManager;
/** List of ViewResolvers used by this servlet. */ 
// 视图解析器
@Nullable
private List<ViewResolver> viewResolvers;

 2、九大组件的初始化时机

DispatcherServlet中的onRefresh(),该方法中初始化了九大组件

观察其中的一个组件initHandlerMappings(context)

 

 3、Spring与Spring MVC 初始化的关联性

在spring启动的时候发布时间监听,通过监听来出发dispatcherServlet的onReFresh(),从而加载spring mvc的相关组件

 

 

 

 

Logo

立足具身智能前沿赛道,致力于搭建全球化、开源化、全栈式技术交流与实践共创平台。

更多推荐