tomcat原理解析


                                Tomcat總體結構

wKioL1j5mVnh0TQdAAFmqY2E-fk239.png-wh_50

 

Tomcat 的心臟是兩個組件:Connector 和 Container,一個 Container 可以選擇對應多個 Connector。多個Connector 和一個 Container 就形成了一個 Service,有了 Service 就可以對外提供服務了,但是 Service 還要一個生存的環境,必須要有人能夠給她生命、掌握其生死大權,那就非 Server 莫屬了。所以整個 Tomcat 的生命週期由 Server 控制。

Service 對於connector和container的關係:
Tomcat 中 Connector、Container 作爲一個整體比作一對情侶的話,Connector 主要負責對外交流,可以比作爲 Boy,Container 主要處理 Connector 接受的請求,主要是處理內部事務,可以比作爲 Girl。那麼這個 Service就是連接這對男女的結婚證了。是 Service 將它們連接在一起,共同組成一個家庭。當然要組成一個家庭還要很多其它的元素。
Service 只是在 Connector 和 Container 外面多包一層,把它們組裝在一起,向外面提供服務,一個 Service 可以設置多個Connector,但是只能有一個 Container 容器

Service接口
Tomcat 中 Service 接口的標準實現類是 StandardService 它不僅實現了 Service 接口同時還實現了 Lifecycle 接口,這樣它就可以控制它下面的組件的生命週期

StandardService. SetContainer:
先判斷當前的這個 Service 有沒有已經關聯了 Container,如果已經關聯了,那麼去掉這個關聯關係—— oldContainer.setService(null)。如果這個 oldContainer 已經被啓動了,結束它的生命週期。然後再替換新的關聯、再初始化並開始這個新的 Container 的生命週期。最後將這個過程通知感興趣的事件監聽程序

StandardService. addConnector:
首先是設置關聯關係,然後是初始化工作,開始新的生命週期

以Server爲“居”
Server 要完成的任務很簡單,就是要能夠提供一個接口讓其它程序能夠訪問到這個 Service 集合、同時要維護它所包含的所有 Service 的生命週期,包括如何初始化、如何結束服務、如何找到別人要訪問的 Service

組件的生命線“Lifecycle”
tomcat 中組件的生命週期是通過 Lifecycle 接口來控制的,組件只要繼承這個接口並實現其中的方法就可以統一被擁有它的組件控制了,這樣一層一層的直到一個最高級的組件就可以控制 Tomcat 中所有組件的生命週期,這個最高的組件就是 Server,而控制 Server 的是 Startup,也就是啓動和關閉 Tomcat。
Lifecycle 接口的方法的實現都在其它組件中,就像前面中說的,組件的生命週期由包含它的父組件控制,所以它的 Start 方法自然就是調用它下面的組件的 Start 方法,Stop 方法也是一樣。如在 Server 中 Start 方法就會調用 Service 組件的 Start 方法,監聽的代碼會包圍 Service 組件的啓動過程,就是簡單的循環啓動所有 Service 組件的 Start 方法

Connector 組件
Connector 組件是 Tomcat 中兩個核心組件之一,它的主要任務是負責接收瀏覽器的發過來的 tcp 連接請求,創建一個 Request 和 Response 對象分別用於和請求端交換數據,然後會產生一個線程來處理這個請求並把產生的 Request 和 Response 對象傳給處理這個請求的線程,處理這個請求的線程就是 Container 組件要做的事了。
Connector 最重要的功能就是接收連接請求然後分配線程讓 Container 來處理這個請求,所以這必然是多線程的,多線程的處理是 Connector 設計的核心

Servlet 容器“Container”
Container 是容器的父接口,所有子容器都必須實現這個接口,Container 容器的設計用的是典型的責任鏈的設計模式,它有四個子容器組件構成,分別是:Engine、Host、Context、Wrapper,這四個組件不是平行的,而是父子關係,Engine 包含Host,Host 包含 Context,Context 包含 Wrapper
 
Tomcat 中其它組件
Tomcat 還有其它重要的組件,如安全組件 security、logger 日誌組件、session、mbeans、naming 等其它組件。這些組件共同爲 Connector 和 Container 提供必要的服務。


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