Spring源码一步步分析——客户端请求流转

Spring源码一步步分析——客户端请求流转

大家好,我是Andy,那个永远积极向上且自恋的Andy


介绍:分享本人学习的 Spring 源码,后面会陆续更新。
介绍:此篇博客主要介绍【访问URL——返回结果】这么一个流程的源码分析。
说明:涉及代码会非常多,代码跳转也非常多,所以不好贴代码且无法每一行代码都去解释,所以请读者结合源码分析才好,此博客仅提供主要流程的代码。


Spring MVC 的核心控制器 DispatcherServlet

DispatcherServlet 是 spring mvc 的核心控制器这个大家都知道,其中它就负责做请求处理。贴出它的父类你就知道了。
DispatcherServlet < FrameworkServlet < HttpServletBean < HttpServlet
可以看到 DispatcherServlet 父类为HttpServlet,而 HttpServlet 正是处理请求的核心类,以前写 Servlet 的时候就经常看到这个类。请求 servlet 是先进 init() 然后进 service() 。

  • 1.查看 HttpServlet 的源码

HttpServlet 中的核心方法 service()
进入service方法


上图调用的封装 service() ,此方法通过不同请求 method 去调用对应处理方法,如 doGet()、doPost()。
注:此 HttpServlet 中的 service() 方法被 Spring 的 FrameworkServlet 所重写了
进入service调用的逻辑处理封装方法


  • 2.查看 FrameworkServlet 的源码
    FrameworkServlet 中对 HttpServlet 的 service() 做了重写。其中举例如果正常请求为 get() 或 post() 时将继续调用父类的service(),此方法会根据 request 头去调用对应的 doGet() 或 doPost() 等,而在 FrameworkServlet 又对这些方法[doGet() 或 doPost() 等]做了重写,所以调用的对应代码为FrameworkServlet 的方法如下图:

FrameworkServlet 中对 HttpServlet 的 service() 做的重写
这里写图片描述


FrameworkServlet 中对 HttpServlet 的 doGet()、doPost() 等做的重写
这里写图片描述


FrameworkServlet 的 doGet()、doPost() 等调用的操作方法
注:此 FrameworkServlet 中的 doService() 方法被 DispatcherServlet 所重写了
这里写图片描述


  • 3.查看 DispatcherServlet 的源码
    上图中 FrameworkServlet 的 processRequest() 调用了 doService(),而 FrameworkServlet 的 doService()又被 DispatcherServlet 的 doService() 做了重写,如下图:
    DispatcherServlet 的doService

上图 doService() 中最重要的是调用 doDispatch() 了,在doDispatch()中【mv = ha.handle(processedRequest, response, mappedHandler.getHandler());】这句代码就是去调用 jdk 的 invoke 执行具体 Controller 对应方法的代码了。【ModelAndView mv 】就是返回的结果了,用来渲染给客户端的。
invoke


如想了解更深的代码欢迎讨论。
以上就是流程分析,如有不明白欢迎留言或私信。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值