Tomcat其實就是一個容器,最頂層的容器叫Server,表明整個服務器,Server中包含至少一個Service,用於具體提供服務。Service主要包含兩部分:Connector和Container。一個Service只有一個Container,但能夠有多個Connectors(由於一個服務能夠有多個鏈接,如同時有提供http和https鏈接,也能夠提供相同協議不一樣端口的鏈接)。Catalina是整個Tomcat的管理類,它裏面有三個方法load、start、stop分別用來管理整個服務器的生命週期,load方法用於根據conf/server.xml文件建立Server並調用Server的init方法進行初始化,start方法用於啓動服務器,stop方法用於中止服務器,start和stop方法在內部分別調用了Server的start和stop方法,load方法內部調用了Server的init方法,這三個方法都會按容器的結構逐層調用相應的方法,好比,Server的start方法中會調用全部Service中的start方法,Service中的start方法又會調用全部包含的Connectors和Container的start方法,這樣整個服務器就啓動了,init和stop方法也是同樣的,這就是Tomcat生命週期的管理方式。Catalina還有一個很重要的方法await,直接調用Server的await方法,這個方法的做用是進入一個循環,讓主線程不會退出。Tomcat的main方法並不在Catalina類裏,而是在Bootstrap中,這樣作的好處是能夠把啓動的入口和具體的管理類分開,從而能夠很方便地建立出多種啓動方式。web
Lifecycle接口用來管理生命週期,全部的生命週期組件都要實現該接口。一個作了4件事情:服務器
Container用於封裝和管理Servlet,以及具體 處理request請求。網絡
Container是Tomcat中容器的接口,一般使用的Servlet就封裝在其子接口Wrapper中。Container一共有4個子接口Engine、Host、Context、Wrapper和一個默認實現 的ContainerBase,每個子接口都是一個容器,這4個子容器都有一個對應的StandardXXX實現類,而且這些實現類都繼承ContainerBase類。另外Container還繼承Lifecycle接口,並且ContainerBase間接繼承LifecycleBase,因此Engine、Host、Context、Wrapper都符合Tomcat的生命週期管理模式。app
Container的子容器Engine、Host、Context、Wrapper是逐層包含的關係,其中Engine是最頂層,每一個Service最多隻能有一個Engine,Engine裏面能夠有多個Host,每一個Host下能夠有多個Context,每一個Context下能夠有多個Wrapper。異步
Pipeline-Value管道線程
Container處理請求是使用Pipeline-Value管道來處理的,採用的是責任鏈模式實現的,但有稍微的不一樣:server
Connector用於處理鏈接相關的事情,並提供Socket與request、response的轉換。xml
Connector是用ProtocolHandler來處理請求的,不一樣的ProtocolHandler表明不一樣的鏈接類型,ProtocolHandler裏面有3個很是重要的組件:Endpoint、Processor和Adapter。Endpoint用於處理底層Socket的網絡鏈接,Processor用於將Endpoint接收到的Socket封裝成Request,Adapter用於將封裝好的Request交給Container進行具體處理。也就是說Endpoint用來實現TCP/IP協議,Processor用來實現HTTP協議,Adapter將請求適配到Servelet容器進行具體處理。繼承