1. 程式人生 > >tomcat一次完整請求流程

tomcat一次完整請求流程

1 首先通過域名查詢IP地址
    順序是從 瀏覽器快取-主機快取-hosts-路由快取-DNS伺服器-根域名伺服器,得到域名的真實IP地址

2 開始TCP/IP 三次握手

        主要資料包括                    (1)序號:Seq序號,佔32位,用來標識從TCP源端向目的端傳送的位元組流,發起方傳送資料時對此進行標記。 
                    (2)確認序號:Ack序號,佔32位,只有ACK標誌位為1時,確認序號欄位才有效,Ack=Seq+1。 
                    (3)標誌位:共6個,即URG、ACK、PSH、RST、SYN、FIN等,具體含義如下: 

                    (A)URG:緊急指標(urgent pointer)有效。 
                    (B)ACK:確認序號有效。 
                    (C)PSH:接收方應該儘快將這個報文交給應用層。 
                    (D)RST:重置連線。 
                    (E)SYN:發起一個新連線。 

                    (F)FIN:釋放一個連線。

                            標記為ACK 

1.客戶端發起請求,將SYN=1,seq=x(第一次連線,x隨機生成,後面以1遞增),進入SYN_SENT狀態
            2.伺服器收到後,若在空閒狀態,就接收請求,併發回確認資料包,SYN=1,ACK= 1, seq=隨機數y,ack=x+1發完進入SYN-RCVD狀態3.客戶端接到伺服器確認後,檢查ack是否為x+1,ACK是否為1,如果是連線建立成功,將ACK=1,ack=y+1發回伺服器,都進入ESTABLISHED狀態

3 tomcat

 1) 請求被髮送到本機埠8080,被在那裡偵聽的Coyote HTTP/1.1 Connector獲得
                2) Connector把該請求交給它所在的Service的Engine來處理,並等待來自Engine的迴應 
                3) Engine獲得請求localhost/專案/頁面.jsp,匹配它所擁有的所有虛擬主機Host 

                4) Engine匹配到名為localhost的Host(即使匹配不到也把請求交給該Host處理,因為該Host被定義為該Engine的預設主機) 
                5) localhost Host獲得請求/專案/頁面.jsp,匹配它所擁有的所有Context 
                6) Host匹配到路徑為/專案的Context(如果匹配不到就把該請求交給路徑名為””的Context去處理) 
                7) path=”/專案”的Context獲得請求/頁面.jsp,在它的mapping table中尋找對應的servlet 
                8) Context匹配到URL PATTERN為*.jsp的servlet,對應於JspServlet類 
                9) 構造HttpServletRequest物件和HttpServletResponse物件,作為引數呼叫JspServlet的doGet或doPost方法 
                10)Context把執行完了之後的HttpServletResponse物件返回給Host 
                11)Host把HttpServletResponse物件返回給Engine 
                12)Engine把HttpServletResponse物件返回給Connector 
                13)Connector把HttpServletResponse物件返回給客戶browser