Tomcat設計剖析(一)
Tomcat總體結構及組件以下圖所示web
Server a.提供監聽機制,用於在Tomcat整個生命週期中對不一樣事件進行處理。 b.提供Tomcat容器全局的命名資源實現 Tomcat的運行實例的抽象,包含若干個Listener組件、GlobalNamingResource組件及若干個Service組件。
Service Service組件由若干個Connector組件和Executor組件組合而成。 Connector組件負責監聽某端口的客戶端請求,不一樣端口對應不一樣的Connector。 Executor組件在Service抽象層提供了線程池,讓Service下的組件能夠共用線程池。 默認狀況下,不一樣的Connector組件會本身建立線程池來使用。其餘組件也能夠共享Service線程池。
Connector Connector是Tomcat最核心的兩個組件之一,主要負責接收客戶端鏈接和客戶端請求的處理加工。 每一個Connector都指定一個端口進行監聽,分別對請求報文解析和對響應報文組裝,解析生成Request對象,組裝生成Response對象,能夠有多個Connector。 Protocol組件:是協議的抽象,將不一樣的協議進行了封裝,如:HTTP協議和AJP協議。 EndPoint組件:是接收端的抽象,BIO模式有JioEndpoint,NIO模式有NioEndpoint和本地I/O模式的AprEndpoint。 Acceptor組件:用於接收客戶端鏈接的接收器。 Executor組件:Connector本身的私有線程池。 Processor組件:處理客戶端請求的處理器,不一樣的協議和不一樣的I/O模式有不一樣的處理方式。 Mapper組件:路由器,對客戶端請求URL的映射,經過它能夠將不一樣的請求轉發到對應的Host組件、Context組件、Wrapper組件進行處理並響應給客戶端。即將請求發送到某虛擬主機上的某個web應用的某個servlet。 CoyoteAdapter組件:適配器,將Connector組件和Engine容器適配鏈接起來。把接收到的客戶端的請求報文解析成請求對象和響應對象傳遞到Engine容器,交由容器處理。 目前Tomcat支持兩種Connector,支持HTTP協議與AJP協議的Connector,Connector組件的不一樣體如今其協議及I/O模式的不一樣。HTTP Connector所支持的協議版本爲HTTP/1.1和HTTP/1.0。每一個Connector實例對應一個端口,在同一個Service中能夠設置若干個Connector實例,端口必須不一樣,協議能夠相同。如Http11Protocol(BIO模式)、Http11NioProtocol(NIO模式)。
Engine 全局引擎容器,標準實現是StandardEngine。 Host組件:是Engine容器的子容器,表示一個虛擬主機,不一樣的域名被抽象成一個Host。 AccessLog組件:負責記錄客戶端請求訪問日誌,Engine容器是一個全局的Servlet容器,記錄的日誌爲全部客戶端的請求,不管訪問哪一個虛擬主機。 Pipeline組件:Pipeline屬於一種設計模式,將不一樣級別的容器串聯起來的通道,請求進來的時候就能夠經過管道進行流轉處理。 Cluster組件:有Engine和Host兩個級別的集羣 Realm組件:存儲了用戶、密碼及權限等數據,主要是配合Tomcat實現資源認證模塊
Host 表示虛擬主機,一個Engine能夠包含若干個Host容器,一個Host容器能夠包含若干個Context容器。
Context Context容器包含若干個Wrapper組件、Realm組件、AccessLog組件、Manager組件等。 Manager組件:維護會話的生成、更新、銷燬。每一個Context都有本身的會話管理器。 Wrapper是Tomcat中最小級別的容器。其餘組件再也不贅述。
Wrapper 包含servlet和servlet對象池 servlet對象池是爲了支持一個Servlet對象對應一個線程的SingleThreadModel接口而使用的策略,Wrapper會有一個Servlet堆,負責保存若干個Servlet對象,當須要Servlet對象時從堆中pop出一個對象,當用完以後push回堆中。Wrapper容器中最多能夠有20個某servlet類對象。超過會阻塞等待,直到有可用對象爲止。
歡迎關注本站公眾號,獲取更多信息