前面第二章講的是簡單的servlet容器,其中httpserver類負責等待http請求,然後構建解析request,response,之後再通過classloader呼叫servlet的service方法或者說直接呼叫靜態資源。
到了第三章,就將上一章中的httpserver類中的等待接受http請求與解析request,response兩大職責拆分了開來,前者成為了httpconnector,負責構建serversocket接受請求,後者成為了httpprocessor,負責解析request與response。
下面這張uml圖描述了這些類的關係:
下面說一下程式執行的流程:
首先bootstrap類啟動httpconnector.
然後構建serversocket ,進入迴圈之中等待htttp請求的到來,獲取socket之後,呼叫httpprocessor的process方法。
public void process(socket socket) else
// close the socket
socket.close();
//no shutdown for
} catch (exception e)
}
到了這個方法之後,就建立httprequest,httprespnse例項,解析請求,解析頭部最後再根據uri決定是呼叫靜態資源的process方法,還是呼叫servlet的service方法。
其實http請求解析是相當複雜的任務,這裡總結一下書上的具體流程:
獲取套接字輸入流
解析請求行(一般是為了獲取uri)
解析頭部
解析cookies
獲取引數
How Tomcat Works學習筆記《六》
生命週期 catalina包括很多元件,當catalina啟動的時候,也需要啟動這些元件,當關閉catalina的時候同時也需要關閉這些元件。tomcat通過事件機制來實現這種控制,所有的元件都實現org.apache.catalina.lifecycle介面 packageorg.apache.c...
How Tomcat Works學習筆記《十二》
host和engine 在catalina中engine代表catalina實體,host代表乙個虛擬的主機,engine包括多個host,乙個host包括多個context。在tomcat中host用org.apache.catalina.host介面表示 public inte cehostex...
how tomcat works 第十三章
本章要討論的兩個主題是主機 host 和引擎 engine 如果需要在乙個 tomcat 部署中部署多個上下文,需要使用乙個主機。理論上,當只有乙個上下文容器的時候不需要主機,正如 org.apache.catalina.context 介面中描述的那樣。但是實踐中,乙個 tomcat 部署往往需要...