《How Tomcat Works》第三章 聯結器

2021-08-21 05:20:49 字數 1290 閱讀 4894

前面第二章講的是簡單的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 部署往往需要...