Spring 源码深度解析(第 2 版)读书笔记(六)SpringMVC过程
从web.xml说起,父子容器的启动,必须配置contextLoadListener和一个servlet,然后加入init-param指定配置文件,而ServletContextListener是javax提供的接口,在web容器启动时,就会自动调用它的初始化方法,导入父容器的配置文件
创建父容器,将父容器的父容器设置为web容器,刷新容器,将完成初始化的父容器设置到web容器中
先看第一个方法,创建容器:
容器的刷新
web容器启动-》调用监听器-》加载父容器-》初始化servlet,一般没设置就是等到有请求的时候,web容器才会创建servlet,不过我们会咋web.xml中配置load-on-startup为1, 提前创建servlet
这个是在GenericServlet中
进入 initWebApplicationContext 方法
在 onRefresh 中,初始化了九个web组件,也就是处理请求的各种功能组件
和获取创建什么类型的容器一样,是在 dispatchServlet 这个类的同一个包下有一个配置文件
现在父子容器都创建好了,开始走一下请求处理过程,普通的servlet中,都是在请求到达之后,web容器会匹配url找到对应的serlvet,然后调用它的service方法处理请求
跳转到了 DispatchServlet 中
所有处理主要逻辑都在这个方法里面
然后每个主要逻辑都进去看看,但是由于没有写具体环境,所以有些组件的实现很多,对应不同的请求以及处理方法,所以看的是较为上层的方法
======================================================================================================================
======================================================================================================================
=============================================================================================================================
=========================================================================================================================
=====================================================================================================================
它的前面还有一个通过handlerAdapter调用handler的方法,不过有不同类型适配器,所以就简单先知道有这个过程,后面再补
调用handler之后,会有结果返回,其实质都是ModelAndView,然后会紧接着执行拦截器的后处理,最后就是回到DispatchServlet,执行视图解析和渲染页面,如下:
首先解析,拿到视图
将返回结果的数据,渲染页面
SpringMVC的请求处理过程大致就是这样,对应不同的handler,有不同的handlerMapping和handlerAdapter去处理,更加具体估计会在看springBoot的时候,会更加细致的看处理流程。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?