乙個web請求的一生

2021-09-26 03:32:42 字數 2164 閱讀 4961

之前看過一些這方面的資料,有幾個博主寫的很不錯,但是側重點不太一樣。

我從自己的理解把內容總結一下,主要是方便自己記憶和理解。

先假設請求的連線是:http://localhost:8080/wcc/index.jsp 

請求從web到容器tomcat

如果是網域名稱訪問,那麼會有乙個尋找對應ip的過程:

客戶端先檢查本地是否有對應的ip位址,若找到則返回響應的ip位址。若沒找到則請求上級dns伺服器,直至找到或到根節點。

(瀏覽器快取→系統快取→路由器快取→isp dns快取→從根網域名稱伺服器遞迴搜尋) 

然後,通過三次握手,建立連線。

tomcat拿到請求到系統

1) 請求被傳送到本機埠8080,被在那裡偵聽的coyote http/1.1 connector獲得 

2) connector把該請求交給它所在的service的engine來處理,並等待來自engine的回應 

3) engine獲得請求localhost/wcc/index.jsp,匹配它所擁有的所有虛擬主機host

unpackwars="true" autodeploy="true">

4) engine匹配到名為localhost的host(即使匹配不到也把請求交給該host處理,因為該host被定義為該engine的預設主機) 

5) localhost host獲得請求/wcc/index.jsp,匹配它所擁有的所有context 

6) host匹配到路徑為/wcc的context(如果匹配不到就把該請求交給路徑名為」」的context去處理) 

系統拿到請求到具體的類和方法

系統中具體的類和方法返回響應data給系統

10)context把執行完了之後的httpservletresponse物件返回給host 

11)host把httpservletresponse物件返回給engine 

12)engine把httpservletresponse物件返回給connector 

系統給容器,容器返回給web

13)connector把httpservletresponse物件返回給客戶browser

-------------知識點補充---------------

補充請求到系統的乙個知識點。

目前我們的專案大多數是springmvc作為controller。如果專案是spring那麼在請求進入到系統的時候,會對引數進行format。

具體使用httpmessageconverter來進行轉換。

流程如下

請求報文-->httpinputmessage  -->httpmessageconverter  -->專案

系統發出響應到瀏覽器也是類似

專案-->httpmessageconverter  -->httpoutputmessage  -->響應報文spring專案中預設載入 httpmessageconveter 的6個實現類

分別是

stringhttpmessageconverter。

如果配置了加入 jackson jar包後,啟動的時候載入 第七個7個 httpmessageconverter 的實現類

使用httpmessageconverter的方式有@responsebody/@requestbody,以及 responseentity和 httpentity

spring首先根據請求頭或者響應頭的accept屬性選擇對應的converter,如果沒有找到,就會報錯。

一生只做乙個漢化

開篇故事 漢化聯盟的一次聚會 我遇到櫻姐 櫻姐 大師,好久不見 大師 羅莊 好久不見,我漢化 xx個遊戲,你呢 彈幕 漢化著魔了。無藥可救 櫻姐 一部。大師 羅莊 噢,一部?哪一部?彈幕 你又在裝什麼13。你知道的吧 開始進入裝x模式。櫻姐 g弦上的魔王 經常有人 問 國內最好的 最棒gal漢化組?...

乙個程式設計師的一生

我在程式設計師的時候,我一開始追逐這個api怎麼用,資料庫sql怎麼寫更優化,dcom技術的細節,然後我發現我寫出來的產品為了符合客戶需求必須要大量修改,但是我的 卻粘在了一起,第乙個感覺就是乙個函式太長,一看就頭痛,而且乙個函式幹了好多事。這些事本來可以一段一段的,每段寫上注釋,然後有意義命名,自...

乙個程式設計師的一生

我在程式設計師的時候,我一開始追逐這個api怎麼用,資料庫sql怎麼寫更優化,dcom技術的細節,然後我發現我寫出來的產品為了符合客戶 需求必須要大量修改,但是我的 卻粘在了一起,第乙個感覺就是乙個函式太長,一看就頭痛,而且乙個函式幹了好多事。這些事本來可以 一段一段的,每段寫上注釋,然後有意義命名...