tomcat通過endpoint元件接收socket連線,接收到乙個socket連線後會執行如下步驟
1.第一次從socket中獲取資料inputbuffer中,bio對應的是internalinputbuffer,父類是abstractinputbuffer
2.然後基於inputbuffer進行解析資料
3.先解析請求行,把請求行,請求uri,請求協議等封裝到ruquest物件中
4.request中的屬性都是messagebytes型別的,直接可以理解為位元組型別,因為從socket中獲取的資料都是位元組,在解析的過程中不用直接把位元組轉成字串,並且messagebytes雖然表示位元組,但是他並不會真正的儲存位元組,還是使用的bytechunk基於inputbuffer中的位元組陣列來進行標記,標記位元組陣列中的哪乙個範圍來進行標記,標記位元組陣列中的哪乙個範圍表示請求方法,那個乙個範圍表示請求uri等等.
5.然後解析請求頭,和解析請求行類似
6.解析完請求頭之後,就基於請求頭來初始化一些引數,比如connection是keepalive還是close,比如是否有content-length,並且對應的長度是多少,還包括當前請求在處理請求體時應該使用哪種inputfilter.
7.然後將請求交給容器
8.容器再將請求交給具體的servlet進行處理
9.servlet在處理請求的過程會利用response進行響應,返回資料給客戶端,乙個普通的響應過程會先把資料先寫入乙個緩衝區,當呼叫flush或者close方法時會把緩衝區的內容傳送給socket
10.servlet處理完請求後會先檢查是否需要把響應資料傳送給socket
11.接著看當前請求的請求體是否處理完成,是否還有剩餘資料,如果有剩餘資料需要把這些資料處理掉,以便能夠獲取到下乙個請求的資料
12.然後回到第一步開始處理下乙個請求
Tomcat處理乙個HTTP請求的過程
假設來自使用者的請求為 http localhost 8080 wsota wsota index.jsp 1 請求被傳送到本機埠8080,被在那裡偵聽的coyote http 1.1 connector獲得 2 connector把該請求交給它所在的service的engine來處理,並等待來自e...
Tomcat處理乙個http請求的過程
1 請求被傳送到本機埠8080,被在那裡偵聽的coyote http 1.1 connector獲得 2 connector把該請求交給它所在的service的engine來處理,並等待來自engine的回應 3 engine獲得請求localhost wsota wsota index.jsp,匹...
Tomcat結構以及處理乙個請求的過程
1.tomcat結構 tomcat是乙個基於元件的伺服器,它的構成元件都是可配置的,其中最外層的元件是catalina servlet容器,其他的元件按照一定的格式要求配置在這個頂層容器中。tomcat的各個元件是在 conf server.xml檔案中配置的,tomcat伺服器預設情況下對各種元件...