Tomcat 體系架構
前言
Tomcat 伺服器是一個開源的輕量級Web應用伺服器,在中小型系統和併發量小的場合下被普遍使用,是開發和除錯Servlet、JSP 程式的首選。下面我們來講下Tomat的總體架構。
總體架構
Tomcat 有兩個核心元件:
- Connector 聯結器:處理Socket連線,負責⽹絡位元組流與Request和Response物件的轉化
- Container 容器:負責內部處理,載入和管理Servlet,以及具體處理Request請求
下面分別對著兩個核心元件展開來介紹
Connector 聯結器元件
Connector元件是監聽元件,它有四個作用:
- 開啟監聽套接字,監聽外界請求,並和客戶端建立TCP連線;
- 使用protocolHandler解析請求中的協議和埠等資訊,如http協議、AJP協議;
- 根據解析到的資訊,使用processer將分析後的請求轉發給繫結的Engine;
- 接收響應資料並返回給客戶端。
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 作為容器中的最底層,不能包含子容器。
相關文章
- Tomcat系統架構Tomcat架構
- Tomcat的整體架構Tomcat架構
- Tomcat總體架構(一)Tomcat架構
- 【Tomcat】Tomcat原理與系統架構Tomcat架構
- 死磕Tomcat系列(1)——整體架構Tomcat架構
- MySQL體系架構MySql架構
- SQLite體系架構SQLite架構
- Oracle體系架構Oracle架構
- Tomcat 架構模型Tomcat架構模型
- tomcat架構解析Tomcat架構
- Tomcat 架構探索Tomcat架構
- JavaEE體系架構概述Java架構
- Solr體系架構圖Solr架構
- RAC體系架構理解架構
- Android系統架構-----Android的系統體系架構Android架構
- 『網際網路架構』軟體架構-mybatis體系結構(14)架構MyBatis
- Tomcat 第三篇:總體架構設計Tomcat架構
- 閱讀《Tomcat 系統架構與設計模式》Tomcat架構設計模式
- 2_指令集、體系架構、微架構架構
- JavaEE體系架構概述(續)Java架構
- zt_oracle體系架構Oracle架構
- 軟體系統架構有感架構
- GPU體系架構(二):GPU儲存體系GPU架構
- 軟體體系架構的認識架構
- 軟體體系架構課堂測試07 –邏輯架構設計架構
- 架構知識體系總結架構
- Kafka體系架構、命令、Go案例Kafka架構Go
- Shuttle Bus體系架構的特徵架構特徵
- Tomcat 架構原理解析到架構設計借鑑Tomcat架構
- 初探Tomcat的架構設計Tomcat架構
- Oracle Data block 的物理結構-體系架構OracleBloC架構
- 大型網站架構之:MySpace的體系架構一(轉載)網站架構
- 大型網站架構之:MySpace的體系架構二(轉載)網站架構
- Tomcat詳解系列(2) - 理解Tomcat架構設計Tomcat架構
- 基礎架構體系中介軟體學習架構
- Tomcat是如何執行的?整體架構又是怎樣的?Tomcat架構
- Tomcat總體架構,啟動流程與處理請求流程Tomcat架構
- 程式設計體系結構(09):分散式系統架構程式設計分散式架構