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处理

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

git忽略某些文件(夹)更改说明

概述 在项目中,常有需要忽略的文件、文件夹提交到代码仓库中,在此做个笔录。 一、在项目根目录内新建文本文件,并重命名为.gitignore,该文件语法如下 # 以#开始的行,被视为注释. # 忽略掉所有文件名是 a.txt的文件. a.txt # 忽略所有生成的 java文件, *.java # a.j…

java演唱会网上订票购票系统springboot+vue

随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的交换和信息流通显得特别重要。因此,开发合适的基于springboot的演唱会购票系统的设计与实现成为企业必然要走…

【MySQL】内置函数 -- 详解

一、日期函数 日期:年月日时间:时分秒 1、获得年月日 2、获得时分秒 3、获得时间戳 4、在日期的基础上加日期 5、在日期的基础上减去时间 6、计算两个日期之间相差多少天 7、获得当前时间 ⚪练习 (1)记录生日 (2&…

Qt中关于信号与槽函数的思考

信号与槽函数的思考 以pushbutton控件为例,在主界面上放置一个pushbutton控件,点击右键选择关联槽函数,关联一个click函数,如下图所示: 在该函数中,实现了一个点击pushbutton按钮后,弹出一个窗…

德人合科技 | 天锐绿盾终端安全管理系统

德人合科技提到的“天锐绿盾终端安全管理系统”是一款专业的信息安全防泄密软件。这款软件基于核心驱动层,为企业提供信息化防泄密一体化方案。 www.drhchina.com 其主要特点包括: 数据防泄密管理:天锐绿盾终端安全管理系统能够确保数据在创…

淘宝商品数据爬取商品信息采集数据分析API接口详细步骤展示(含测试链接)

01 数据采集 数据采集是数据可视化分析的第一步,也是最基础的一步,数据采集的数量和质量越高,后面分析的准确的也就越高,我们来看一下淘宝网的数据该如何爬取。点此获取淘宝API测试key&密钥 淘宝网站是一个动态加载的网站&a…

pytorch 图像的卷积操作

目录 1.卷积核基本参数说明 2.卷积相关操作说明 3.卷积操作示例 1.卷积核基本参数说明 pytorch进行图像卷积操作之前,需要把图像素格式进行分离,比如一个图像为rgb格式,把R,G,B取出来作为一个ndarray,前文讲过&#…

基于串流技术的p2p共享桌面共享方案

研究远控有一定时间了,但真正落地运用的不多,所以也不太上心,平时也只是自己diy玩玩,远程共享看看电视剧。 最近生成式ai大火,直接带动了gpu应用的相关场景,相关场景,但gpu卡又贵,对…

TP6上传图片到OSS(记录贴)

1&#xff0c;先安装&#xff0c;我使用composer安装 在项目的根目录运行composer require aliyuncs/oss-sdk-php 2,安装成功以后vendor目录下可以看到如图&#xff1a; 3&#xff0c;上传图片代码如下&#xff1a; <?php namespace app\controller;use app\BaseControll…

vm虚拟机的下载与安装(更新时间24/2/28)

首先进入vm官网点击跳转 进入products 进入Workstation Pro 点击DOWNLOAD TRIAL 点击DOWNLOAD NOW 到这里只需要等待下载完成就行了 安装就是正常软件程序的安装方法&#xff0c;除了自定义一下安装位置&#xff0c;其他的直接确定 许可证密钥 在网络上有很多随便一搜…

基于springboot+vue的可盈保险合同管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

2024年 前端JavaScript Web APIs 第一天 笔记

1.1 -声明变量const优先 1.2 -DOM树和DOM对象 1.3 -获取DOIM元素 1.4 -DOM修改元素内容以及年会抽奖 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content&quo…

vue中 input disable后无法触发点击事件

问题&#xff1a;input标签为disabled后&#xff0c;点击事项无效&#xff1b;当点击文字**“请选择”**时无法触发点击事件&#xff0c;其父标签的其余位置均可触发 解决&#xff1a;只需要在input标签中添加 style“pointer-events:none” 即可 pointer-events: none 作用是…

【Linux】协程简介

【Linux】协程简介 一、什么是协程&#xff1f;简介优点 二、为什么使用协程&#xff1f;三、协程的种类1、对称协程2、非对称协程 四、协程栈1、静态栈2、分段栈3、共享栈4、虚拟内存栈 五、协程调度1、栈式调度2、星切调度3、环切调度 六、常见协程库参考文献 一、什么是协程…

Vue+Flask电商后台管理系统

在这个项目中&#xff0c;我们将结合Vue.js前端框架和python后端框架Flask&#xff0c;打造一个功能强大、易于使用的电商后台管理系统 项目演示视频&#xff1a; VueFlask项目 目录 前端环境&#xff08;Vue.js&#xff09;&#xff1a; 后端环境&#xff08;python-Flask&…

基于RISC-V架构的通信DSP的设计以及在5G RedCap基带中的应用(五)-基于RISC-V的RedCap DSP在5G基带中的应用

4 基于RISC-V的RedCap DSP在5G基带中的应用 4.1 基带处理器的关键任务和性能需求 基带处理器是移动通信设备中的关键部件&#xff0c;负责处理无线信号&#xff0c;包括信号的接收、发送和处理。在5G通信系统中&#xff0c;基带处理器的关键任务和性能需求包括以下几个方面&a…

【DAY05 软考中级备考笔记】线性表,栈和队列,串数组矩阵和广义表

线性表&#xff0c;栈和队列&#xff0c;串数组矩阵和广义表 2月28日 – 天气&#xff1a;阴转晴 时隔好几天没有学习了&#xff0c;今天补上。明天发工资&#xff0c;开心&#x1f604; 1. 线性表 1.1 线性表的结构 首先线性表的结构分为物理结构和逻辑结构 物理结构按照实…

基于Redo log Undo log的MySQL的崩溃恢复

基于Redo log & Undo log的MySQL的崩溃恢复 Redo log Undo log Redo log 重做日志,记录,修改过的数据 Undo log 回滚日志,记录修改之前的数据 两个我不做详细的介绍了,redo log就是记录哪些地方被修改了 undo log是记录修改之前我们的数据长什么样 更新流程 我们来捋一…

【双碳】Acrel-1000DP分布式光伏并网及数据采集与控制的方式

摘要&#xff1a; 在“双碳”、整县分布式光伏等相关政策的目标背景下&#xff0c;分布式新能源广泛建设&#xff0c;对分布式新能 源规划的科学性提出更高的要求&#xff0c;有源配电网调度面临大规模分布式新能源参与后的运行管理问题&#xff0c;增 大了电网运行管理的风险和…

索引使用规则3——SQL提示

SQL提示&#xff1a;当一个字段被多个索引时&#xff0c;系统会自动选择使用哪个索引&#xff0c;但是如果想自己选择使用哪个索引&#xff0c;需要加入一些认位的提示来达到优化操作的目的。 可以看到name这个字段被索引了两次 查看系统选择哪个索引 explain select * from t…