從零開始寫一個迷你版的Tomcat

圖片

來源 | www.jianshu.com/p/dce1ee01fb90web


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

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


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


因爲咱們的Web應用是運行在Tomcat中,請求一定是先到達Tomcat的。Tomcat 對於請求實際上會進行以下的處理。ui


第一,提供Socket服務spa


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


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


第二,進行請求的分發
對象


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


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


咱們在Web應用這一層,可歷來沒有封裝過request/response 的,咱們都是直接使用的,這就是由於Tomcat已經爲你作好了!


話很少說,先來看一眼工程截圖。


圖片


1、封裝請求對象


圖片


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


2、封裝響應對象


圖片


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


3、Servlet 請求處理基類


圖片


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


4、Servlet 實現類


image.png

image.png


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


5、Servlet 配置


image.png

image.png


你應該有些感受了吧?在servlet開發中,會在web.xml中經過<servlet>和<servlet-mapping>來進行指定哪一個URL交給哪一個servlet進行處理。


6、啓動類


image.png

圖片

圖片


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


7、測試


圖片


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

圖片

相關文章
相關標籤/搜索