当前位置: 首页 > 图灵资讯 > 技术篇> 5分钟了解Tomcat的组成和工作原理

5分钟了解Tomcat的组成和工作原理

来源:图灵教育
时间:2023-07-07 16:45:26

5分钟了解Tomcat的组成和工作原理_客户端

  Tomcat组件Server和Service

  Server是Tomcat中的顶级组件,它代表了Tomcat的运行实例,一个JVM只包含一个Server。为便于扩展,Server中引入了监听器Listener组件;GlobalNamingResources组件被引入,以方便集成JNDI。Server中最重要的组件是Service。

5分钟了解Tomcat的组成和工作原理_客户端_02

  一个Server包括多个Serviceer

  在Tomcat中,Service组件是服务的抽象,一个Server可以包含多个Service。Service组件负责从接收客户端请求到处理请求的整个过程,包含多个客户端消息 Connector 组件和处理请求 Engine 组件。

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

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

5分钟了解Tomcat的组成和工作原理_HTTP_03

  不同的Connect对应不同的通信协议

  Conector的主要职责是接收客户端连接和接收消息报告,分析后发送到容器中。因为Tomcat支持不同的通信协议,如HTTP协议AJP(Apache JServ Protocol)协议等,因此需要不同的Conector组件,每个协议对应一个Conector组件。

  此外,不同类型的网络I/O,Conector组件的内部实现也不同,可分为阻塞I/O和非阻塞I/O。以HTTP协议为例,看看阻塞I/O和非阻塞I/OConector内部实现的区别。

  BIO Connector

5分钟了解Tomcat的组成和工作原理_Server_04

  BIO Conector组件

  Connector主要由三个组件组成: HTTP11Protocol组件是HTTP协议1.1版本的抽象组件,主要包括JIOEndpoint组件和HTTP11Procesor组件。当Tomcat启动时,JIoEndpoint内部的Acceptor开始监控某个端口。当一个请求到来时,它将被扔进线程池Executor,任务将由线程池处理。处理过程主要是通过HTTP11Procesor组件对HTTP协议进行分析并传输到Engine容器。 Mapper组件负责路由客户端请求,即通过请求地址找到相应的servlet。 Conector和Container适配Conector组件。

  NIO Connector

5分钟了解Tomcat的组成和工作原理_Server_05

  Connector的非阻塞I/O结构类似于BIOO Connector,主要区别在于: Htttp11Protocol组件改为Http11NioProtocol组件;Jioendpoint组件改为Nioendpoint;Http11Procesor组件改为Http11NioProcesor组件,功能基本相似。 增加了一个Poller组件,负责轮流询问多个客户端连接,并不断检测每个连接是否有可读数据。如果有客户端可读,请尝试阅读和分析消息报告。 Container

  Tomcat内部有四个级别的容器,即Enginee、Host、Context和Wrapper。Engine代表全球Servlet发动机,每个Service组件只能包含一个Engine容器组件,但Engine组件可以包含多个Host 容器组件。

5分钟了解Tomcat的组成和工作原理_HTTP_06

  Tomcat容器

  Engine

  除Host外,Engine容器还包括Engine容器级Listener组件(监听器)、Accesslog组件(日志)、Cluster组件(集群功能)、Pipeline组件(请求管道处理)、Realm组件(用户权限)。

  Host

  Host组件代表虚拟主机的抽象,可以存储在虚拟主机中一个Host可以包含多个Context容器,放置多个Web应用程序的抽象。

  类似于Engine,Host容器也包含Listener。、AccessLog、Cluster、Pipeline、Realm这些组件,但这些组件都是Host容器级别。

  Context

  Context组件是Web应用程序的抽象,当我们开发的Web应用程序部署到Tomcat后运行时,将生成Context对象。

  Context包含应用级Listener、AccessLog、Pipeline、Realm组件还包括Loader组件(加载web应用资源)、Manager组件(会话管理)、NamingResource住院(命名资源)、Mapper组件(Servlet映射器)和Wrapper容器。

  Wrapper

  Wrapper容器是Tomcat四级容器中最小的,对应Servlet,一个Wrapper对应Servlet。

  Wraper中包含的组件有Servlet、ServletPool(Servlet对象池)和Pipeline组件(处理管道)。Tomcat的请求处理过程

5分钟了解Tomcat的组成和工作原理_HTTP_07

  客户端到达Tomcat后请求的处理流程如上图所示: 当Tomcat启动时,Conector的接收器Acceptor将监控是否有客户端连接。 一旦听到客户端连接,将连接交给线程池Executor,并开始执行请求响应任务。 Http11Procesor负责从客户端连接中读取Http报文并进行分析,分析后的报文包装成Request对象。 根据Http协议要求的URL值和Host属性,Maper匹配哪个Host?、处理请求的Context和Wraper容器。 Coyoteadaptor负责将Conector组件与Engine容器连接起来,将Request对象和Response对象传输到Engine容器中。 Engine容器的请求处理管道开始工作,管道中包含了几个Valve,每个Valve都负责一些处理逻辑。 Engine容器要求处理管道完成后,依次交给Host容器处理管、Context容器处理管和Wraper容器处理管。最后,将结果输出到客户端。

上一篇:

依赖倒转原则

下一篇:

里氏替换原则