主要介紹tomcat啓動涉及到的一些接口和類。html
tomcat做爲一個服務器,它的主要功能就是接收請求——處理請求——返回,若是是咱們本身實現一個最簡單的服務器,啓動一個線程監聽某個端口,該端口有數據進來的話就接收數據,而後在啓動一個線程去處理接收到的數據並返回。那麼啓動一個服務器最重要的就是啓動一個線程監聽某個端口,tomcat也是,只不過tomcat包含不少組件,首先要完成組件的初始化,而後再依次啓動各個組件。因此要知道tomcat 的啓動過程,首先了解下tomcat的組件。java
其實還包括Processor、Session、Manager、Deployer等,可是在啓動過程當中,這些不是最重要的,在瞭解了整個過程以後在進行具體學習。web
tomcat 提供了一種優雅的服務器啓動和中止的方法,由server啓動service組件,service啓動全部包含的組件。service包含Container、Connector等組件。apache
生命週期組件裏面主要包含一個接口、一個類、一個enum:Lifecycle、LifecycleEvent、LifecycleState。api
接口org.apache.catalina.Lifecycle包含如下定義:tomcat
抽象類LifecycleBase實現了Lifecycle接口,主要提供了基本的start和stop實現,並增長了如下方法服務器
抽象類LifecycleMBeanBase繼承了LifecycleBase類,這個類實現了LifecycleBase的一些方法,提供了一些MBean的基本管理,tomcat提供了對JMX的支持。架構
org.apache.catalina.LifecycleEvent 繼承自 java.util.EventObject ,表示lifecycle觸發的事件,和事件緊密關聯的就是listener了,全部想感知組件生命週期狀態變化的類都要事先這個接口 (org.apache.catalina.LifecycleListener) 來監聽對應的事件。事實上好比ContextConfig的初始化就是監聽了Context的事件。app
提供了lifecycle的變化的各類狀態,參考下圖(tomcat javadoc)webapp
其實tomcat做爲servlet容器做重要的部分就是Container組件,Container組件是四層架構,類圖以下:
簡單介紹容器的四層架構:
在剛開始咱們說過了,本身實現服務器的話就是監聽一個端口,接收請求,這也是tomcat Connector組件的做用,最後監聽端口是由JIoEndpoint的一個內部類Acceptor來完成的,因此當JIoEndpoint$Acceptor線程啓動的時候,整個tomcat服務器也就啓動完成了。
tomcat支持http和ajp協議,因此提供了Http11Protocol和AjpProtocol來處理對應的協議(上面主要畫出了http協議的部分)。
以上是tomcat啓動所涉及到的主要類和接口,固然了其中涉及到的遠不止於此,可是一開始我也說了對於不一樣的目的,能夠有針對性的學習,因此以上只關注了一些戶主要的類。還有一個問題就是,我仍是有點糾結的:其實我以爲記錄的時候沒有必要添加大段代碼,由於這些代碼都比較好懂,並且若是真要閱讀的話能夠隨時找獲得,固然了,對於一些非常重要或者經典的代碼仍是頗有必要專門分析的。
在閱讀的過程當中記了一些筆記和繪製了一些圖(這些在tomcat源碼閱讀的最後再附上),可是感受都比較瑣碎,通過這麼一整理感受更加明晰了。