Tomcat通過連接器和容器這兩個核心組件完成整體工作,連接器負責處理socket連接和網絡字節流與Request和Response對象的轉化;容器負責加載和管理Servlet,以及具體處理Request請求。
在學習Tomcat整體架構前需要知道,Tomcat 支持的多種 I/O 模型和應用層協議。
Tomcat 支持的多種 I/O 模型和應用層協議
Tomcat 支持的 I/O 模型有:
- NIO:非阻塞 I/O,採用 Java NIO 類庫實現。
- NIO.2:異步 I/O,採用 JDK 7 最新的 NIO.2 類庫實現。
- APR:採用 Apache 可移植運行庫實現,是 C/C++ 編寫的本地庫。
Tomcat 支持的應用層協議有:
- HTTP/1.1:這是大部分 Web 應用採用的訪問協議。
- AJP:用於和 Web 服務器集成(如 Apache)。
- HTTP/2:HTTP 2.0 大幅度的提升了 Web 性能。
Tomcat 爲了實現支持多種 I/O 模型和應用層協議,一個容器可能對接多個連接器。
在一個Tomcat中由多個Service,每個Service裏面包含多個連接器和一個容器。通過在 Tomcat 中配置多個 Service,可以實現通過不同的端口號來訪問同一臺機器上部署的不同應用。連接器與容器之間通過標準的 ServletRequest 和 ServletResponse 通信。
Tomcat整體工作流程
- 瀏覽器對服務器發起請求;
- 連接器接收到請求並處理,將其轉化成Request;
- 將Request轉換成ServletRequesta發給容器進行處理;
- 容器通過這個ServeletRequest來定位Servlet,如果Servlet沒有被加載,就需要加載這個Servelet;
- 執行Servlet中的方法
- 響應給連接器一個ServletResponse對象
- 連接器解析Response對象
- 將解析後的對象響應給前端。