tomcat 那些事

java web工程師而言常用的web容器tomcat,jetty都是工作中經常被用到的。通常我們只會記得它是怎麼用的,至於它是幹什麼的,很難說清楚,只知道它是個web容器。因爲我們開發的工作更多是在應用層框架(比如spring mvc)內部填寫業務代碼,至於TCP層到HTTP層可能很少關心。但凡一個完整的基於HTTP協議的java應用,都需要考慮如下幾點:

1.數據是怎麼從TCP層的字節數組轉爲HTTP層的請求對象

2.HTTP請求對象怎樣合理被調度(即線程模型)

3.被調度的請求應該走什麼樣的業務邏輯

第1點考慮更多的是編解碼加解密,第2點則是http請求該如何提交給線程池去處理,第3點其實就是我們經常接觸到的web框架,spring mvc,ssh等等。

第1和第2點我們可以去實現,大公司內部經常會自己去寫一套這種框架。web容器也實現了第1和第2點,同時它還必須遵循javax.servlet中api接口協議(即我們經常引用到的javax.servlet-api.jar)。

tomcat作爲web容器一個典型代表,分析它的代碼,對我們設計自己的框架能提供一些借鑑。分析tomcat的源碼,建議可以用嵌入式的tomcat去逐步調試查看,結合獨立tomcat中的server.xml文件理解。

來看一張層次圖:

在tomcat中各模塊以組件的形式存在,並通過實現接口Lifecycle,管理組件的生命週期。大致的關係圖如下:


tomcat內部主要由Connector連接器和Container容器兩部分組成。

Connector主要負責如何處理IO,NIO(非阻塞式)還是BIO(阻塞式)。

參考文檔: http://www.365mini.com/page/tomcat-connector-mode.htm

Container主要負責接收來自Connector的請求,並按照容器的順序挨個轉發給相應的容器,最後的容器處理完請求後響應輸出。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章