快速入門:兩分鐘帶你從 0 開始手寫一個Tomcat

前言

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

Tomcat是很是流行的Web Server,它仍是一個知足Servlet規範的容器。那麼想想,Tomcat和咱們的Web應用是什麼關係?學習

從感性上來講,咱們通常須要把Web應用打成WAR包部署到Tomcat中,在咱們的Web應用中,咱們要指明URL被哪一個類的哪一個方法所處理(不管是原始的Servlet開發,仍是如今流行的Spring MVC都必須指明)。測試

因爲咱們的Web應用是運行在Tomcat中,那麼顯然,請求一定是先到達Tomcat的。Tomcat對於請求實際上會進行下面的處理:spa

第一:提供Socket服務3d

Tomcat的啓動,必然是Socket服務,只不過它支持HTTP協議而已!xml

這裏其實能夠擴展思考下,Tomcat既然是基於Socket,那麼是基於BIO or NIO or AIO呢?對象

第二:進行請求的分發blog

要知道一個Tomcat能夠爲多個Web應用提供服務,那麼很顯然,Tomcat能夠把URL下發到不一樣的Web應用。開發

第三:須要把請求和響應封裝成request/responserem

咱們在Web應用這一層,可歷來沒有封裝過request/response的,咱們都是直接使用的,這就是由於Tomcat已經爲你作好了!
話很少說,先來看一眼工程截圖:

1、封裝請求對象

這裏,你能夠清楚的看到,咱們經過輸入流,對HTTP協議進行解析,拿到了HTTP請求頭的方法以及URL。

2、封裝響應對象

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

3、Servlet 請求處理基類

前文說Tomcat是知足Servlet規範的容器,那麼天然Tomcat須要提供API。這裏你看到了Servlet常見的doGet/doPost/service方法。

4、Servlet 實現類

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

5、Servlet 配置

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

6、啓動類

這裏,你可以看到Tomcat的處理流程:把URL對應處理的Servlet關係造成,解析HTTP協議,封裝請求/響應對象,利用反射實例化具體的Servlet進行處理便可。

7、測試

實現一個簡易版的 Tomcat 就這麼 7 大步搞定,你們能夠動手實現一下吧,代碼最好不要複製,本身動手一個個敲,這樣實現以後,對 Tomcat 就沒那麼陌生了。

寫在最後

歡迎你們關注個人公衆號【風平浪靜如碼】,海量Java相關文章,學習資料都會在裏面更新,整理的資料也會放在裏面。

以爲寫的還不錯的就點個贊,加個關注唄!點關注,不迷路,持續更新!!!

相關文章
相關標籤/搜索