Tomcat 體系架構

一個快樂小碼農發表於2020-10-02

前言

Tomcat 伺服器是一個開源的輕量級Web應用伺服器,在中小型系統和併發量小的場合下被普遍使用,是開發和除錯Servlet、JSP 程式的首選。下面我們來講下Tomat的總體架構。

總體架構

在這裡插入圖片描述
Tomcat 有兩個核心元件:

  1. Connector 聯結器:處理Socket連線,負責⽹絡位元組流與Request和Response物件的轉化
  2. Container 容器:負責內部處理,載入和管理Servlet,以及具體處理Request請求

下面分別對著兩個核心元件展開來介紹

Connector 聯結器元件

Connector元件是監聽元件,它有四個作用:

  1. 開啟監聽套接字,監聽外界請求,並和客戶端建立TCP連線;
  2. 使用protocolHandler解析請求中的協議和埠等資訊,如http協議、AJP協議;
  3. 根據解析到的資訊,使用processer將分析後的請求轉發給繫結的Engine;
  4. 接收響應資料並返回給客戶端。

在這裡插入圖片描述
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。
在這裡插入圖片描述
上面是一個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 作為容器中的最底層,不能包含子容器。

相關文章