之前看過一些這方面的資料,有幾個博主寫的很不錯,但是側重點不太一樣。
我從自己的理解把內容總結一下,主要是方便自己記憶和理解。
先假設請求的連線是: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技術的細節,然後我發現我寫出來的產品為了符合客戶 需求必須要大量修改,但是我的 卻粘在了一起,第乙個感覺就是乙個函式太長,一看就頭痛,而且乙個函式幹了好多事。這些事本來可以 一段一段的,每段寫上注釋,然後有意義命名...