专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

Tomcat 系统架构与原理剖析

内容输出来源:拉勾教育Java高薪训练营

1. 浏览器访问服务器的流程

浏览器访问服务器使用的是Http协议Http协议是应用层协议,用于定义数据通信的格式,具体的数据传输使用的是TCP/IP协议

79_1.png

2. Tomcat 系统总体架构

Tomcat是一个Http服务器(能够接受并且处理http请求,所以Tomcat是一个Http服务器)。

2.1. Tomcat 处理请求大致流程

79_2.png

HTTP服务器接收到请求之后把请求交给Servlet容器来处理,Servlet容器通过Servlet接⼝调⽤业务类。

Servlet接⼝Servlet容器这⼀整套内容叫作Servlet规范

Servlet容器有解耦的作用,避免Http服务器业务类的直接耦合。

由于Tomcat根据Servlet规范实现了Servlet容器,同时它又具有Http服务器的功能,所以Tomcat拥有两个重要身份:

  • Servlet容器
  • Http服务器

2.2. Tomcat Servlet容器处理流程

79_3.png当用户请求某个URL资源时:

  • 1) Http服务器会把请求信息封装成Request对象,再转化成ServletRequest对象,传入Servlet容器
  • 2) Servlet容器接收到请求后,根据URLServlet的映射关系(必要的配置信息),找到对应的Servlet
  • 3) 如果Servlet还没有被加载,使用反射技术创建该Servlet,并调用Servletinit方法来完成初始化;
  • 4) 调用Servletservice方法处理请求,将请求处理结果封装成ServletResponse对象,返回给Http服务器
  • 5) Http服务器将接收到的ServletResponse对象转化成Response对象,返回给客户端。

2.3. Tomcat 系统总体架构

79_4.png

Tomcat设计了两个核心组件连接器(Connector)容器(Container)来完成Tomcat的两大核心功能:

  • 连接器:负责对外交流,处理Socket连接,负责网络字节流Request/Response对象的转化;
  • 容器:负责内部处理,加载和管理Servlet,以及具体请求的处理。

3. Tomcat 连接器组件 Coyote

3.1. Coyote简介

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

Coyote负责的是具体协议(应用层)IO(传输层)的相关内容:

  • Coyote封装了底层的网络通信(Socket请求及响应处理)
  • Coyote使Catalina容器(容器组件)与具体的请求协议IO操作方式完全解耦
  • CoyoteSocket输入转化封装为Request对象,进一步交给Catalina容器处理,处理完成后,Catalina容器通过Coyote提供的Response对象将结果写入输出流

79_5.png

Tomcat (Coyote)支持多种应用层协议和I/O模型:

79_6.png

8、0版本之前,Tomcat默认采用的I/O模型BIO8.0版本之后,改为NIO

3.2. Coyote内部组件及流程

79_7.png

Coyote内部各组件的作用:

组件 作用
EndPoint EndPointCoyote的通信端点,即通信监听的接口,是具体Socket接收和发送的处理器,是对传输层的抽象。因此EndPoint用来实现TCP/IP协议
Processor ProcessorCoyote的协议处理接口,用来实现HTTP协议Processor接收来⾃EndPointSocket,读取字节流解析成Tomcat RequestResponse对象,并通过Adapter将其提交到容器处理,Processor是对应⽤层协议的抽象
ProtocolHandler Coyote协议接⼝,通过EndpointProcessor, 实现针对具体协议的处理能⼒。Tomcat按照协议和I/O 提供了6个实现类 :AjpNioProtocolAjpAprProtocolAjpNio2ProtocolHttp11NioProtocolHttp11Nio2ProtocolHttp11AprProtocol
Adapter CoyoteAdapter负责将Tomcat Request转成ServletRequest,再调⽤容器

4. Tomcat Servlet 容器 Catalina

4.1. Tomcat模块分层结构图和Catalina的地位

Tomcat是由一系列可配置(conf/server.xml)的组件构成的Web容器,而CatalinaTomcatServlet容器

Tomcat本质上就是⼀款Servlet容器, 因为Catalina才是Tomcat的核⼼ , 其他模块都是为Catalina提供⽀撑的。 ⽐如 : 通过Coyote模块提供链接通信,Jasper模块提供JSP引擎Naming提供JNDI服务Juli提供⽇志服务

79_8.png

4.2. Servlet 容器 Catalina 的结构

我们往往有⼀个认识,Tomcat就是⼀个Catalina的实例,因为CatalinaTomcat的核⼼。

Tomcat/Catalina实例:

79_9.png

其实,可以认为整个Tomcat就是⼀个Catalina实例Tomcat启动的时候会初始化这个实例,Catalina实例通过加server.xml完成其他实例的创建,创建并管理⼀个ServerServer创建并管理多个服务(Service),每个服务(Service)⼜可以有多个Connector和⼀个Container

  • Catalina

    负责解析Tomcat的配置文件(server.xml),以此来创建Server组件并进行管理

  • Server

    负责组装并启动Servlaet引擎,Tomcat连接器。Server通过实现Lifecycle接⼝,提供了⼀种优雅的启动和关闭整个系统的⽅式

  • Service

    服务是Server内部的组件,⼀个Server包含多个Service。它将若⼲个Connector组件绑定到⼀个Container

  • Container

    容器,负责处理⽤户的servlet请求,并返回对象给web⽤户的模块

4.3. Container组件的具体结构

Container组件下有⼏种具体的组件,分别是EngineHostContextWrapper。这4种组件(容器)是⽗⼦关系。Tomcat通过⼀种分层的架构,使得Servlet容器具有很好的灵活性。

  • Engine

    表示整个Catalina的Servlet引擎,⽤来管理多个虚拟站点,⼀个Service最多只能有⼀个Engine,但是⼀个引擎可包含多个Host

  • Host

    代表⼀个虚拟主机,或者说⼀个站点,可以给Tomcat配置多个虚拟主机地址,⽽⼀个虚拟主机下可包含多个Context

  • Context

    表示⼀个Web应⽤程序, ⼀个Web应⽤可包含多个Wrapper

  • Wrapper

    表示⼀个Servlet,Wrapper 作为容器中的最底层,不能包含⼦容器

文章永久链接:https://tech.souyunku.com/34163

未经允许不得转载:搜云库技术团队 » Tomcat 系统架构与原理剖析

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们