Tomcat總體框架:
Server:
Server是Service的生存環境。一個Server中能夠有多個Service。
Service:
Service將Connector和Container包裝在一塊兒提供對外服務,一個Service能夠有多個Connector,可是隻有一個Container。
Connector:
Connector負責對外交流。它的主要任務是負責接收瀏覽器的發過來的tcp鏈接請求,建立一個Request和Response對象分別用於和請求端交換數據,而後會產生一個線程來處理這個請求並把產生的Request 和Response對象傳給處理這個請求的線程,處理這個請求的線程就是Container組件要作的事了。
Connector中網絡事件的是ProtocolHandler,每一個ProtocolHandler都有一個EndPoint,EndPoint則表明具體的端口監聽模式,像BIO, NIO,ProtocolHandler接收來自EndPoint的事件,並交給Container處理。
Container:
Container負責處理Connector傳過來的請求。
Container是容器的父接口,全部子容器都必須實現這個接口,Container容器的設計用的是典型的責任鏈的設計模式,它有四個子容器組件構成,分別是:Engine、Host、Context、Wrapper,這四個組件不是平行的,而是父子關係,Engine包含Host,Host包含 Context,Context包含Wrapper。一般一個Servlet class對應一個Wrapper,若是有多個Servlet就能夠定義多個Wrapper,若是有多個Wrapper就要定義一個更高的Container了,如Context。
Container中都包含一個Pipeline,Pipeline則像是一個事件處理管道,上面有不少時間處理程序,Container接收到事件後,分別調用Pipeline上的Valve去處理,每個上一層Container的Pipeline上都有一個指向下一層Container的Valve,從而作到了事件從上層Container傳到下層。
a) Engine是完整的容器,其下面擁有多個虛擬主機,它的責任就是將Connector請求分配給虛擬機處理。它的標準實現類是StandardEngine,這個類注意一點就是Engine沒有父容器了,若是調用 setParent方法時將會報錯。
b) Host是Engine的子容器,一個Host在Engine中表明一個虛擬主機,這個虛擬主機的做用就是運行多個應用,它負責安裝和展開這些應用,而且標識這個應用以便可以區分它們。它的子容器一般是Context,它除了關聯子容器外,還有就是保存一個主機應該有的信息。
c) Context還能夠定義在父容器Host中,Host不是必須的,可是要運行war程序,就必需要Host,由於war中必有web.xml文件,這個文件的解析就須要Host了,若是要有多個Host就要定義一個top容器Engine了。而Engine沒有父容器了,一個Engine表明一個完整的Servlet引擎。
d) Wrapper表明一個Servlet,它負責管理一個Servlet,包括的Servlet的裝載、初始化、執行以及資源回收。Wrapper是最底層的容器,它沒有子容器了,因此調用它的addChild將會報錯。web