1. 程式人生 > 其它 >Tomcat系統架構與原理剖析

Tomcat系統架構與原理剖析

一、瀏覽器訪問伺服器的流程

http請求的處理過程

注意:瀏覽器訪問伺服器使用的是Http協議,Http是應用層協議,用於定義資料通訊的格式,具體的數 據傳輸使用的是TCP/IP協議

二、Tomcat 系統總體架構

2.1Tomcat 請求處理大致過程

Tomcat是一個Http伺服器(能夠接收並且處理http請求,所以tomcat是一個http伺服器)

我們使用瀏覽器向某一個網站發起請求,發出的是Http請求,那麼在遠端,Http伺服器接收到這個請求 之後,會呼叫具體的程式(Java類)進行處理,往往不同的請求由不同的Java類完成處理

HTTP 伺服器接收到請求之後把請求交給Servlet容器來處理,Servlet 容器通過Servlet介面呼叫業務 類。Servlet

介面和Servlet容器這一整套內容叫作Servlet規範

注意:Tomcat既按照Servlet規範的要求去實現了Servlet容器,同時它也具有HTTP伺服器的功能。 Tomcat的兩個重要身份
1)http伺服器
2)Tomcat是一個Servlet容器

二、Tomcat 系統總體架構

Tomcat 設計了兩個核心元件聯結器(Connector)和容器(Container)來完成 Tomcat 的兩大核心 功能

聯結器: 負責對外交流: 處理Socket連線,負責網路位元組流與Request和Response物件的轉化

容器:負責內部處理:載入和管理Servlet,以及具體處理Request請求

三、Coyote Tomcat 聯結器元件

3.1 Coyote 簡介

Coyote 是Tomcat 中聯結器的元件名稱 , 是對外的介面。客戶端通過Coyote與伺服器建立連線、傳送請 求並接受響應

  • Coyote 封裝了底層的網路通訊(Socket 請求及響應處理)
  • Coyote 使Catalina 容器(容器元件)與具體的請求協議及IO操作方式完全解耦
  • Coyote 將Socket 輸入轉換封裝為 Request 物件,進一步封裝後交由Catalina 容器進行處理,處 理請求完成後, Catalina 通過Coyote 提供的Response 物件將結果寫入輸出流
  • Coyote 負責的是具體協議(應用層)和IO
    (傳輸層)相關內容

3.2Coyote 的內部元件及流程

四、Tomcat Servlet 容器 Catalina

4.1 Tomcat 模組分層結構圖及Catalina位置

Tomcat 本質上就是一款 Servlet 容器, 因為 Catalina 才是 Tomcat 的核心 , 其 他模組都是為Catalina 提供支撐的。 比如 : 通過 Coyote 模組提供連結通訊,Jasper 模組提供 JSP 引 擎,Naming 提供JNDI 服務,Juli 提供日誌服務

4.2 Servlet 容器 Catalina 的結構

Tomcat就是一個Catalina例項,Tomcat 啟動的時候會初始化這個例項,Catalina 例項通過載入server.xml完成其他例項的建立,建立並管理一個Server,Server建立並管理多個服務, 每個服務又可以有多個Connector和一個Container。

  • 一個Catalina例項(容器)
  • 一個 Server例項(容器)
  • 多個Service例項(容器)
  • Catalina: 負責解析Tomcat的配置檔案(server.xml) , 以此來建立伺服器Server元件並進行管理
  • Server: 伺服器表示整個Catalina Servlet容器以及其它元件,負責組裝並啟動Servlaet引擎,Tomcat連線 器。Server通過實現Lifecycle介面,提供了一種優雅的啟動和關閉整個系統的方式
  • Service: 服務是Server內部的元件,一個Server包含多個Service。它將若干個Connector元件繫結到一個 Container
  • Container 容器,負責處理使用者的servlet請求,並返回物件給web使用者的模組

4.3 Container

Container元件下有幾種具體的元件,分別是Engine、Host、Context和Wrapper。這4種元件(容器)

Engine

表示整個Catalina的Servlet引擎,用來管理多個虛擬站點,一個Service最多隻能有一個Engine, 但是一個引擎可包含多個Host

Host

代表一個虛擬主機,或者說一個站點,可以給Tomcat配置多個虛擬主機地址,而一個虛擬主機下可包含多個Context

Context

表示一個Web應用程式, 一個Web應用可包含多個Wrapper

Wrapper

表示一個Servlet,Wrapper 作為容器中的最底層,不能包含子容器