咱們先來看一張比較經典的Tomcat架構圖:web
從這張圖中,咱們能夠看出Tomcat中含有Server、Service、Connector、Container等組件,接下來咱們一塊兒去大體的看看這些組件的做用和他們之間的相互聯繫。在這以前,咱們先補充一個知識點,也就是Tomcat它實現的功能點是什麼呢?經過查找一些資料,這裏參考下極客時間《深刻拆解Tomcat_Jetty》中的總結,即Tomcat 要實現 2 個核心功能:瀏覽器
對應到架構圖中,Tomcat 設計了兩個核心組件:鏈接器(Connector)和容器(Container)來分別作這兩件事情。鏈接器負責對外交流,也就是處理Socket鏈接,容器負責內部處理。微信
在介紹各組件以前,咱們先關注一下下面這張關係圖:網絡
從圖中能夠看出,最頂層爲Server(圖中未標明),也就是一個Tomcat實例。在一個Server下面能夠有不少個Service服務,而每一個Service服務又分爲鏈接器和容器,也就是上面架構圖中Connector和Container,其中鏈接器能夠有多個,而容器只有一個,鏈接器Connector和容器Container之間的交互是經過ServletRequest和ServletResponse通訊的。架構
Tomcat 內可能有多個 Service,這種設計是出於靈活性的考慮。經過在 Tomcat 中配置多個 Service,能夠實現經過不一樣的端口號來訪問同一臺機器上部署的不一樣應用。app
其實,咱們能夠關注如下Tomcat中conf/web.xml的配置:源碼分析
下面,咱們來着重看一下鏈接器connector和容器container的內容.net
Connector對 Servlet 容器屏蔽了協議類型及 I/O 模型等的區別,不管是 HTTP 仍是 AJP,在容器中獲取到的都是一個標準的 ServletRequest 對象。先來看一下Connector的設計結構圖:設計
引用《深刻拆解Tomcat_Jetty》中關於Connector的功能總結,主要有以下功能:cdn
從上面的結構圖中能夠看出,在Connector中使用ProtocolHandler來處理請求,其主要包含3個組件,分別爲Endpoint、Processor、Adapter等。咱們來看下ProtocolHandler的接口及其子類的類圖:
關於鏈接器Connector的具體內容將在後期單獨作詳細介紹。
Tomcat 設計了 4 種容器,分別是 Engine、Host、Context 和 Wrapper,其屬於父子關係。具體能夠參考上文說起的Tomcat中conf/web.xml。其具體的關係能夠參考下圖(來源:百度):
這四種容器的應用範圍爲:
關於容器Container的具體內容將在後期單獨作詳細介紹。
本文主要介紹了Tomcat 的大致架構,也大體介紹了Connector和Container的結構,後面將以源碼爲基礎,詳細的介紹其中的組件內容及相關的技術實現。
歡迎關注本人微信公衆號: 源碼灣。 本公衆號將不按期進行相關源碼及相關開發技術的分享,共同成長,共同進步~