從 0 開始手寫乙個Tomcat,7 步搞定!

2021-09-10 06:43:27 字數 2308 閱讀 7924

tomcat,這只3腳貓,大學的時候就認識了,直到現在工作中,也常會和它打交道。這是乙隻神奇的貓,今天讓我來抽象你,實現你!

tomcat 是非常流行的 web server,它還是乙個滿足 servlet 規範的容器。那麼想一想,tomcat 和我們的 web 應用是什麼關係?

從感性上來說,我們一般需要把 web 應用打成 war 包部署到 tomcat 中,在我們的 web 應用中,我們要指明 url 被哪個類的哪個方法所處理「不論是原始的 servlet 開發,還是現在流行的 spring mvc 都必須指明」。

由於我們的 web 應用是執行在 tomcat 中,那麼顯然,請求必定是先到達tomcat 的。tomcat 對於請求實際上會進行如下的處理。了解 tomcat 建議大家看下這篇文章《tomcat 的 server 檔案配置詳解!》。

第一,提供 socket 服務

tomcat 的啟動,必然是 socket 服務,只不過它支援 http 協議而已!

這裡其實可以擴充套件思考下,tomcat 既然是基於 socket,那麼是基於bio or nio or aio 呢?

第二,進行請求的分發

要知道乙個 tomcat 可以為多個 web 應用提供服務,那麼很顯然,tomcat 可以把 url 下發到不同的web應用。

第三,需要把請求和響應封裝成 request / response

我們在 web 應用這一層,可從來沒有封裝過 request/response 的,我們都是直接使用的,這就是因為 tomcat 已經為你做好了!

話不多說,先來看一眼工程截圖。

一、封裝請求物件

這裡,你可以清楚的看到,我們通過輸入流,對 http 協議進行解析,拿到了 http 請求頭的方法以及 url。

二、封裝響應物件

基於http協議的格式進行輸出寫入。

三、servlet 請求處理基類

前文說tomcat是滿足servlet規範的容器,那麼自然tomcat需要提供api。這裡你看到了servlet常見的doget/dopost/service方法。

四、servlet 實現類

提供這2個具體的servlet實現,只是為了後續的測試!

五、servlet 配置

你應該有些感覺了吧?

六、啟動類

這裡,你能夠看到 tomcat 的處理流程,即把 url 對應處理的 servlet 關係形成,解析 http 協議,封裝請求/響應物件,利用反射例項化具體的 servlet 進行處理即可。

七、測試

實現乙個簡易版的 tomcat 就這麼 7 大步搞定,大家都來動手實現一下吧,**最好不要複製,自己動手乙個個敲,這樣實現之後,對 tomcat 就沒那麼陌生了。

手寫乙個Tomcat

1 工程截圖 2 封裝請求物件 通過輸入流,對http協議進行解析,拿到了http請求頭的方法和url author wangjie version 2018 11 9 封裝請求物件 通過輸入流,對http協議進行解析,拿到http請求頭的方法和url 3 封裝響應物件 基於http協議的格式進行輸...

如何從0開始了解乙個儲存引擎

根據本人淺薄的經驗,了解乙個資料引擎可能涉及以下問題 目錄 1.概念 2.架構 3.部署 4.元資料 5.寫資料鏈路 6.查詢鏈路 階段總結 一些經常被關心的功能和特點 7.舊資料清理 8.資料的hash 9.離線檔案匯入匯出 10.故障恢復時間 11.對比其他db 先粗略看看是否適合自己的需求,從...

手寫乙個簡化版Tomcat

我們啟動tomcat時雙擊的startup.bat檔案的主要作用是找到catalina.bat,並且把引數傳遞給它,而catalina.bat中有這樣一段話 bootstrap.class是整個tomcat 的入口,我們在tomcat原始碼裡找到這個類,其中就有我們經常使用的main方法 這個類有兩...