DispatcherServlet继承体系
阅读本文大约需要 5 分钟
前言
我们将立足于源码,从以下几个方面认识Spring MVC:
- DispatcherServlet继承体系
- Spring MVC请求流程
- 请求流程关键步骤解读
- 九大组件初始化
本篇从核心类 DispatcherServlet 入手。
使用IDEA查看继承体系
在 DispatcherServlet
右键,找到 Show Diagram
选项,之后便可以查看继承体系
这里删除了一些非关键信息,只看关键接口
- Servlet:位于 servlet-api 包的接口,手写 Spring MVC 时引入的依赖
- ApplicationContextAware:与 Spring 集成后,Spring 容器启动完成时调用
finishRefresh
发送通知,然后 Spring MVC 才开始初始化
接收请求
原生 Servlet 是通过 doPost 接收请求,Spring MVC 也是如此,可以在继承体系中从上往下查找这个方法
- 首先在
HttpServlet
发现了 doPost 方法,但是并没有处理,往下查看子类 - 在子类
FrameworkServlet
发现了 doPost 的实现,而且还发现不管是 doPost 还是 doGet都调用了 processRequest 这个方法 - 进入 processRequest 方法,里面有个 doService,这个方法的实现类就是
DispatcherServlet
- 而 doService 方法里又包含一个真正处理请求的方法 doDispatch
综上所述:
当一个请求过来时
=》FrameworkServlet 的 doPost 接收请求
=》调用自身的 processRequest 处理请求
=》processRequest 继续调用 DispatcherServlet 的 doService
=》doService 里面又调用自身的 doDispatch处理请求