挖坑挖了這么長時(shí)間也該繼續(xù)填坑了,上文書講到從零開始寫一個(gè)Tomcat(貳)--建立動(dòng)態(tài)服務(wù)器,講了如何讓服務(wù)器解析請(qǐng)求,分離servlet請(qǐng)求和靜態(tài)資源請(qǐng)求,讀取靜態(tài)資源文件輸出或是通過URLClassLoader找到我們請(qǐng)求的servlet,反射生成對(duì)應(yīng)的實(shí)例,調(diào)用其service方法,傳遞初級(jí)解析的request和response,完成請(qǐng)求.
這很tomcat,but too simple
閱讀本文,你將了解
- 連接器(connector),處理器(processor)邏輯分離
- 如何高效的解析請(qǐng)求中的header,parameters
- 生成更加完善的ServletRequest和ServletResponse
- Tomcat經(jīng)典的facade模式
本章的代碼部分是自己寫的,更多的是從Tomcat源碼上扒下來的
HttpConnector / HttpProcessor
之前的AsServer的主類中實(shí)現(xiàn)了所有接收請(qǐng)求,解析request,生成response,調(diào)用ServletProcessor的方法.我們首先將邏輯分離.
HttpConnector只負(fù)責(zé)接收請(qǐng)求,將SocketServer調(diào)用accept方法獲得的socket傳遞給processor實(shí)例,本次請(qǐng)求中HttpConnector的工作結(jié)束,接下來的任務(wù)由HttpProcessor繼續(xù)
HttpProcessor總體的邏輯和之前沒有大的變化,基本上就是創(chuàng)建Request,創(chuàng)建Response,解析request,解析header,判斷請(qǐng)求的是靜態(tài)資源還是動(dòng)態(tài)資源,并交給相應(yīng)的處理器處理.