Tomcat的实现
在一台电脑上启动tomcat,tomcat是server,即服务器。服务器只会被实例化一次,tomcat这只猫就是服务器。服务器下包含多个子节点服务,即service,顾名思义就是对外提供服务。服务器通常只有一个服务,默认是卡特琳娜Catalina。
核心配置文件是server.xml
server
根节点就是Server,即tomcat猫🐱,只会被实例化一次,下面可以有多个service,但通常只有一个,默认为卡特琳娜Catalina.
service
Service组件的作用就是对外提供服务。

一个service有一个引擎,和按协议划分的多个连接器connector,比如负责http协议(80端口)的连接器、负责https(443端口)的连接器、负责其他协议的连接器等等.....
连接器connector
连接器负责通信;引擎复杂请求的处理。

不同的连接器负责监听不同的网络端口(可配置端口),处理请求,比如http协议默认的80端口。一个连接器即是一个线程,线程一直在循环运行,接收所有先后到来的网络请求,并将每一个请求都按对应的协议转换为不同的request对象,随后将其作为参数使用引擎对象进行调用。
host
引擎是一个容器,其中包含一个或多个host对象,也即虚拟主机。host的存在保证了单个tomcat实例支持多个域名或主机名,使得一台tomcat可以去处理多种请求。【根据不同的目标地址来区分不同的请求】
切记:host配置的是域名或主机名,一条URL中后面的请求方式等信息是取决于下面的context组件
context
为了实现一个虚拟主机下托管多个不同的web应用程序(Context)每个 <Context> 组件代表一个特定的Web应用程序上下文,存放着该Web应用程序的配置信息。
通过配置不同的 <Context>,管理员可以为每个Web应用程序定制独特的设置,确保它们在同一个虚拟主机下能够独立运行且相互隔离。
因为request对象包含完整的URL等信息,所以引擎能够解析到对应的虚拟主机host上(域名),进而在虚拟主机上找到对应的应用,最终找到应用下对应的servlet(通常就是我们写的业务代码)对请求进行处理。

wrapper
一个Context应用包含一个或多个servlet实例,同一个servlet的所有实例被Wrapper容器进行统一管理。
host、Context、Wrapper都是容器。
连接器给出的request请求对象中包含了他要访问的servlet的详细路径,因此给到容器中,都能通过路径准确的传递给下一个容器(主机名:应用名/servlet名)
当我们编写的servlet完成(业务逻辑)之后,连接器将从引擎对象的方法调用获得一个返回值response对象,最后再将respondse对象转化为字节流返回给浏览器。
至此,一个请求的完整过程就结束了。这就是tomcat服务器的架构和原理。

相关文章:
Tomcat的实现
在一台电脑上启动tomcat,tomcat是server,即服务器。服务器只会被实例化一次,tomcat这只猫就是服务器。服务器下包含多个子节点服务,即service,顾名思义就是对外提供服务。服务器通常只有一个服务,默认是卡特…...
RK3576 Camera:资源介绍
RK3576是RK今年上市的中高端旗舰芯片,定位弱于RK3588。这篇文章主要分享一下RK3576这颗主控芯片的camera资源。 (1)RK3576 camera资源 ①RK3576 camera硬件框图 RK3576的camera硬件框图如图所示,拥有一路4lane的DCPHYÿ…...
Symfony DomCrawler库在反爬虫应对中的应用
在当今信息爆炸的时代,互联网上的数据量巨大,但这也带来了一些问题,比如恶意爬虫可能会对网站造成严重的影响,导致资源浪费和服务不稳定。为了解决这个问题,许多网站采取了反爬虫策略。Symfony DomCrawler库是一个强大…...
1Panel应用推荐:Uptime Kuma
1Panel(github.com/1Panel-dev/1Panel)是一款现代化、开源的Linux服务器运维管理面板,它致力于通过开源的方式,帮助用户简化建站与运维管理流程。为了方便广大用户快捷安装部署相关软件应用,1Panel特别开通应用商店&am…...
传输文件协议FTP与LFTP
目录 一.简介 二. FTP基础 主动模式(Active Mode): 被动模式(Passive Mode): 三. Vsftp 服务器简介 四. Vsftpd配置 1. 安装vsftpd(ftp服务端) 2.编辑配置文件 (…...
expdp和impdp 实战
1 查询需要导出数据的用户 select username,default_tablespace from dba_users where username like %USERNAME%; 2 查看原来表空间大小 set linesize 9999 pagesize 9999 SELECT total.tablespace_name, Round(total.MB, 2) AS Total_MB, Round(t…...
知了汇智引领未来:全新AIGC系列课程,打造数字时代人才新标杆
在全球AIGC(生成式人工智能)技术加速发展的背景下,一系列权威报道揭示了该领域内市场潜力、行业应用、教育研究、政府监管以及具体应用场景的蓬勃进展。据腾讯网4月19日报道,中国AIGC应用市场规模预计于2024年达到200亿人民币&…...
软件项目验收第三方测试报告如何获取
软件项目验收第三方测试报告是确保软件质量、安全性和稳定性的重要环节。对于企业和开发者来说,获取一份全面、专业的第三方测试报告,对于提升软件产品的竞争力和用户满意度至关重要。本文将介绍如何获取软件项目验收第三方测试报告,以及相关…...
linux下脚本监控mysql主从同步异常时发邮件通知
在MySQL中,同步异常监控通常涉及监控复制的状态。可以通过查询SHOW SLAVE STATUS命令来获取复制的状态信息,并对其进行监控。以下是一个简单的SQL脚本,用于监控MySQL复制状态并输出异常信息: 查mysql slave状态 SHOW SLAVE STAT…...
【MySQL】分组排序取每组第一条数据
需求:MySQL根据某一个字段分组,然后组内排序,最后每组取排序后的第一条数据。 准备表: CREATE TABLE t_student_score (id int(11) NOT NULL AUTO_INCREMENT COMMENT ID,stu_name varchar(32) NOT NULL COMMENT 学生姓名,course…...
滚珠螺杆在精密机械设备中如何维持精度要求?
滚珠螺杆在精密设备领域中的运用非常之广泛,具有精度高、效率高的特点。为了确保滚珠螺杆在生产设备中能够发挥最佳性能,我们必须从多个维度进行深入考量,并采取针对性的措施,以确保其稳定、精准地服务于现代化生产的每一个环节。…...
现代 c++ 三:右值引用与移动语义
c11 为了提高效率,引入了右值引用及移动语义,这个概念不太好理解,需要仔细研究一下,下文会一并讲讲左值、右值、左值引用、右值引用、const 引用、移动构造、移动赋值运行符 … 这些概念。 左值和右值 左值和右值是表达式的属性。…...
Java学习【类与对象—封装】
Java学习【类与对象—封装】 封装的概念封装的实现包的概念import 导包导包中*的介绍import static 导入包中的静态方法和字段 static关键字的使用static 修饰成员变量static修饰方法静态成员变量的初始化 代码块静态代码块非静态代码块/实例化代码块/构造代码块加载顺序 封装的…...
Co-Driver:基于 VLM 的自动驾驶助手,具有类人行为并能理解复杂的道路场景
24年5月来自俄罗斯莫斯科研究机构的论文“Co-driver: VLM-based Autonomous Driving Assistant with Human-like Behavior and Understanding for Complex Road Scenes”。 关于基于大语言模型的自动驾驶解决方案的最新研究,显示了规划和控制领域的前景。 然而&…...
硅胶可以镭射吗?
在科技发展的今天,我们经常会遇到各种各样的材料,其中就有一种叫做硅胶的材料。那么,硅胶可以镭射吗?答案是肯定的,硅胶不仅可以镭射,而且在某些应用中,它的镭射特性还非常突出。 首先ÿ…...
财务风险管理:背后真相及应对策略
市场经济蓬勃发展,机遇与风险并存也是市场经济的一项重要特征。而财务状况的好坏影响着一个企业的发展前景,作为市场经济的必然产物,财务风险贯穿于企业的一切生产经营活动中,无法预知也不以人的意志为转移。 一、企业财务风险的特…...
MySQL深入理解事务(详解)
事务概述 事务是数据库区别于文件系统的重要特性之一,当我们有了事务就会让数据库始终保持一致性,同时我们还能通过事务机制恢复到某个时间点,这样可以保证已提交到数据库的修改不会因为系统崩溃而丢失。 1、基本概念 事务:一组…...
【Linux系统】进程控制
本篇博客整理了进程控制有关的创建、退出、等待、替换操作方面的知识,最终附有模拟实现命令行解释器shell来综合运用进程控制的知识,旨在帮助读者更好地理解进程与进程之间的交互,以及对开发有一个初步了解。 目录 一、进程创建 1.创建子进…...
Go语言数值类型教程
Go语言提供了丰富的数值类型,包括整数类型、浮点类型和复数类型。每种类型都有其特定的用途和存储范围。下面将详细介绍这些类型,并附带示例代码。 原文链接: Go语言数值类型教程 - 红客网-网络安全与渗透技术 1. 整数类型 原文链接…...
Linux进程控制——Linux进程等待
前言:接着前面进程终止,话不多说我们进入Linux进程等待的学习,如果你还不了解进程终止建议先了解: Linux进程终止 本篇主要内容: 什么是进程等待 为什么要进行进程等待 如何进程等待 进程等待 1. 进程等待的概念2. 进…...
药流和人流哪个恢复快?术后修护行业洞察与实用指南
意外怀孕后,药流和人流的恢复差异及术后修护,是女性关注的核心话题,也是孕产修护领域的重点议题。术后修护作为缩短恢复周期、减少并发症的关键,其科学合理性直接影响女性生殖健康。本文结合行业现状与实用经验,探讨药…...
电子工程师眼中的城市电路板:无人机航拍引发的职业思考
1. 电子工程师的强迫症与无人机视角的冲突作为一名从业十年的电子工程师,我完全理解小舒所说的那种"焊盘上的电阻、电容不能歪"的强迫症。这种职业习惯已经深深烙印在我们的工作方式中 - 从PCB布局到元件焊接,从线缆走线到机箱布线,…...
毕业党速看:这款 AI 论文神器太疯狂,输入标题直接生成万字长文
赶 due 党、论文特困生直接狂喜!谁懂啊家人们,以前写论文从选题到憋出万字初稿,至少得熬半个月,现在输入一个论文标题,短短 20 分钟就能自动生成结构完整、逻辑通顺、带真实参考文献的万字长文,从摘要、引言…...
PINN 融合机器学习重构科学计算范式,物理先验赋能神经网络高效求解偏微分方程
PINN 即物理信息神经网络,将物理定律(如偏微分方程、边界条件)以约束损失形式嵌入机器学习框架,实现数据驱动与物理先验的融合。它依托神经网络的拟合能力,在训练中同时最小化观测数据误差与物理方程残差,无…...
OpenClaw、Agent、Skill、MCP 深度解读与区分分析
引言:AI从"对话"到"行动"的范式转移在人工智能的发展历程中,我们正经历一场深刻的范式转移。传统的AI工具(如早期ChatGPT)主要扮演"建议者"角色,能生成文本、提供建议,但无法…...
OpCore-Simplify:黑苹果配置的智能革命——从手动调试到自动化生成的转变
OpCore-Simplify:黑苹果配置的智能革命——从手动调试到自动化生成的转变 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 传统黑苹果配置需…...
ALOHA开源双臂机器人系统全攻略:从核心价值到深度实践
ALOHA开源双臂机器人系统全攻略:从核心价值到深度实践 【免费下载链接】aloha 项目地址: https://gitcode.com/gh_mirrors/al/aloha 一、探索ALOHA:重新定义低成本双手机器人开发 什么是ALOHA系统 ALOHA(A Low-cost Open-source Ha…...
2026年全链路性能测试方案选型与实施指南
2026年全链路性能测试方案选型与实施指南 全链路性能测试已从单一功能验证转向覆盖多终端、多场景的质量保障,需结合硬件层、服务层、决策层三类方案才能应对行业复杂挑战。主流方案包括云真机兼容性测试(硬件层)、SaaS化压力测试平台&#x…...
告别多显示器DPI混乱:SetDPI让Windows显示体验重获新生
告别多显示器DPI混乱:SetDPI让Windows显示体验重获新生 【免费下载链接】SetDPI 项目地址: https://gitcode.com/gh_mirrors/se/SetDPI 问题发现:当多显示器成为工作障碍 多显示器用户最常遇到的显示难题是什么?想象这样的场景&…...
如何用mootdx解决金融数据获取难题?探索量化分析的高效路径
如何用mootdx解决金融数据获取难题?探索量化分析的高效路径 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 问题发现:金融数据分析的三大痛点 当你准备构建量化交易模型时…...
