我們知道了tomcat的啟動過程,現在來看一下tomcat的處理請求的過程。
假設來自客戶的請求為:http://localhost:8080/test/index.jsp
1、請求被發送到本機連接埠8080,被在那裡偵聽的Coyote HTTP/1.1 Connector獲得
2、Connector把該請求交給它所在的Service的Engine來處理,並等待Engine的回應
3、Engine獲得請求localhost:8080/test/index.jsp,匹配它所有虛擬機器主機Host
4、Engine匹配到名為localhost的Host(即使匹配不到也把請求交給該Host處理,因為該Host被定義為該Engine的預設主控件)
5、localhost Host獲得請求/test/index.jsp,匹配它所擁有的所有Context
6、Host匹配到路徑為/test的Context(如果匹配不到就把該請求交給路徑名為""的Context去處理)
7、path="/test"的Context獲得請求/index.jsp,在它的mapping table中尋找對應的servlet
對於jsp,第一次訪問會先翻譯成servlet,所以第一次訪問jsp會比較慢。
servlet預設在tomcat中只有一個執行個體。如果不配置load-on-startup,那麼在第一次訪問的時候初始化。
8、Context匹配到URL PATTERN為*.jsp的servlet,對應於JspServlet類
9、構造HttpServletRequest對象和HttpServletResponse對象,作為參數調用JspServlet的doGet或doPost方法
10、Context把執行完了之後的HttpServletResponse對象返回給Host
11、Host把HttpServletResponse對象返回給Engine
12、Engine把HttpServletResponse對象返回給Connector
13、Connector把HttpServletResponse對象返回給客戶browser
原文:http://my.oschina.net/whp/blog/37586