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已經爲你作好了!
話很少說,先來看一眼工程截圖:
這裏,你能夠清楚的看到,咱們經過輸入流,對HTTP協議進行解析,拿到了HTTP請求頭的方法以及URL。
基於HTTP協議的格式進行輸出寫入。
前文說Tomcat是知足Servlet規範的容器,那麼天然Tomcat須要提供API。這裏你看到了Servlet常見的doGet/doPost/service方法。
提供這2個具體的Servlet實現,只是爲了後續的測試!
咱們在servlet開發中,會在web.xml中經過和來進行指定哪一個URL交給哪一個servlet進行處理。
這裏,你可以看到Tomcat的處理流程:把URL對應處理的Servlet關係造成,解析HTTP協議,封裝請求/響應對象,利用反射實例化具體的Servlet進行處理便可。
實現一個簡易版的 Tomcat 就這麼 7 大步搞定,你們能夠動手實現一下吧,代碼最好不要複製,本身動手一個個敲,這樣實現以後,對 Tomcat 就沒那麼陌生了。
歡迎你們關注個人公衆號【風平浪靜如碼】,海量Java相關文章,學習資料都會在裏面更新,整理的資料也會放在裏面。
以爲寫的還不錯的就點個贊,加個關注唄!點關注,不迷路,持續更新!!!