DispatcherServlet

简介: 路径 org.springframework.web.servlet.DispatcherServlet继承关系重点关注doService()方法该方法重写了父类FrameworkServlet的方法FrameworkServlet在processRequest()方法中调用了...
  • 路径 org.springframework.web.servlet.DispatcherServlet
  • 继承关系
    image.png
  • 重点关注doService()方法

    • 该方法重写了父类FrameworkServlet的方法
    • FrameworkServletprocessRequest()方法中调用了doService()方法
    • processRequest()方法是在FrameworkServlet(继承自HttpServlet,重写了doGet(),doPost()....)中的doGet(),doPost()....中调用的

所以整个过程是DispatcherServlet响应/所有请求。容器调用HttpServletservice()方法,该方法根据HttpMethod分别调用doGet(),doPost()...等方法,FrameworkServlet重写了doGet(),doPost()...等方法,并在方法中调用processRequest()方法,processRequest()方法再调用(重写FrameworkServlet)DispatcherServlet.doService()方法,请求即到了DispatcherServlet.

  • 重点关注doDispatch(request, response)方法
    image.png
  • 查找能够响应当前请求的处理器
// Determine handler for the current request.
mappedHandler = getHandler(processedRequest);
AI 代码解读

image.png
image.png

  • Spring容器启动时根据@Controller注解和@RequestMapping获取对应的HandlerMethod
    image.png
  • 得到处理类与处理方法
    image.png
  • 继续往下,走到HandlerExecutionChain executionChain = getHandlerExecutionChain(handler, request);
  • 在方法getHandlerExecutionChain(handler, request)中添加需要拦截该请求的拦截器
    image.png
  • 方法getHandlerExecutionChain(handler, request)执行完毕之后可以拿到的数据:
    image.png
  • 返回 Dispatcher.getHandler(processedRequest)
    image.png
  • 依次执行每个拦截器InterceptorList中的预处理方法preHandler()
    image.png
  • 执行真正的业务方法
    image.png
  • 依次执行每个拦截器的postHandler()方法
    image.png
  • processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException)处理返回值与执行拦截器的afterCompletion()方法
    image.png
  • 依次执行每个拦截器的afterCompletion()方法
    image.png

一次请求执行完毕

  • 调试时长:12分钟
    image.png
目录
打赏
0
0
0
0
11
分享
相关文章
云安全 | 学习笔记
快速学习云安全,重点介绍了如何在 Linux 下进行安全防护,并从用户系统安全、SSH 安全、恶意文件安全和云安全四个角度诠释如何提升系统的安全性。
云安全 | 学习笔记
双11同款!阿里云发布全局事务服务GTS:每秒处理10万笔事务
5月30日,阿里云宣布全局事务服务产品GTS正式商用,每秒可处理10万笔事务,将分布式事务这个“贵族技术”变为“平民技术 ”,可解决跨数据库、消息、服务的分布式环境下的事务一致性问题,让开发者无需考虑复杂的事务问题,加速微服务落地,效率比传统的XA协议提升了10倍之多。
7815 58
C++实现图 - 06 关键路径
我们上一讲详细的讲述了拓扑排序的实现,为了就是给这一讲打下基础,因为这一讲我们将会讲关键路径,它就要用到拓扑排序的知识。
353 0
C++实现图 - 06 关键路径
记第一次挖洞交洞历程
记第一次挖洞交洞历程
691 0
记第一次挖洞交洞历程
玩转阿里云EMR三部曲-入门篇
优异的自动化创建集群让小伙伴专心于业务开发,不再纠结于hadoop、spark版本,按需集群按小时计费模式替小伙伴们极大节省了开支,可以50个节点执行1小时,也可以3个节点执行5小时,非常灵活。可以保留更多精力和成本用于业务开发和维护,而把集群运维/存储问题托管给阿里云。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等