【Tomcat】Tomat 处理请求的过程(图解)

news/2024/11/15 21:47:35/文章来源:https://www.cnblogs.com/kukuxjx/p/18536455

1  前言

最近在复习 Tomcat 的请求处理过程,之前也看过一些局部的细节,【SpringBoot + Tomcat】【一】请求到达后端服务进程后的处理过程-连接器的创建和执行、【SpringBoot + Tomcat】【二】请求到达后端服务进程后的处理过程-连接的处理细节,但是没看完整,这节我们从整体看一下 Tomcat 从接收请求到最后到达 SpringMVC 的 DispatcherServlet 的过程。

另外参考我的两篇,可以帮助你理解 DispatcherServlet 是如何注入到 Tomcat 的过程(本节不会讲这个):【Spring MVC + Tomcat】Spring MVC 传统VS现代方式的启动过程对比、【Spring MVC + Tomcat】追本溯源,Spring MVC是如何和Tomcat关联到一块的呢?

2  整体一览

我们先从整体的请求处理上,有一个全局的概念:

一个 Tomcat 就是一个 Server 而一个 Server 里可以有多个Service ,一个Service里可以有多个 Connector 和 一个 Container(Container是个全称,它内部包含 Engine、Host、Context、Wrapper)

请求过程大概分两块,一边是 Connector 连接器的范畴,一边是 Container 范畴,中间通过 CyoteAdapter 将连接起里的请求下发给右边容器执行。容器执行采用的是责任链的方式:Pipline 表示整个责任链、Value 是每个链上的节点。

接下来,就从连接器 Connector 到内部的协议处理器 ProtocolHandler 再到内部的连接点 Endpoint 再到 CyoteAdapter 将请求下发给 Container 来看一下,这里以 HTTP/1.1为例,都是采用图示哈,图上的注释应该比较清楚,就不做文字解释了哈。

3  连接器 Connector

3.1  实例化

3.2  初始化

3.3  启动

4  协议处理器 ProtocolHandler

4.1  初始化

4.2  启动

5  连接点 Endpoint

5.1  初始化

5.2  启动

5.3  Accpet 线程

5.4  Poller 线程

5.5  线程池执行过程

图有点大,截图截不全,只好导出哈。

6  CyoteAdapter 委派以及 Container 请求执行

7  小结

好啦,其实请求中的细节还有很多,包括超时处理,一些 Socket 关闭以及报错处理可能在图上没严格表示出来还请理解一下,细节太多了哈哈= =,本节主要是看一下请求的经过的一些核心组件核心类的处理最后落点到 DispatcherServlet 的一条链路,有理解不对的地方还请指正哈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/829271.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab根据rgb通道值用plot画相应颜色的线条

https://www.w3schools.com/colors/colors_rgb.asp

登高作业安全绳佩戴识别系统

登高作业安全绳佩戴识别系统基于AI人工智能机器视觉分析识别技术,登高作业安全绳佩戴识别系统通过安装于现场的监控摄像头,实时检测高空作业工作人员的安全绳佩戴情况。一旦系统检测到高空作业人员未佩戴安全绳或安全带,它会立即启动抓拍功能,将违规画面存档,并通过警报语…

山体滑坡监测预警系统

山体滑坡监测预警系统基于AI人工智能的机器视觉分析识别技术,山体滑坡监测预警系统为山体滑坡的监测预警提供了新的解决方案。系统通过安装在现场的监控摄像头,实现对边坡的24小时不间断监测。摄像头捕捉到的画面,经过AI算法的处理和分析,能够准确识别出边坡的微小变形态势…

人员入侵检测系统

人员入侵检测系统通过高清摄像头捕捉监控区域内的所有动态画面,人员入侵检测系统利用AI算法对这些画面进行实时分析。一旦系统识别到有人员闯入预设的警戒区域,便会立即启动报警机制,通过声光告警、发送短信或邮件等多种方式,迅速通知相关人员进行处理。除了基本的报警功能…

Linux fsync和fdatasync系统调用实现分析(Ext4文件系统)

Linux系统中,对文件系统上文件的读写一般是通过页缓存(page cache)进行的(DirectIO除外),这样设计的可以延时磁盘IO的操作,从而可以减少磁盘读写的次数,提升IO性能。但是性能和可靠性在一定程度上往往是矛盾的,虽然内核中设计有一个工作队列执行赃页回写同磁盘文件进行…

污水口排污水识别监测系统

污水口排污水识别监测系统利用先进的机器视觉深度学习算法,污水口排污水识别监测系统通过安装在河道排水口附近的监控摄像头,实现对排水口实时、高效的监控。摄像头捕捉到的画面经过AI算法处理后,能够迅速识别出水体的颜色、浑浊度等关键信息,一旦检测到异常排放,如带有颜…

LeetCode 171[Excel表列序号]

LeetCode 171[Excel表列序号]题目 链接 LeetCode 171[Excel表列序号] 详情实例提示题解 思路 这其实是一道26进制的算术题 其中 A的权重为1,B的权重为2,C的权重为3,D的权重为4,E的权重为5,F的权重为6,G的权重为7 H的权重为8,I的权重为9,J的权重为10,K的权重为11,L的权…

常用的 jvm 调优的参数都有哪些

​ 堆内存设置-Xms:设置JVM堆的初始大小。例如:​​-Xms2g​​ 表示初始堆大小为2GB。-Xmx:设置JVM堆的最大大小。例如:​​-Xmx2g​​ 表示最大堆大小为2GB。-XX:NewRatio:设置年轻代和老年代的比例。例如:​​-XX:NewRatio=4​​ 表示年轻代和老年代的比例为1:4。-XX:S…

深入 MyBatis-Plus 插件:解锁高级数据库功能

Mybatis-Plus 提供了丰富的插件机制,这些插件可以帮助开发者更方便地扩展 Mybatis 的功能,提升开发效率、优化性能和实现一些常用的功能。一、关于Mybatis-Plus插件 1.1 简介 Mybatis-Plus 提供了丰富的插件机制,这些插件可以帮助开发者更方便地扩展 Mybatis 的功能,提升开…

【RStudio 2024 软件下载与安装教程】

1、安装包RStudio 2024: 链接:https://pan.quark.cn/s/9c0b51619c36 提取码:acvG RStudio 2022: 链接:https://pan.quark.cn/s/2e59b185b557 提取码:MHdf 2、安装教程 1) 双击R-4.4.2-win.exe安装,弹窗安装对话框2) 选择语言,点击确定3) 点击下一步…

强化学习理论-第二课-贝尔曼公式

1. return和贝尔曼上图说明从不同状态出发得到的return,依赖于从其他状态出发的returnv是return,将第一张图写成矩阵的形式,r代表immediate reward,是已知的,矩阵P是策略加上state transition,也是已知的,求解v 这个公式实际上就是贝尔曼公式在\(S_t\)采用什么样的动作\…

为了`小米互联`升级big sur, 但是无用

起了个大早,升级到big sur,为了小米互联take some photos about upgrading macOS from 10.15.7 to 11.6.5about 1hour....dmg From hyperos.mi.com doesn’t work.Xiaomi HyperConnect 跨端智联app from appStore , incompatiablemy mac info ☁ Downloads neofetchc. …