tomcat總體架構
tomcat核心模組分析
tomcat是目前非常流行的web容器,tomcat總體架構見下圖。
圖1 tomcat總體架構圖
connector好比酒店前台接待人員,container好比乙個酒店房間、床鋪等硬體設施,乙個酒店可以有多類不同職能的接待人員。比如:有的專職為vip客戶服務,有的專職為普通使用者服務,有的為領導幹部服務等。同樣在server.xml中也可以配置不同型別的connector,比如:這個connector監聽8081埠,專職為http/1.1型別請求服務;這個connector監聽在8009埠,專職為ajp/1.3型別請求服務。
一座酒店整體配套設施好比container,當這些硬體配套設定準備好之後,前台工作人員準備到位後便可對外提供服務。前台工作人員和硬體配套設定組合在一起就形成了乙個可以對外服務的實體(service)。server好比乙個酒店連鎖,service就是乙個個連鎖酒店實體。
圖2 server.xml配置
上圖是乙個簡單server.xml配置。這裡需要提到的是valve模組,它對整個engine容器起作用,相當於乙個閥門,所有被egine處理的請求都會被先呼叫valve.invoke()。有關valve處理流程在後面會有詳細介紹。
tomcat模組化、面向介面程式設計使得其擁有很好的擴充套件性。本節主要通過類圖剖析tomcat核心模組和模組之間的關係。
圖3 tomcat整體類圖結構
圖4 server介面
從server介面定義可以很清晰看到server的主要功能。
圖5 service介面
通過介面定義(setcontainer、addconnector、addexecutor)可以看出乙個service對應乙個container、多個connector、多個executor。service把connector和container聯絡在一起,對外提供乙個服務實體。
在tomcat5中connector是乙個介面,http11connector是其中的乙個實現。在tomcat6中有所不同,tomcat6中connector是乙個類而不是介面。(本文所研究的是tomcat6.0原始碼)
圖6 connector類
connector中主要依賴protocalhandler和adapter兩個介面工作。protocol實現類很多,下面舉例分析http11protocol類。
圖7 http11protocol類
上面簡單介紹了socket接入流程,後面tomcat啟動和工作流程部分會詳細介紹socket的接入和處理流程。(這部分內容見tomcat6原始碼分析後續文章)
圖8 http11connectionhandler類
乙個socket處理流程: worker或者socketprocessor .process(socket) -> http11connectionhandler.process(socket) -> http11processor.process(socketsocket) -> 封裝inputstream/outputstream、設定socket相關引數 ->coyoteadapter.service(request, response)。至此的請求處理邏輯進入到了coyoteadapter中。
圖9 coyoteadapter類
到此connector模組完成了請求接收、引數解析、最後把處理任務交接給了container。
圖10 container介面
這四個容器分別對應server.xml中配置。
圖11 server.xml配置
注意這裡engine容器中有個valve配置。它何時起作用?起到什麼作用?這些問題在接下來分析tomcat處理流程的文章中時會詳細講到。
tomcat6 原始碼分析(1)
相關基礎概念 容器 在tomcat中的容器有 engine host context等容器,主要用於服務的封裝和組織。聯結器 在tomcat中的聯結器其實就是乙個多執行緒的serversocket的accept的過程,把獲取的socket分配給連線處理器處理。內部過濾器 tomcat內部的請求過濾器...
tomcat6原始碼大致流程
1.bootstrap start 初始化 設定catalinahome,catalinabase,初始化classloader commonloader,sharedloader,catalinaloader 通過反射catalina.class 呼叫其方法setparentclassloader...
Tomcat原始碼分析
本文將會介紹tomcat的原始碼,並給出一些分析。org.apache.catalina.startup.bootstrap 該類是tomcat啟動的入口類,包含有main方法。它的主要工作包括 引數解析 環境變數讀取 設定 類載入器初始化 通過反射的方式來呼叫catalina。org.apache...