当前位置: 首页 > news >正文

Tomcat架构分析

Tomcat的核心组件

Tomcat将请求器和处理器分离,使用多种请求器支持不同的网络协议,而处理器只有一个。从而网络协议和容器解耦。
在这里插入图片描述

Tomcat的容器

Host:Tomcat提供多个域名的服务,其将每个域名都视为一个虚拟的主机,在每个虚拟主机下包含多个web应用。
Context:一个应用的上下文。一个虚拟主机(域名)下可以有多个应用。
Wrapper:Servlet的包装类。
Tomcat使用责任链来实现客户端的请求处理。

Pipeline和Value

Engine,Host,Context,Wrapper共用一个pipeline实例,各自在自己的层面上又都实现了独属于自己的Value处理器。

  • 责任链模式:Tomcat使用责任链模式,将请求处理流程划分为一系列阶段。每个阶段由相应组件的管道负责,形成一个责任链。当一个请求到达时,它会依次经过责任链中的每个阶段,每个阶段都有机会对请求进行处理。

  • 各组件的处理阶段:每个组件(Engine、Host、Context、Wrapper)的管道定义了它们感兴趣的处理阶段,并在相应的阶段中执行特定的逻辑。这样,每个组件都能够在请求处理过程的不同阶段执行自己的操作。

  • 共享的Pipeline:尽管整个请求处理流程共用一个管道,但在责任链的每个阶段,可以通过判断当前处理的组件来确定是否执行该组件的处理逻辑。这样,每个组件在其关心的阶段会执行相应的操作,而在其他阶段则会跳过。

在这里插入图片描述
在Connector启动后Endpoint会启动线程来监听服务器端口,并且在接收到请求后调用Processor来进行数据读取。

Mapper和MapperListener

当Processor读取到客户端请求后,会按照请求地址映射到相应的容器处理。
Mapper用于按照映射规则查找容器,MapperListener用于监听容器变化,当容器卸载或者注册,会变更容器信息。

在这里插入图片描述

Tomcat的请求处理

应用服务器的请求处理开始于监听socket端口接收到的命令,结束于将服务器的处理结果写入socket输出流。
Connector将请求按照既定协议读取,并且将其封装为与协议无关的对象,通过Mapper映射给处理的Servlet进行处理,Servlet生成处理结果,并且将其写入socket输出流中。
在这里插入图片描述

Engine,Host,Context共用一个pipeline,执行的也是一个pipeline,只不过value包含有其归属的属性,执行Engine的pipeline时,只执行属于Engine的value

执行流程:

  1. Endpoint的socket监听到消息,接收消息
  2. Process处理消息,封装对象
  3. Mapper根据请求地址将消息对象传递给对应容器
  4. Engine执行其pipeline中的value
  5. Host执行其pipeline中的value
  6. Context执行其pipeline中的value
  7. wrapper执行其pipeline中的value
  8. filterchain执行过滤器
  9. 交给servlet处理

相关文章:

Tomcat架构分析

Tomcat的核心组件 Tomcat将请求器和处理器分离,使用多种请求器支持不同的网络协议,而处理器只有一个。从而网络协议和容器解耦。 Tomcat的容器 Host:Tomcat提供多个域名的服务,其将每个域名都视为一个虚拟的主机,在…...

旧项目集成阿里云滑动验证码(web和H5方式)

简述 旧项目集成阿里云滑动验证码(web和H5方式) 适用于servlet和HTML项目,VUE + springboot请看另一篇文档 前情提示 系统: 一说 部分截图、链接等因过期、更换域名、MD语法等可能不显示,可联系反馈(备注好博文地址),谢谢❤带有​​#号、删除线、不操作、不执行​…...

机器人内部传感器阅读梳理及心得-速度传感器-数字式速度传感器

在机器人控制系统中,增量式编码器既可以作为位置传感器测量关节相对位置,又可作为速度传感器测量关节速度。当作为速度传感器时,既可以在模拟量方式下使用,又可以在数字量方式下使用。 模拟式方法 在这种方式下,需要…...

【vue+element ui】大屏自适应中el-select下拉内容在低分辨率下显示不全问题解决

目录 背景 现象 解决方案 背景 最近要把一个1920px*1080px的大屏改成自适应的;最低适配到1028px*720px; 现象 自适应适配改完之后 将电脑屏幕改成1028px*720px分辨率后,下拉显示正常 通过谷歌浏览器设置Toggle device toolbar为1028px*…...

前端架构: 脚手架之多package项目管理和架构

多package项目管理 1 )多package项目管理概述 通常来说,当一个项目变大了以后,我们就要对这个项目进行拆分在前端当中,对于项目进行拆分的方式,通常把它称之为javascript包管理需要使用一个工具叫做 npm (Node Packag…...

【C# 多线程】如何停止正在运行中的子线程

如何停止正在运行中的子线程 通过协作式取消模式强制终止线程(可能存在资源不能及时释放的泄漏风险) 通过协作式取消模式 在线程函数中,你可以周期性地检查一个标志位,以确定是否应该停止线程。该标记位可以是共享变量&#xff0…...

服务器机房安全守护:五大物理安全实践

服务器机房是数字企业的心脏。无论是企业家还是经验丰富的IT专业人员,都知道服务器机房的安全性至关重要。如果没有采用适当的物理安全措施,其服务器很容易受到盗窃、人为破坏和自然灾害的破坏。 在保护服务器机房的领域内,需要采用多方面的…...

spring boot 修复 Spring Framework URL解析不当漏洞(CVE-2024-22243)

漏洞描述 当应用程序使用UriComponentsBuilder来解析外部提供的URL&#xff08;如通过查询参数&#xff09;并对解析的URL的主机执行验证检查时可能容易受到Open重定向攻击和SSRF攻击&#xff0c;导致网络钓鱼和内部网络探测等。 受影响产品或系统 6.1.0 < Spring Framew…...

VR全景HDR拍摄教程

什么是HDR&#xff1f; HDR可以用在哪里&#xff1f; 书面解释&#xff1a;HDR&#xff08;高动态范围 High Dynamic Range&#xff09;摄影&#xff0c;是摄影领域广泛使用的一种技术。 是不是有点懵&#xff1f; 我们来看一个实际的拍摄现场环境&#xff0c;你就懂了 我们…...

hive执行select count(1)返回0

背景&#xff1a; 做数据质量检核任务的时候&#xff0c;有些数据表有数据&#xff0c;直接查hive执行select count(1) from table返回的值一直是0 问题原因&#xff1a; hive通过select count(1)或者select count(*) 查询的是元数据库里面的rownum,如果数据表数据是通过load、…...

3D Gaussian splatting 协方差矩阵 球谐函数 简单理解

3D Gaussian splatting 是一种图形和视觉处理技术&#xff0c;常用于体积渲染、点云渲染和其他应用中&#xff0c;以便对数据进行平滑或重建。在这个上下文中&#xff0c;高斯分布&#xff08;或高斯“splat”&#xff09;用于表示单个数据点&#xff08;如一个点云中的点&…...

代码随想录算法刷题训练营day27:LeetCode(39)组合总和、LeetCode(40)组合总和 II、LeetCode(131)分割回文串

代码随想录算法刷题训练营day27&#xff1a;LeetCode(39)组合总和、LeetCode(40)组合总和 II、LeetCode(131)分割回文串 LeetCode(39)组合总和 题目 代码 import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List;clas…...

docker 容器修改端口和目录映射

一、容器修改端口映射 一般在运行容器时&#xff0c;我们都会通过参数 -p&#xff08;使用大写的-P参数则会随机选择宿主机的一个端口进行映射&#xff09;来指定宿主机和容器端口的映射&#xff0c;例如 docker run -it -d --name [container-name] -p 8088:80 [image-name]…...

echarts鼠标事件

鼠标事件支持方法 ECharts 支持常规的鼠标事件类型&#xff0c;包括 ‘click’、 ‘dblclick’、 ‘mousedown’、 ‘mousemove’、 ‘mouseup’、 ‘mouseover’、 ‘mouseout’、 ‘globalout’、 ‘contextmenu’ 事件 简单实例 // 基于准备好的dom&#xff0c;初始化EChar…...

【北京迅为】《iTOP-3588开发板网络环境配置手册》第2章 电脑、开发板直连交换机或路由器

RK3588是一款低功耗、高性能的处理器&#xff0c;适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用&#xff0c;RK3588支持8K视频编解码&#xff0c;内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…...

6.5 共享数据

本节介绍Android的四大组件之一ContentProvider的基本概念和常见用法&#xff1a;首先说明如何使用内容提供器封装内部数据的外部访问接口&#xff0c;然后阐述如何使用内容解析器通过外部接口操作内部数据&#xff0c;最后叙述如何利用内容解析器读写联系人信息&#xff0c;以…...

SpringBoot之Session新增、删除、获取配置与使用

SpringBoot之Session新增、删除、获取配置与使用 文章目录 SpringBoot之Session新增、删除、获取配置与使用1. SpringBoot版本2. 定义增删查Session的类3. 定义Session的监听器4. 使用 自定义根据sessionId进行session的新增、删除、获取操作 1. SpringBoot版本 <parent>…...

Hive UDF 札记

低版本的udf就不说了&#xff0c;太老了&#xff0c;说现在主流的。 1&#xff1a;initialize 方法的进一步理解&#xff1a; 在Apache Hive中&#xff0c;用户自定义函数&#xff08;UDF&#xff09;的initialize方法是一个可选的方法&#xff0c;它属于Hive UDF的生命周期…...

npm已经配置淘宝源仍然无法使用

使用npm命令安装Taro框架的时候&#xff0c;尽管已经设置淘宝源但是仍然无法下载&#xff0c;提示错误 >npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED npm ERR! request to https://registry.npm.taobao.org/cnpm failed, reason: certificate h…...

Qt5转Qt6笔记

背景 现在的主程序和扩展的dll库都是qt5环境下编译发布的。但是想以后用qt6。所以考虑是否能够在qt5中兼容qt6的动态链接库进行加载。于是...就开始吧 开始 2024-02-23 安装好qt6后&#xff0c;在vs2019中需要新增qt6版本的安装路径。目录在&#xff1a;扩展->QT VS Tools…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

软件工程 期末复习

瀑布模型&#xff1a;计划 螺旋模型&#xff1a;风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合&#xff1a;模块内部功能紧密 模块之间依赖程度小 高内聚&#xff1a;指的是一个模块内部的功能应该紧密相关。换句话说&#xff0c;一个模块应当只实现单一的功能…...

加密通信 + 行为分析:运营商行业安全防御体系重构

在数字经济蓬勃发展的时代&#xff0c;运营商作为信息通信网络的核心枢纽&#xff0c;承载着海量用户数据与关键业务传输&#xff0c;其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级&#xff0c;传统安全防护体系逐渐暴露出局限性&a…...