Tomcat 構成以及運行原理略解

在這裏插入圖片描述

首先Tomcat的最頂層架構是Server, Server掌控Tomcat的整個生命週期

Server裏面可以包含有多個service用於提供具體的服務

service裏面包含多個Connector和Container, 這是Tomcat的核心

connector用於處理連接相關的事情, 並且提供Socket與Request和Response相關的轉化

container用於封裝和管理Servlet, 以及具體處理Request請求

一個Tomcat中只有一個Server,一個Server可以包含多個Service,一個Service只有一個Container,但是可以有多個Connectors,這是因爲一個服務可以有多個連接,如同時提供Http和Https鏈接,也可以提供向相同協議不同端口的連接

總結

1. Tomcat 中只有一個Server, 一個Server包含多個Service, 一個Service可以有多個Connector和一個Container
2. Server 掌控着整個Tomcat的生命週期
3. Service 是對外提供服務的
4. Connector 用於接受請求並將請求封裝成Request和Response來具體處理
5. Container 用於封裝和管理Servlet, 以及具體的request請求

Connector和Container的微妙關係

一個請求發送到Tomcat之後, 首先經過service, 由service將請求交給Connector, Connector將請求封裝成爲Request和Response來進行具體處理,然後交由Container處理, Container處理完成之後再返回Connector, Connector通過Socket將處理的結果返回給客戶端

Connector最底層使用Socket進行連接的, Request和Response是按照HTTP協議來封裝的, 所以Connector同時需要實現TCP/IP協議和HTTP協議

Connector是如何接受請求的;

Connector是使用ProtocolHandler來處理請求的

如何將請求封裝成Request和Response的; 封裝完之後的Request和Response如何交給Container進行處理的

ProtocolHandler包含了三個組件: Endpoint, Processor, Adapter

EndPoint來處理底層的Socket網絡連接(Endpoint是用來實現TCP/IP協議的), Processor是用來將Endpoint接收到的Socket封裝成Request(用來實現HTP協議), Adapter是是用來將請求交給Container進行具體處理

Endpoint的抽象實現AbstractEndpoint裏面定義的Acceptor和AsyncTimeout兩個內部類和一個Handler接口, Acceptor用於監聽請求, AsyncTimeout用於檢查異步Request的超時,Handler用於處理接收到的Socket,在內部調用Processor進行處理。

Container如何處理請求

(1)Connector在接收到請求後會首先調用最頂層容器的Pipeline來處理

(2)在Engine的管道中依次會執行EngineValve1、EngineValve2等等,最後會執行StandardEngineValve,在StandardEngineValve中會調用Host管道,然後再依次執行Host的HostValve1、HostValve2等,最後在執行StandardHostValve,然後再依次調用Context的管道和Wrapper的管道,最後執行到StandardWrapperValve。

(3)當執行到StandardWrapperValve的時候,會在StandardWrapperValve中創建FilterChain,並調用其doFilter方法來處理請求,這個FilterChain包含着我們配置的與請求相匹配的Filter和Servlet,其doFilter方法會依次調用所有的Filter的doFilter方法和Servlet的service方法,這樣請求就得到了處理!

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