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);

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
目录
相关文章
|
机器学习/深度学习 人工智能 PyTorch
|
前端开发
CSS——@layer规则
CSS——@layer规则
185 2
CSS——@layer规则
|
前端开发 JavaScript C++
揭秘Web前端CSS引入秘籍:Link vs @import,你的选择决定页面加载速度,你选对了吗?
【8月更文挑战第26天】本文探讨了Web前端开发中CSS的引用方法,主要包括行内样式、内部样式表及外部样式表三种形式。重点对比了外部样式表中的`<link>`和`@import`两种引入方式。`<link>`作为HTML元素,在页面加载初期就开始加载样式资源,支持并行加载,对提高页面加载速度有益。而`@import`作为一种CSS规则,仅能在CSS文件中使用,其引入的样式表会在页面完成加载后才开始加载,可能导致渲染延迟且不支持并行加载。因此,在多数情况下,推荐采用`<link>`方式引入外部样式表,以确保更佳的性能表现和浏览器兼容性。
303 2
|
12月前
|
前端开发 开发者
useContext 钩子详解
【10月更文挑战第14天】`useContext` 是 React 中的一个 Hook,用于在组件树中传递数据,避免手动传递 props。本文从基本概念、使用方法、常见问题及解决方法等方面详细介绍了 `useContext`,并提供了代码示例,帮助开发者更好地理解和应用这一钩子。
339 6
|
SQL 关系型数据库 分布式数据库
PolarDB Proxy配置与优化:提升数据库访问效率
【9月更文挑战第6天】PolarDB是阿里云推出的高性能分布式关系型数据库,PolarDB Proxy作为其关键组件,位于客户端与PolarDB集群间,负责SQL请求的解析与转发,并支持连接池管理、SQL过滤及路由规则等功能。本文详细介绍了PolarDB Proxy的配置方法,包括连接池、负载均衡和SQL过滤设置,并探讨了监控调优、缓存及网络优化策略,以帮助提升数据库访问效率。
192 1
|
机器学习/深度学习 分布式计算 Hadoop
记一次HDFS报EOFException异常的问题
现象 大晚上的收到线上DataNode挂掉异常的报警,值班同学随即做了重启处理,重启完成后,进程虽然在运行,但是NameNode的WebUI上显示大量的block丢失。 There are 12622047 missing blocks. Number of Under-Replicated Blocks 14436901 重新启动的DataNode节点block数量为0,明显不正常 HDFS在对丢失的block做恢复,missing blocks的数量在减少,但是丢失的的太多了,恢复速度很慢,这种情况肯定不能指望集群自动恢复的。
1444 0
阿里云服务器价格参考,不同预算可购买的云服务器配置及优惠价格汇总
一般来说个人用户购买云服务器的预算都在500元以内,普通企业用户预算大多在1000-3000元之间,大型企业因为对云服务器性能要求更高,一般会将预算提高到3000以上,本文主要介绍预算在500元以内、500-1000元、1000-3000元和3000元以上时可以买到什么实例和配置的阿里云服务器,以表格形式展示给大家。
阿里云服务器价格参考,不同预算可购买的云服务器配置及优惠价格汇总