Tomcat 体系架构

前言

Tomcat 服务器是一个开源的轻量级Web应用服务器,在中小型系统和并发量小的场合下被普遍使用,是开发和调试Servlet、JSP 程序的首选。下面我们来讲下Tomat的总体架构。

总体架构

Tomcat 体系架构_第1张图片
Tomcat 有两个核心组件:

  1. Connector 连接器:处理Socket连接,负责⽹络字节流与Request和Response对象的转化
  2. Container 容器:负责内部处理,加载和管理Servlet,以及具体处理Request请求

下面分别对着两个核心组件展开来介绍

Connector 连接器组件

Connector组件是监听组件,它有四个作用:

  1. 开启监听套接字,监听外界请求,并和客户端建立TCP连接;
  2. 使用protocolHandler解析请求中的协议和端口等信息,如http协议、AJP协议;
  3. 根据解析到的信息,使用processer将分析后的请求转发给绑定的Engine;
  4. 接收响应数据并返回给客户端。

Tomcat 体系架构_第2张图片
Coyote 是Tomcat 中连接器的组件名称 , 是对外的接⼝,客户端。下面对coyote的各个组件进行一下介绍

EndPoint

EndPoint 是 Coyote 通信端点,即通信监听的接⼝,是具体Socket接收和发送处理器,是对传输层的抽象,因此EndPoint用来实现TCP/IP协议的。

Processor

Processor 是Coyote 协议处理接口 ,如果说EndPoint是⽤来实现TCP/IP协议的,那么Processor用来实现HTTP协议,Processor接收来自EndPoint的Socket,读取字节流解析成Tomcat Request和Response对象,并通过Adapter将其提交到容器处理,Processor是对应用层协议的抽象。

ProtocolHandler

Coyote 协议接口, 通过Endpoint 和 Processor , 实现针对具体协议的处理能力。Tomcat 按照协议和I/O 提供6个实现类:AjpNioProtocol ,AjpAprProtocol, AjpNio2Protocol , Http11NioProtocol,Http11Nio2Protocol ,Http11AprProtocol。

Adapter

由于协议不同,客户端发过来的请求信息也不尽相同,Tomcat定义了自己的Request类来封装这些请求信息。ProtocolHandler接口负责解析请求并生成Tomcat Request类。但是这个Request对象不是标准ServletRequest,不能用Tomcat Request作为参数来调⽤容器。Tomcat设计者的解决方⽅案是引入CoyoteAdapter,这是适配器模式的经典运用,连接器调用CoyoteAdapter的Sevice方法,传入的是Tomcat Request对象,CoyoteAdapter负责将Tomcat Request转成ServletRequest,再调用容器。通过Coyote与服务器建⽴连接、发送请求并接受响应

Container 容器

Tomcat是⼀个由⼀系列可配置(conf/server.xml)的组件构成的Web容器,⽽Catalina是Tomcat的servlet容器。
从另⼀个⻆度来说,Tomcat 本质上就是⼀款 Servlet 容器, 因为 Catalina 才是 Tomcat 的核⼼ , 其他模块都是为Catalina 提供⽀撑的。
其实,可以认为整个Tomcat就是⼀个Catalina实例,Tomcat 启动的时候会初始化这个实例,Catalina实例通过加载server.xml完成其他实例的创建,创建并管理⼀个Server,Server创建并管理多个服务,每个服务⼜可以有多个Connector和⼀个Container。
Tomcat 体系架构_第3张图片
上面是一个catalina实例的结构图,下面针对各个组件进行分析:

Catalina

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

Server

服务器表示整个Catalina Servlet容器以及其它组件,负责组装并启动Servlaet引擎,Tomcat连接器。Server通过实现Lifecycle接口,提供了一种优雅的启动和关闭整个系统的方式

Service

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

Container

容器,负责处理用户的servlet请求,并返回对象给web用户的模块Container组件下有几种具体的组件,分别是Engine、Host、Context和Wrapper。这4种组件(容器)是父子关系。Tomcat通过一种分层的架构,使得Servlet容器具有很好的灵活性。

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

  • Host 代表一个虚拟主机,或者说一个站点,可以给Tomcat配置多个虚拟主机地址,而一个虚拟主机下可包含多个 Context。

  • Context 表示一个Web应用程序, 一个Web应⽤可包含多个Wrapper。

  • Wrapper 表示一个Servlet,Wrapper 作为容器中的最底层,不能包含子容器。

你可能感兴趣的:(Tomcat,tomcat,servlet,java)