Tomcat的架构

一、Tomcat总体架构


1.1 Tomcat工作流程

在这里插入图片描述


1.2 Tomcat 容器处理请求流程

在这里插入图片描述

Servlet规范: http服务器收到http请求后,会将请求交给Servlet容器来处理。Servlet容器通过Servlet接口调用具体的业务类。Servlet接口和Servlet容器这一整套内容就是Servlet规范
Tomcat的两个重要身份: 1、http服务器 2、Tomcat是一个Servlet容器
在这里插入图片描述

用户请求URL资源时处理流程

  1. Http服务器,封装用户请求信息,封装成ServletRequest对象
  2. Servlet容器根据URL和Servlet的映射关系,调用对应的具体的Servlet
  3. 如果对应的Servlet未被创建,则使用反射创建Servlet并且调用其init()方法进行初始化
  4. 调用Servlet的service()方法,处理请求,请求处理结果封装成ServletResponse对象
  5. ServletResponse对象交还给HTTP服务器,Http服务器对客户端进行响应。



1.3 Tomca核心功能组件

Tomcat有两个非常重要的功能

  1. 和客户端进行交互、使用socket通信,将字节流和Request/Response等对象进⾏转换
  2. Servlet容器来处理具体的业务逻辑

在这里插入图片描述

Tomcat有两个核心组件,连接器(Connector) 和容器(Container) 来完成Tomcat的两大核心功能

  1. 连接器:负责对外交流,处理Socket连接,负责网络字节流与Request和response对象的转换
  2. 容器:负责内部处理,加载管理Servlet以及具体的Request请求



1.4 Tomcat连接器组件Coyote

在这里插入图片描述

Coyote是Tomcat中连接器的组件名称,是对外的接口。客户端通过Coyote与服务器建立连接、发送请求、并接受响应

  1. Coyote封装了底层的网络通信,包括Socket请求和响应
  2. Coyote使用Catalina容器,与具体的请求协议及IO操作方式完全解耦
  3. Coyote将Socket输入,转换为Request对象,进一步封装后(ServletRequest)交由Catalina容器进行处理,请求处理完成后,Catalina通过Coyote提供的Response对象,将处理结果进行客户端返回。
  4. Coyote负责的是具体协议**(应用层)和IO(传输层)**的相关内容

1.4.1 Coyote支持的IO模型和协议

在这里插入图片描述

  1. Tomcat在8.0之前,Tomcat默认的IO模型为BIO,阻塞式I/O ,8.0之后默认的I/O模型为NIO非阻塞I/O
  2. NIO、NIO2、APR 在性能上,都要优于以往的BIO。

1.4.2 Coyote的内部组件

在这里插入图片描述

Coyote组件的作用
Endpoint : Endpoint是Coyote的通信端点,即通讯监听接口,是具体Socket接收和发送处理器,是对传输层的抽象,因此也说Endpoint是用来实现TCP/IP协议的
Processor: Processor是Coyote协议处理接口,如果说Endpoit是用来实现TCP/IP协议的,那么Processor就是实现Http协议的。Processor接收来自Endpoint的Socket,读取字节流解析成Tomcat封装的Request和Response对象,并且通过Adapter适配器,转换成容器需要的ServletRequest对象进行处理。
ProtocolHandler:Coyote协议接口,通过Endpoint和Processor,实现针对具体协议的处理能力。Tomcat按照协议和I/O提供了6个实现类,AjpNioProtocol、AjpNio2Protocol、AjpAprProtocol、Http11NioProtocol、Http11Nio2Protocol、Http11AprProtocol
Adapter 由于协议不同,客户端发过来的请求信息也不同,Tomcat定义了自己的Request类来封装这些请求信息。ProtocolHandler接口负责解析请求,生成TomcatRequest类。但是Servlet容器接受的对象标准是ServletRequest对象,所以需要一个适配器。Tomcat设计者引入了CoyoteAdapter,这是一个适配器模式的应用。连接器调用CoyoteAdapter的service方法,将tomcat 的标准Request对象,转换成ServletRequest,再调用容器进行业务处理。


1.5 Tomcat的Servlet容器-Catalina

在这里插入图片描述

Tomcat是一个由一系列可配置的组件构成的web容器,而Catalina是Tomcat的servlet容器。Catalina是servlet容器实现,包含了之前讲到的所有的容器组件。它通过松耦合的方式集成Coyote ,以完成按照请求协议进行数据读写。同时,它还包括我们的启动入口、Shell程序等。**Tomcat本质上就是一款Servlet容器,**因为Catalina才是Tomcat的核心,其他模块都是为Catalina提供支持的。比如Coyote提供链接通信,Jasper提供JSP引擎,Naming提供JNDI服务、JULI提供日志服务。

1.5.1 Catalina的结构

在这里插入图片描述

一般来说,认为Tomcat就是一个Catalina的实例,Tomcat启动后就会初始化这个实例,Catalina实例再通过server.xml去完成其他实例的创建。创建并管理一个server实例,server创建并管理多个服务service,每个Service可以有多个Connector和一个Container,一个Catalina实例(容器) 对应一个Server实例 包含多个Service实例,每个service实例,可以有多个Connector示例和一个Container实例
Catalina 负责解析Tomcat的配置文件,server.xml 以此来创建server组件,并进行管理。
Server 服务器,包括整个Catalina Servlet容器,和其他组件,负责组装启动Servlet引擎、Tomcat连接器。Server通过实现Lifecycle接口,提供了优雅的启动和关闭整个系统的方式。
Service 是server的内部组件,一个Server可以包含多个Service。service将多个Connector组件绑定到一个Container
Connector 连接器,处理与客户端的通信,接收客户端请求,转发给对应处理模块后向客户返回处理结果
Container 容器,负责处理用户的servlet请求,返回对象给web用户的模块


1.5.2 Container组件的含义

Container组件下包含几个具体的组件,分别是Engine、Host、Context、Wrapper ,并且他们是父子关系。

  1. Engine 标识整个Catalina的Servlet引擎,来管理多个虚拟Host站点、一个Service只能有一个Engine,一个Engine可以包含多个Host
  2. Host 代表一个虚拟主机、可以给Tomcat配置多个虚拟主机地址,一个虚拟主机下面又可以包含多个Context
  3. Context 标识一个应用程序,一个应用程序下可以有多个Wrapper
  4. Wrapper 标识一个Servlet,作为容器的最底层,不包含其他子容器。
posted @ 2022-12-20 18:12  青花石  阅读(16)  评论(0)    收藏  举报  来源