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