tomcat工作原理详解 tomcat工作原理图

Tomcat组件以及服务器和服务Tomcat中的Server是顶层组件,代表Tomcat的运行实例。一个JVM将只包含一个服务器。为了方便扩展,在服务器端引入了**器组件;为了便于JNDI集成,引入了GlobalNamingResources组件。服务器最重要的组成部分是服务。一个服务器包括多个服务。在Tomca...

Tomcat组件

以及服务器和服务

Tomcat中的Server是顶层组件,代表Tomcat的运行实例。一个JVM将只包含一个服务器。为了方便扩展,在服务器端引入了**器组件;为了便于JNDI集成,引入了GlobalNamingResources组件。服务器最重要的组成部分是服务。

一个服务器包括多个服务。

在Tomcat中,服务组件是服务的抽象,一个服务器可以包含多个服务。服务组件负责从接收客户端请求到处理请求的整个过程。它包含几个接收客户端消息的连接器组件和一个处理请求的引擎组件。

此外,服务组件还包含执行器组件,每个执行器都是一个线程池,可以为服务中的其他组件提供线程资源来执行任务。

连接器

Tomcat的核心可以认为主要由连接器组件和容器组件组成,其中连接器负责处理客户端连接,容器负责逻辑处理请求并将结果返回给客户端。

不同的连接对应不同的通信协议。

连接器的主要职责是接收客户端连接并接收消息,消息由连接器解析并发送到容器进行处理。Tomcat支持不同的通信协议,如HTTP协议、AJP(Apache JServ协议)协议等。,所以它需要不同的连接器组件,每个协议对应一个连接器组件。

另外,不同类型的网络I/O有不同的连接器组件内部实现,可分为阻塞I/O和非阻塞I/O,以HTTP协议为例,看看阻塞I/O和非阻塞I/O的连接器内部实现有何不同。

生物连接器

生物连接器组件

阻止I/O的连接器主要由三个组件组成:

Http11Protocol组件,是HTTP协议1.1版本的抽象,主要包含JIoEndpoint组件和Http11Processor组件。Tomcat启动时,JIoEndpoint内部的Acceptor开始**某个端口,一个请求到来后将被扔进线程池Executor,由线程池进行任务处理。处理过程主要是通过Http11Processor组件对HTTP协议解析并传递到Engine容器。Mapper组件,负责对客户端请求进行路由,即通过请求地址找到对应的Servlet。CoyoteAdaptor组件,将Connector和Container适配起来的适配器。

NIO连接器

不阻塞I/O的连接器的结构类似于BIO连接器的结构。主要区别是:

Http11Protocol组件改成Http11NioProtocol组件;JIoEndpoint组件改成NioEndpoint;Http11Processor组件改成Http11NioProcessor组件,功能基本类似。增加了一个Poller组件,负责轮询多个客户端连接,不断检测各个连接是否有可读数据,如果有客户端可读,则尝试进行读取并解析消息报文。

容器

Tomcat有四个级别的容器,即引擎、主机、上下文和包装器。Engine代表全局Servlet引擎。每个服务组件只能包含一个引擎容器组件,但是引擎组件可以包含几个主机容器组件。

Tomcat容器

发动机

除了主机,引擎容器还包括引擎容器级别的**器组件(Listener)、AccessLog组件(Log)、集群组件(集群功能)、管道组件(请求处理管道)和领域组件(用户权限)。

主持

主机组件代表虚拟主机的抽象,一个虚拟主机可以存储多个Web应用的抽象,即一个主机可以包含多个上下文容器。

与引擎类似,主机容器也包含侦听器、访问日志、集群、管道和领域,但这些组件都在主机容器级别。

语境

Context组件是一个Web应用的抽象,当我们开发的Web应用部署到Tomcat上时,会生成一个Context对象。

上下文包括**器、访问日志、管道和领域等应用级组件,以及加载器组件(加载web应用资源)、管理器组件(会话管理)、命名资源住院(命名资源)、映射器组件(Servlet映射器)和包装器容器。

包装材料

包装器容器是Tomcat中四个容器中最小的,对应servlet,一个包装器对应一个servlet。

包装器包括Servlet、ServletPool(Servlet对象池)和管道组件(处理管道)。

Tomcat的请求处理过程

客户端请求到达Tomcat后的处理流程如上图所示:

当Tomcat启动后,Connector的接收器Acceptor会**是否有客户端连接。一旦**到客户端连接,则将连接交给线程池Executor,开始执行请求响应任务。Http11Processor负责从客户端连接中读取Http报文并进行解析,解析后的报文封装成Request对象。Maper根据Http协议请求的URL值和Host属性匹配由哪个Host、哪个Context和哪个Wrapper容器来处理请求。CoyoteAdaptor负责将Connector组件和Engine容器连接起来,将Request对象和Response对象传递到Engine容器中。Engine容器的请求处理管道开始工作,管道里包括若干Valve,每个Valve都负责一些处理逻辑。Engine容器的请求处理管道工作完成后,再依次交给Host容器的处理管道、Context容器的处理管道和Wrapper容器的处理管道。最后将结果输出到客户端。

本文来自少年我念你投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/502068.html

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
() 0
上一篇 04-13
下一篇 04-13

相关推荐

  • eclipse使用tomcat启动项目 eclipse中配置tomcat的步骤

    很高兴你能看懂这篇长篇大论的文章。这里不详细介绍***ven。对于初学者来说,你只需要知道***ven可以用来管理jar包和自动化部署。例如,自动化将项目制作成jar包,包括可执行的jar包,自动将项目部署到远程web服务器,并自动压缩它们。可以多关注我的头条号。后面你会分享介绍

    2023-07-21 17:25:01
    310 0
  • tomcat启动war包原理 tomcat部署war包步骤

    Springboot项目war包模式启动流程对于项目部署的需要,当前项目需要通过war包进行部署,这就带来了一个问题,就是原来***in方法中的一些逻辑会失效,这样就会出现一些不可预知的错误#1。这里加载了一个类路径下的json文件,它被加载到系统属性中,但是在随后的运行中出现了Nu

    2023-07-20 11:56:01
    745 0
  • tomcat版本号查看 教你如何查看tomcat版本信息

    背景系统漏洞扫描程序在Tomcat版本中发现了一个安全绕过漏洞。百度搜索了该漏洞的信息:Apache Tomcat中存在安全绕过漏洞。攻击者可以通过使用恶意的Web应用程序来利用此漏洞,从而绕过安全限制。以下版本受到影响:Apach Tomcat 9.0.0.M1到9.0.0.M9,8.5.0到8.5.4,8.0.0.RC1到

    2023-07-13 00:28:01
    980 0
  • mac配置tomcat教程 tomcat启动遇到问题

    前言,在面试高级开发时,很容易被问到关于并发性的问题!高并发系统架构面试时被问到该怎么说?首先,看看你能不能回答这些问题。不行的话,把我分享的文档拿来,复习一下!面试必问秒杀系统需求解高并发系统流量削如何把缓存银弹无限前置提高响服务集群化nginx、lvs、hapro

    2023-07-11 13:14:01
    616 0

评论列表

联系我们

在线咨询: QQ交谈

邮件:admin@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信