Tomcat設計剖析(一)

Tomcat總體結構及組件以下圖所示web

圖片描述

  1. Server
    a.提供監聽機制,用於在Tomcat整個生命週期中對不一樣事件進行處理。
    b.提供Tomcat容器全局的命名資源實現
    Tomcat的運行實例的抽象,包含若干個Listener組件、GlobalNamingResource組件及若干個Service組件。
  2. Service
    Service組件由若干個Connector組件和Executor組件組合而成。
    Connector組件負責監聽某端口的客戶端請求,不一樣端口對應不一樣的Connector。
    Executor組件在Service抽象層提供了線程池,讓Service下的組件能夠共用線程池。
    默認狀況下,不一樣的Connector組件會本身建立線程池來使用。其餘組件也能夠共享Service線程池。
  3. 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模式)。
  4. Engine
    全局引擎容器,標準實現是StandardEngine。
    Host組件:是Engine容器的子容器,表示一個虛擬主機,不一樣的域名被抽象成一個Host。
    AccessLog組件:負責記錄客戶端請求訪問日誌,Engine容器是一個全局的Servlet容器,記錄的日誌爲全部客戶端的請求,不管訪問哪一個虛擬主機。
    Pipeline組件:Pipeline屬於一種設計模式,將不一樣級別的容器串聯起來的通道,請求進來的時候就能夠經過管道進行流轉處理。
    Cluster組件:有Engine和Host兩個級別的集羣
    Realm組件:存儲了用戶、密碼及權限等數據,主要是配合Tomcat實現資源認證模塊
  5. Host
    表示虛擬主機,一個Engine能夠包含若干個Host容器,一個Host容器能夠包含若干個Context容器。
  6. Context
    Context容器包含若干個Wrapper組件、Realm組件、AccessLog組件、Manager組件等。
    Manager組件:維護會話的生成、更新、銷燬。每一個Context都有本身的會話管理器。
    Wrapper是Tomcat中最小級別的容器。其餘組件再也不贅述。
  7. Wrapper 包含servlet和servlet對象池 servlet對象池是爲了支持一個Servlet對象對應一個線程的SingleThreadModel接口而使用的策略,Wrapper會有一個Servlet堆,負責保存若干個Servlet對象,當須要Servlet對象時從堆中pop出一個對象,當用完以後push回堆中。Wrapper容器中最多能夠有20個某servlet類對象。超過會阻塞等待,直到有可用對象爲止。
相關文章
相關標籤/搜索