Tomcat 系统架构与原理剖析

云栖号资讯:【点击查看更多行业资讯】
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!


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

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

Tomcat 系统架构与原理剖析

2. Tomcat 系统总体架构

Tomcatr n = 4 Z V f是一个Http服务器(能够接受并且处理http请求,所以To6 1 z c vmcat是一个Http服务器)。

2.1. Tomcat 处理请c L z t求大致流程

Tomcat 系统架构与原理剖析

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

SeX { {rvlet接⼝和Servlet容器这⼀整套内容叫作Ser1 Z z ) E gvlet规范。

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

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

  • Servlet容器
  • Http服务L : b z H

2.2. Tomcat Servlet容器处理流程

Tomcat 系统架构与原理剖析

当用户请求某个URL资源时:

  • 1) Http服务器会把请求信息封装成Request对象,再转化成ServleL K stRequest对象,传入Servl0 & { W 5 pet容器;
  • 2) Servlet容器接收到请求后,根据URL和Se5 3 w ~rvlet的映射关系(必要的配置信息),找到对应的Ser1 g j 9 0 u ?vlet;
  • 3) 如果SX X ( f $ervlet还没有被加载,使用反射技术创建该Servlet,并调用Servlet的init方法来完成初K { ~ f @ @ H始化;
  • 4) 调用Servlet的service方法处理请求,将请求处理结果封装成ServletResponse对象,返回给Http服务器;
  • 5u U T ` [ 0 z 1) Http服务器将接收到的ServletResponse对) O b 象转化成Response对象,返回给客户端。

2.3. Tomcat 系统总v Q E体架构

Tomcat 系统架构与原理剖析

Tomcat设计了两个核心组件连接器(Connector)和容器(Container)来v [ m完成Tomcat的两大核心功@ & L 5 v E p }能:

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

3. Tomcat 连接器组件 Coq D Y g %yote

3.1. Coyote简介

Coyote是Tomcat连接器组件的名称,是对外y L ; ~ c ] & 3的接口。客户端通过Coyote与服务端建立连接、发送请求并接受响应。

Coyote负责的是具体协f @ 3 j L q . k `议(应用层)和IO(传输层)的相关内容:

  • Coyote封装了底层的网络通信(Socko M @et请求及响应处理)
  • Coyote使Catalina容器(容器组件)与具体的请求协议和IO操作方式完全解耦
  • Coyote将Socket输入转化封# / ~ N k S w M 4装为Reo ] m ~ ?quest对象,进一步交给C( t H ! S q @ath & R ( Talina容器处理,处理完成后,Catalix t * 2 * F ena容器通过Coyote提供的Response对象将结果写入输出流

Tomcat 系统架构与原理剖析

Tomcat (Coyote)支持多种应用层协议和I7 S r / K m ./O模型:

Tomcat 系统架构与原理剖析

在8[ 9 6 +.0版本之前U G C _,Tomcat默认采用的I/O模型是BIO,8.0版本之后,改为G ( t 9 , 3 O c rNIO。

3.2. Coyote内部组件及流程

Tomcat 系统架构与原理剖析

Coyote内部各组件的作用:

Tomcat 系统架构与原理剖析

4. Tomcat Servlet 容器 Catalina

4.1. Tomcat模块分层结构图和Catalin$ d h G T ! va的地位

Tomcat是由一系列可配置(conf/server.xml)的组件构成的i c 7Web容器,而Catalina是Tomcat的Servlet容器。

Tomcat本质上就是⼀款Servlet容器, 因为Catalina才是Tomcat的核⼼ , 其他x q W B s H j 7模块都是为 u - i v #Catal ! O h 0 ! mina提供⽀撑的。 ⽐如 : 通过Coyote模块提供链接通信,Jasper模块提供JSP引擎,Naming提供JNDI服务,Juli提供⽇志服务。E s } k j G D

Tomcat 系统架构与原理剖析

4.A u P2. Ser} _ q Jvlet 容器 Catalina 的结构

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

Tomcat/Catalina实例:

Tomcat 系统架构与原理剖析

其实,可以认为整个Tomcat就是. V c l r @ g I⼀个Catalina实例,Tomcat启动的时候会初始化这个实例,Catalina实U 1 ; E例通过加server.xml完成其他实例的创建,创建并管理⼀个ServerServer创建并管理多个服务(Service),* Y 6 3每个服务(Service)⼜可以有多个Connector和⼀个Container。

  • Catalina

负责解析Tomcat的配置文件(server.xmA z 6 | 3l),以此来创建Server组Z Y 7 } o件并进行管理

  • Server

负责h z l 9 L B O组装并启动Servlaet引擎,Toq I -mcat连接器。Server通过实现Lifecycle接o S / + e ( 9 T 9⼝,提供了⼀种优雅的启动和关闭整个系统的6 V 9 ) E⽅式

  • Service

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

  • Container

容器,负责处理⽤户的servlet请求,并返回对象给web⽤户的模块O % n Y M 1 K

4.3. Container组件0 L e B ) d {的具体结构

ContaiS I Oner组W Y z ;件下有⼏种具体的组件,分别是Engine、Host、Context和Wrapper。这4& p 3种组件(容器)是⽗⼦关系。Tomcat通过⼀种分层的架构b _ _ r T | ~,使得Servlet容器具有很好的灵活性。

  • Engine

表示整个Catalina的Servlet引擎,⽤来管理多个虚拟站点,⼀个ServiceA & 最多只能有⼀个: D ~Engine,但是⼀y 0 k 1 2 I /个引擎可包含多个Host

  • Host

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

  • Context

表示⼀个Web应⽤程序,] m ; q ^ ⼀个Web应⽤可包含多个Wrapper

  • Wrapper

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

【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.coU ] ( Q m X {m/live

立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖^ E B o ) ? t $号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK

原文发布时间:2020-@ E K h N 7 ]08-03
本文作者:三生萬物{ F y H s V
本文f r 1 2 _ 2 3来自:“掘金”,了解相关信息可以关注“掘金”