Tomcat底層原理分析:2.Tomcat架構分析

【專欄目錄】
Tomcat底層原理分析:1.基礎環境搭建
Tomcat底層原理分析:2.Tomcat架構分析
Tomcat底層原理分析:3.Jasper引擎
Tomcat底層原理分析:4.Tomcatd的server.xml配置內容解析
Tomcat底層原理分析:5.Web應用配置解析
Tomcat底層原理分析:6.Tomcat中對JVM的配置解析
Tomcat底層原理分析:7.Tomcat集羣配置解析
Tomcat底層原理分析:8.Tomcat安全性配置解析
Tomcat底層原理分析:9.Tomcat性能調優
【本文導讀】

本文主要講了Tomcat的各個組件之間的關係以及Tomcat底層是如何實現“一個URL定位到一個具體的servlet”。
注:本文圖片均來自java進階教程動手實現Tomcat【黑馬程序員精品公開課】,侵權立刪。

1.Tomcat整體架構

Tomcat本質上就是一個Servlet容器,所以Catalina就是其核心,其他模塊都是爲Catalina提供支撐的。比如:通過Coyote提供Sockets通信,Jasper提供JSP引擎,Naming提供JNDI服務,Juli提供日誌服務。

【Tomcat分層示意圖】
image

【Tomcat架構圖】
image

【Tomcat主要核心邏輯簡圖】
image

【Servlet內部邏輯簡圖】
image

2.容器-Catalina

2.1Catalina組件

【Catalina容器架構圖】
image

組件 職責
Catalina 負責解析Tomcat的配置文件,以此來創建Server組件,並根據命令對其進行管理
Server 表示整個Servlet容器和其他組件,負責組裝並啓動Servlet引擎、Tomcat連接器。Server通過實現LifeCycle接口,提供了一種優雅的啓動和關閉整個系統的方式。
Service 一個Server包含多個Service,它是“若干個Connector”和“一個Container”的組合。
Connector 處理與客戶端的通信,負責接收客戶端的請求,並轉發給Container處理,最後再將Container的處理結果返回給客戶端
Container 又叫Servlet容器,也叫Servlet引擎,負責處理Connector轉發來的請求,並返回處理結果給Connector

2.2Container容器組件

【Container容器組件架構圖】
image

組件 職責
Engine 表示整個Catalina的Servlet引擎,即代表Container。用來管理多個虛擬站點,一個Service最多隻能有一個Engine,一個Engine可以有多個Host。
Host 代表一個虛擬主機,即一個站點。一個Engine可以有多個Host,一個Host有可以有多個Context。
Context 代表一個Web應用,一個Context可以包含多個Wrapper。
Wrapper 代表一個Servlet,Wrapper是最底層的基礎單位。

2.3Tomcat的server.xml結構

結合server.xml文件結構看,更容易理解Container容器中組件的結構

<Server>
    <Service>
        <Connector></Connector>
        <Connector></Connector>
        <Engine>
            <Host>
                <Context></Context>
                <Context></Context>
            </Host>
        </Engine>
    </Service>
</Server>

3.連接器-Coyote

3.1框架介紹

【連接池和容器的交互過程】
image

  1. Coyote的工作是將Socket的輸入輸出轉換爲Request和Response對象,並把Request和Response通過適配器轉換成ServletRequest和ServletResponse,用來轉發給/接受於Catalina容器
  2. Coyote封裝底層網絡通信,爲Catalina容器提供一套API,使Catalina容器與具體的請求協議以及IO操作方式完全解耦

3.2Tomcat支持的IO模型和協議

【可以略過】

3.3連接器組件

【組件架構圖】
image

  1. EndPoint組件用於解析HTTP包中的傳輸層內容
  2. Processor組件用於解析HTTP包中的應用層內容
  3. 二者由ProtocolHandler組件管理
  4. Processor將HTTP請求封裝成Request對象
  5. 再由Adapter轉換成ServletRequest對象,轉發給Catalina容器

4.Tomcat啓動流程

image

一句話總結:整個啓動流程做的事情就是加載Tomcat的配置文件,初始化容器組件,監聽對應端口號,準備接受客戶端請求。

5.Tomcat請求處理流程

客戶端瀏覽器發起對Tomcat發起一個請求,該請求是如何定位到當前Tomcat下的哪個項目的哪個Servlet的過程以及處理該請求的過程就叫做Tomcat請求處理流程。
那麼如何定位到的呢?答案是:Tomcat使用Mapper組件。

Mapper組件的功能:將用戶請求的URL定位到一個Servlet;

Mapper組件的原理:Mapper組件裏保存了Web應用的配置信息,其實就是容器組件與訪問路徑的映射關係,比如Host容器裏配置的域名、Context容器裏的Web應用路徑,以及Wrapper容器裏的Servlet映射的路徑,可以將其想象成一個多層次的Map。

由於Mapper的原理,一個URL只會映射到一個Servlet。

【Mapper組件定位Servlet過程示例圖】
image

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章