2025-07-08

其實讀jetty的代碼到現在,對整個jetty服務器的運行以及實現概況都已經有瞭大體的瞭解,這篇文章就先對整個jetty的實現設計做一個簡單的概述吧。。。。

先來一張圖來描述一下整個jetty服務器的整體結構。。。

 

這裡隻是隻是將一些重要的主線部分給畫瞭出來。。並沒有描述一些細節,例如contextListener,sessionHandler什麼的。。。

 

接下來來敘述一下整個http的處理流程。。。。。由於實在不知道該怎麼畫圖。。那就用文字描述一下吧:

(1)首先外部的建立tcp連接的請求被serversocketchannel接收到,然後獲取到遠程鏈接,並將其註冊到selector上面去(這裡就直說nio的瞭)

(2)selector發現瞭某個註冊的chanel可讀瞭,那麼激活這個httpconnection的http處理流程

(3)當一個httpconnection接收到一個完整的http請求之後,會將這個請求交給server來處理

(4)server會將http請求交給內部的handler來處理。。反正最後肯定會交給contextHandlerCollection來處理(同時部署多個web程序),

(5)contextHandlerCollection對請求的路徑進行判斷,將其路由給對應的WebAppContext來處理。。。

(6)WebAppContext再交由內部的servlethandler來處理(這裡一般在前面還有一層sessionHandler,用於處理關聯的session)。。。然後servlethandler在將在內部對請求的path再做一些路由,交給對應的servlet來處理。。。(到此為止,請求的處理jetty要做的事情就完成瞭,剩下的事情就是用戶定義的代碼做的事情瞭。。。)

 

好瞭,那麼到這裡整個jetty的大的方面的框框也是我最開始最想要搞懂的東西都算是差不多瞭。。

那麼剩下的可能就是一些細節部分的代碼的分析瞭。。。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *