更新時間:2020-04-30 11:06:53 來源:動力節(jié)點 瀏覽2709次
回想一下一個http請求的過程,你在瀏覽器輸入xxx.com,經(jīng)過域名解析-->發(fā)起tcp的3次握手-->建立tcp連接后發(fā)起http請求-->服務(wù)器響應(yīng)http請求,瀏覽器得到html代碼-->瀏覽器解析html代碼,并請求html代碼中的資源(如js、css、圖片等)-->瀏覽器對頁面進行渲染呈現(xiàn)給用戶
每一個web服務(wù)器程序都需要從網(wǎng)絡(luò)接受http請求,然后提供http回復(fù)給請求者。http回復(fù)一般包含一個html文件,有時也可以包含純文本文件、圖像或其他類型的文件。
畫外音:web服務(wù)器就是一個處理http請求的應(yīng)用程序。
實現(xiàn)大致步驟:
初始化服務(wù)端ServerSocket
初始化TreadPool
while(true)等待客戶端連接
<<服務(wù)器啟動完成>>
客戶端請求
clientHandler處理客戶端的請求
線程池的線程處理handler
根據(jù)輸入流解析請求(解析請求行,解析消息頭,解析消息正文)
根據(jù)輸出流創(chuàng)建響應(yīng)對象(發(fā)送狀態(tài)行信息,發(fā)送響應(yīng)頭信息,發(fā)送響應(yīng)正文信息)
<<靜態(tài)html處理結(jié)束>>
尋找servlet根據(jù)請求路徑找到需要哪個servlet處理(選擇handler)
通過反射機制加載這個類
實例化servlet
servlet處理請求(執(zhí)行handler結(jié)束)
<<跳轉(zhuǎn)html處理結(jié)束>>
一個應(yīng)用程序是不是先要啟動起來?main函數(shù)當(dāng)然要有,init方法當(dāng)然有,我們先不管高性能之類的東西,多路復(fù)用Reactor之類的,但是總的有處理并發(fā)能力吧,線程池大小默認(rèn)處理器的核心數(shù),多的也處理不過來!服務(wù)器通信歸根結(jié)底都是socket通信,包括redis服務(wù)器都是底層都是socket通信。我們怎么知道http請求來了,先長輪詢。
http請求來了,怎么處理?當(dāng)然需要有定義handler去處理。
handler處理客戶端請求并完成響應(yīng):
處理過來的請求當(dāng)然要根據(jù)輸入流解析請求,根據(jù)輸出流創(chuàng)建響應(yīng)對象。需要判斷是不是后端請求,如果不是后端請求,需要找到對應(yīng)的文件,設(shè)置響應(yīng)頭,設(shè)置響應(yīng)體,返回給瀏覽器,找不到則返回404。如果是后端請求需要經(jīng)過servlet,我們肯定需要通過請求路徑找到對應(yīng)的配置文件,我們配置可以放在xml里面,也可以放到map里面,通過反射機制加載某個類,然后實例化某個servlet,處理完設(shè)置請求頭,設(shè)置請求體返回給客戶端。
知識點:IPO模型。
一個簡單的web服務(wù)器的思路已經(jīng)基本有了,但是為什么springboot應(yīng)用不用你單獨啟動服務(wù)器?springboot默認(rèn)使用的是Tomcat作為內(nèi)嵌的服務(wù)器。所以,我們搭建一個工程將會變得非常的簡單。springboot應(yīng)用會自動啟動一個嵌入的Tomcat服務(wù)器實例,至于怎么做到自動的,你問過自己為什么嗎?
以上就是動力節(jié)點java培訓(xùn)機構(gòu)的小編針對“java web服務(wù)器學(xué)習(xí),簡單得實現(xiàn)思路”的內(nèi)容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。
相關(guān)閱讀
初級 202925
初級 203221
初級 202629
初級 203743