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已經為你做好了!
myrequest
這裡,你可以清楚的看到,我們通過輸入流,對http協議進行解析,拿到了http請求頭的方法以及url。myresponse
基於http協議的格式進行輸出寫入。myservlet
前文說tomcat是滿足servlet規範的容器,那麼自然tomcat需要提供api。這裡你看到了servlet常見的doget/dopost/service方法。findgirlservlet和helloworldservlet
提供這2個具體的servlet實現,只是為了後續的測試!
你應該有些感覺了吧?mytomcat
start方法
start
dispatch
這裡,你能夠看到tomcat的處理流程:把url對應處理的servlet關係形成,解析http協議,封裝請求/響應物件,利用反射例項化具體的servlet進行處理即可。test mytomcat
running!
ok,mytomcat is so urgly,but i like it!
good night!
實現乙個迷你版的vue
專案位址 其實vue1和vue2最大的區別就是vue2多了乙個虛擬dom,其他的區別都是很小的。所以理解了vue1的原始碼,就相當於理解了vue2,中間差了乙個虛擬dom的diff演算法 先來科普一下mvvm的概念及原理 mini vuex 全域性方法 繼承minivue 產生乙個新的子類建構函式 ...
迷你版Vue 學習如何造乙個Vue輪子
專案位址 其實vue1和vue2最大的區別就是vue2多了乙個虛擬dom,其他的區別都是很小的。所以理解了vue1的原始碼,就相當於理解了vue2,中間差了乙個虛擬dom的diff演算法 先來科普一下mvvm的概念及原理 mini vuex 全域性方法 繼承minivue 產生乙個新的子類建構函式 ...
手寫乙個簡化版Tomcat
我們啟動tomcat時雙擊的startup.bat檔案的主要作用是找到catalina.bat,並且把引數傳遞給它,而catalina.bat中有這樣一段話 bootstrap.class是整個tomcat 的入口,我們在tomcat原始碼裡找到這個類,其中就有我們經常使用的main方法 這個類有兩...