Tomcat原始碼分析:一、tomcat元件認識
前言
最近一次上線過程中出現了jekin是自動化部署的web環境跟本地開發環境不一致的情況,導致生產環境應用訪問失敗,因此閱讀tomcat原始碼,以加深對web的認識。
基本元件
在閱讀原始碼之前,最好是對整個應用架構進行了解跟分析,從而會對程式閱讀帶來事半功倍的效果。
change our perspective,Tomcat整體元件結構圖如下:
Server:一個tomcat例項,tomcat支援在一臺機器上啟動多個tomcat例項。不同的tomcat例項產生不同的JVM程序,同一個例項下的不同的application共享一個JVM,但是具有獨立的appclassloader(以此來達到資源隔離)。
Service:是一組Connector與Engine的集合。採用關聯關係將外部請求與內部處理器連線的橋樑。
Connector: 是外部請求的入口,通過埠監聽、連線控制、協議解析等手段,實現外部請求到tomcat內部物件的對映(對映)
Engine:整個servlet引擎。該引擎提供了多個虛擬主機Host的支援(多域名支援)
Host:虛擬主機。一個虛擬主機包含多個context
Context:一個context代表了一個servlet context。從context是Tomcat的抽象概念,servlet context則是j2e規範層次。一個context實際上對應了一個application。
Container:tomcat申明 A Container is an object that can execute requests received from a client, and return responses based on those requests. 但是在原始碼中未發現Container新增對客戶端請求處理的能力。container是對engine、host、context、warpper元件的抽象。