# Tomcat # ——web服務器的內(nèi)部實現(xiàn)原理剖析及實戰(zhàn)"Tomdog"

Tomdog服務器——手動實現(xiàn)+從源頭了解tomcat基本實現(xiàn)原理以及http協(xié)議

Tomdog-webserver-SystemArchitecture_畫板 1.png

以上圖片是tomdog服務器(手寫翻版的tomcat)的內(nèi)部實現(xiàn)結構,其實現(xiàn)了tomcat的基本原理層,通過此過程我們可以了解一個請求流程的整體過程和內(nèi)部原理。

源代碼Tomdog——tomcat的手寫翻版地址:http稍后上傳
源代碼TomdogExample——開發(fā)的符合tomdog規(guī)范的webapp案例(類似開發(fā)一個由tomcat運行的webapp)地址:http稍后上傳

零、咱們的web服務器是一個運行在服務端機器上的軟件。

  • 它運行并初始化后,循環(huán)監(jiān)聽發(fā)來的請求,accept()方法一旦收到請求,創(chuàng)建一個客戶端處理線程ClientHandler,負責后續(xù)的處理(為了保護性能,tomdog會把所有處理線程放入線程池進行管理,默認最大并發(fā)量為可在代碼中設置)。
  • 初始化的過程中,ServerContext、HttpContext中會通過靜態(tài)代碼塊,預加載tomdog.xml、web.xml并掃描webapp下所有掛在的第三方webapp,加載其對應的web.xml并根據(jù)配置內(nèi)容然后掃描、加載所有內(nèi)部的servlet類文件、并將加載的類對象、servlet以映射形式存在map中,以備后用。

開始請求流程

一、用戶使用客戶端軟件進行請求

  • 客戶端軟件(瀏覽器、APP、小程序等各類具有網(wǎng)絡通信功能的應用)向服務器端的web服務器(軟件tomcat)發(fā)送請求??蛻舳藢⒄埱笮畔⒋虬Mrequest中,并按照計算機網(wǎng)絡協(xié)議裝進socket中,轉(zhuǎn)化為二進制信息通過網(wǎng)絡傳輸?shù)椒掌鳌?/li>

二、web服務器軟件工作

2.1準備工作

2.1.1創(chuàng)建Httprequest對象并解析請求

  • Httprequest對象構造方法中初始化
  • 從socket中得到輸入流以獲取信息解析
  • 解析
    1. 請求行
      • 進一步解析協(xié)議版本、請求資源、請求方式以及通過get方式發(fā)送過來的參數(shù)(跟在url后面的)分別放入成員變量中并根據(jù)需要提供get、set方法,所有參數(shù)放入成員變量parameters中
    2. 消息頭
      • 將消息頭的鍵值對解析并放入成員變量Map<String> headers中
    3. 消息正文
      • 根據(jù)消息頭中的Content-Type區(qū)分正文類型,作進一步解析,通過post方式發(fā)送的參數(shù)數(shù)據(jù)會在這里出現(xiàn),解析后放入Map<String,Object> parameters


        image.png

2.1.2創(chuàng)建Httpresponse對象——初始化響應對象

  • 準備一些默認值即可


    image.png

2.2處理請求

2.2.1處理流程如圖

  • 交給默認的servlet進行處理,接下來即一般不是請求一些文件資源,就是請求了特定servlet并移交處理
  • 在springMVC框架中,DispatcherServlet充當了這里的特定servlet,并在后續(xù)轉(zhuǎn)交給用戶定義的controller進行處理。


    image.png

2.3響應客戶端

2.3.1調(diào)用response.flush()進行響應

  1. 發(fā)送狀態(tài)行
  2. 發(fā)送響應頭
  3. 發(fā)送響應正文
  • 從socket中得到輸出流,將響應信息全部寫入輸出流以進行信息返回三者數(shù)據(jù)


    image.png

三、響應

  • 向客戶端返回發(fā)送響應,所有響應信息已經(jīng)由tomdog打包進request中,并由底層按照計算機網(wǎng)絡協(xié)議通過輸出流裝進socket中,轉(zhuǎn)化為二進制信息通過網(wǎng)絡傳輸?shù)娇蛻舳恕?/li>
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容