聊一聊Tomcat的架构和运行流程,尽量通俗易懂一点

1、Tomcat的架构

这里可以看出

A、一个Tomcat就是一个Server,一个Server下会有多个Service,

B、Service只负责封装多个Connector和一个Container(Service本身不是容器,可以看做只是用来包装Connector和Container的壳,不负责具体功能)。

C、Connector主要负责处理与客户端的通信,Connector的实例用于监听端口,接受来自客户端的请求并将请求转交给Container(也叫engine)处理。同时将来自Container(也叫engine)的答复返回给客户端。

C、Container(也叫engine)下又有多个Host,每个Host下对应多个Context。

D、Context下才是我们的Servlet

Tomcat为了使整个架构灵活,所以抽象出这么多层,每层之间都可以根据不同的维度产生一对多个配置。

对于Container(也叫engine)再在下图理解一下host,context和wrapper。

Engine :引擎,用来管理多个站点, 一个Service 最多只能有一个Engine。
Host :代表一个站点,也可以叫虚拟主机,通过配置Host 就可以添加站点。
Context :代表一个应用程序,对应着平时开发的一套程序,或者一个WEB-INF 目录以及下面的web.xml 文件。
Wrapper :每个Wrapper 封装着一个servlet。

Context 和Host 的区别是Context 表示一个应用,比如,默认配置下webapps 下的每个目录都是一个应用,其中ROOT目录中存放着主应用,其他目录存放着别的子应用,而整个webapps 是一个站点。假如www.excelib.com 域名对应着webapps 目录所代表的站点,其中的ROOT 目录里的应用就是主应用,访问时直接使用域名就可以,而webapps/test 目录存放的是test 子应用,访问时需要www.host3.com/test ,每一个应用对应一个Context ,所有webapps 下的应用都属于www.host3.com 站点,而www.host3.com 则是另外一个站点,属于另外一个Host。

有了基本理解后,我们在打开tomcat/config目录下的server.xml文件如下:

默认的server.xml里面理解为host为localhost,对应着webapps目录,看到里面标签页就可以看到基本的构成层次。

2、Tomcat运行流程

假设来自客户的请求为:http://localhost:8080/test/index.jsp

  1. 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得
  2. Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的回应
  3. Engine获得请求localhost:8080/test/index.jsp,匹配它所有虚拟主机Host
  4. Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)
  5. localhost Host获得请求/test/index.jsp,匹配它所拥有的所有Context
  6. Host匹配到路径为/test的Context(如果匹配不到就把该请求交给路径名为""的Context去处理)
  7. path="/test"的Context获得请求/index.jsp,在它的mapping table中寻找对应的servlet
  8. Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类
  9. 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法
  10. Context把执行完了之后的HttpServletResponse对象返回给Host
  11. Host把HttpServletResponse对象返回给Engine
  12. Engine把HttpServletResponse对象返回给Connector
  13. Connector把HttpServletResponse对象返回给客户browser

参考资料:

https://blog.csdn.net/caoyuanyenang/article/details/114401414

https://blog.csdn.net/gchd19921992/article/details/79071288

https://blog.csdn.net/chengc017/article/details/7090132/

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

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

相关文章

基于Springboot的社区疫情防控平台

末尾获取源码作者介绍:大家好,我是墨韵,本人4年开发经验,专注定制项目开发 更多项目:CSDN主页YAML墨韵 学如逆水行舟,不进则退。学习如赶路,不能慢一步。 一、项目简介 以往的社区疫情防控管理…

交强险投保日期查询接口返回字段说明

API接口是现代互联网应用中重要的组成部分,通过接口的调用可以实现不同系统之间的数据交互和共享。在汽车保险行业中,交强险投保日期查询接口是非常关键的一个接口,本文将详细介绍该接口的返回字段和使用方法。 接口名称:交强险投…

C++入坑基础知识点

当学习了C语言之后,很多的小伙伴都想进一步学习C,但两者有相当一部分的内容都是重叠的,不知道该从哪些方面开始入门C,这篇文章罗列了从C到C必学的入门知识,学完就算是踏入C的大门了。 1. 命名空间 写C的时候&#xff…

找不到d3dcompiler_43.dll,无法继续执行代码的原因分析与解决方法

在运行某些软件或游戏时,可能会遇到系统提示找不到 d3dcompiler_43.dll 文件的情况。这个特定的动态链接库文件 (dll) 是 DirectX 3D 编译器组件的一部分,对于许多现代软件游戏的正常运行起着不可或缺的作用。它的主要功能在于将高级着色语言编写的代码转…

零基础学Python之核心基础知识

1.Python入门简介 (1)什么是Python Life is short, you need Python!人生苦短,我用Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性,相比其他语言…

MySQL数据库入门(概念+使用)

目录 1. 数据库的概念 1.1 数据库的存储介质 1.2 主流数据库 2. MySQL的基本使用 2.1 链接数据库 2.2 服务器管理 2.3 数据库,服务器和表关系 2.4 简单MySQL语句 3. MySQL架构 4. SQL分类 5. 存储引擎 本篇完。 1. 数据库的概念 数据库是按照数据结构来…

【CSS】页面自适应屏幕宽度(响应式布局媒体查询-@media、弹性布局、网格布局和相对单位-vh/em/%)

【CSS】页面自适应屏幕宽度(响应式布局媒体查询-media、弹性布局、网格布局和相对单位-vh/em/%) 一、媒体查询(media)1、媒体类型2、媒体特征3、媒体查询语法4、示例(1)示例1(2)示例…

leetcode热题100.二叉树中的最大路径和

Problem: 124. 二叉树中的最大路径和 文章目录 题目解题方法复杂度Code 题目 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。 …

pytorch_car_caring 排坑记录

pytorch_car_caring 排坑记录 任务踩坑回顾简单环境问题代码版本问题症状描述解决方法 cuda问题(异步问题)症状描述解决方法 任务 因为之前那个MPC代码跑出来的效果不理想,看了一天代码,大概看明白了,但要做改进还要有…

C语言指针学习 之 指针是什么

前言 指针是C语言中一个重要概念,也是C语言的一个重要特色,正确而灵活地运用指针可以使程序简洁、紧凑、高效。每一个学习和使用C语言的人都应当深入的学习和掌握指针,也可以说不掌握指针就没有掌握C语言的精华。 一、什么是指针 想弄清楚什…

末世智能毁灭机械

在一个遥远的星球上,AI和机器人在末世中扮演着重要角色。由于一场毁灭性的灾难,人类文明几乎被彻底毁灭,幸存者被迫在废土中艰难求生。为了重建家园,人类和机器人联手,利用智能机械技术开始了重建工作。 然而&#xff…

应用层协议 ——— HTTP协议

应用层协议 ——— HTTP协议 HTTP简介认识URL二、登录信息三、服务器地址四、服务器端口号五、带层次的文件路径六、查询字符串七、片段标识符urlencode和urldecodeHTTP协议格式HTTP请求协议格式HTTP的方法HTTP的状态码HTTP常见的HeaderHTTPS VS HTTP对称加密 VS 非对称加密 HT…

Stable diffusion使用和操作流程

Stable Diffusion是一个文本到图像的潜在扩散模型,由CompVis、Stability AI和LAION的研究人员和工程师创建。它使用来自LAION-5B数据库子集的512x512图像进行训练。使用这个模型,可以生成包括人脸在内的任何图像,因为有开源的预训练模型,所以我们也可以在自己的机器上运行它…

Java工具类库Hutool

这里写目录标题 一、简介二、包含组件三、常用功能演示2、时间工具DateUtil3、数字类工具NumberUtil4、身份认证工具IdcardUtil5、信息脱敏工具DesensitizedUtil6、字段校验工具Validator7、集合工具类CollStreamUtil 一、简介 Hutool是一个小而全的Java工具类库,通…

类与对象

面向对象的程序设计 面对对象的程序 类 类 .... 类 设计程序的过程,就是设计类的过程。 面对对象的程序设计方法: 1.将某类客观事物共同特点(属性)归纳出来,形成一个数据结构(可以用多个变量描述…

定义HarmonyOS IDL接口

HarmonyOS IDL简介 HarmonyOS Interface Definition Language(简称HarmonyOS IDL)是HarmonyOS的接口描述语言。HarmonyOS IDL与其他接口语言类似,通过HarmonyOS IDL定义客户端与服务端均认可的编程接口,可以实现在二者间的跨进程…

SpringBoot+Vue实现各种文件预览(附源码)

👨‍💻作者简介:在笑大学牲 🎟️个人主页:无所谓^_^ ps:点赞是免费的,却可以让写博客的作者开心好几天😎 项目运行效果 前言 在做项目时,文件的上传和预览必不可少。继上…

数字化转型:企业适应新常态的关键之举_光点科技

在全球商业环境不断演变和技术日新月异的背景下,数字化转型已经成为企业不可回避的课题。它不仅关乎企业的未来生存与发展,更是适应新常态、提升竞争力的关键之举。但是,数字化转型并非一夜之间可以完成的任务,它需要全面的策略规…

nosql数据库期末考试知识点总结

目录 1、什么是nosql数据库,它包括哪些 文档数据库 建数据 哪一种是最简单的 2、什么是文档数据库 3、创建mongodb时默认会建造三个数据库,是哪三个 4、mongodb支持的数据类型有哪些 5、它的常规语句有哪些 6、副本集和分片集有什么作用 复制 …

linux中vim的操作

(码字不易,关注一下吧w~~w) 命令模式: 当我们按下esc键时,我们会进入命令模式;当使用vi打开一个文件时也是进入命令模式。 光标移动: 1 保存退出:ZZ 2 代码格式化:ggG 3 光标移动&#xff…