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