歡迎光臨
每天分享高質量文章

寫一個迷你版的Tomcat

來自:簡書,作者:張豐哲
連結:https://www.jianshu.com/p/dce1ee01fb90

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

Tomcat 是非常流行的 Web Server,它還是一個滿足 Servlet 規範的容器。那麼想一想,Tomcat 和我們的 Web 應用是什麼關係?

從感性上來說,我們一般需要把 Web 應用打成 WAR 包部署到 Tomcat 中,在我們的 Web 應用中,我們要指明 URL 被哪個類的哪個方法所處理「不論是原始的 Servlet 開發,還是現在流行的 Spring MVC 都必須指明」。

由於我們的 Web 應用是執行在 Tomcat 中,那麼顯然,請求必定是先到達Tomcat 的。Tomcat 對於請求實際上會進行如下的處理。

  • 提供 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 配置

你應該有些感覺了吧?

我們在servlet開發中,會在 web.xml 中透過 來進行指定哪個 URL 交給哪個 servlet 進行處理。

六、啟動類

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

七、測試


編號809,輸入編號直達本文

●輸入m獲取文章目錄

推薦↓↓↓

Web開發

更多推薦18個技術類微信公眾號

涵蓋:程式人生、演演算法與資料結構、駭客技術與網路安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。

贊(0)

分享創造快樂