Web服務器的工作原理
1.Tomcat Server處理一個HTTP請求的過程
1、用戶點擊網頁內容,請求被發送到本機端口8080,被在那里監聽的Coyote HTTP/1.1 Connector獲得。
2、Connector把該請求交給它所在的Service的Engine來處理,並等待Engine的回應。
3、Engine獲得請求localhost/test/index.jsp,匹配所有的虛擬主機Host。
4、Engine匹配到名為localhost的Host(即使匹配不到也把請求交給該Host處理,因為該Host被定義為該Engine的默認主機),
名為localhost的Host獲得請求/test/index.jsp,匹配它所擁有的所有的Context。
Host匹配到路徑為/test的Context(如果匹配不到就把該請求交給路徑名為“ ”的Context去處理)。
5、path=“/test”的Context獲得請求/index.jsp,在它的mapping table中尋找出對應的Servlet。
Context匹配到URL PATTERN為*.jsp的Servlet,對應於JspServlet類。
6、構造HttpServletRequest對象和HttpServletResponse對象,作為參數調用JspServlet的doGet()或doPost().執行業務邏輯、
數據存儲等程序。
7、Context把執行完之后的HttpServletResponse對象返回給Host。
8、Host把HttpServletResponse對象返回給Engine。
9、Engine把HttpServletResponse對象返回Connector。
10、Connector把HttpServletResponse對象返回給客戶Browser
2.WEB服務器
web服務器是可以向發出請求的瀏覽器提供文檔的程序
它是一種被動程序,只有當Internet上運行在其他電腦上的瀏覽器發出請求時,
服務器才會響應,WEB服務器主要功能是提供網上信息瀏覽服務
常用的web服務器有兩個 微軟的信息服務器IIS,Apache的Tomcat
3.Web服務器工作原理圖解
---------------------
首先我們暫時不考慮HTTP協議的各種請求方式,我們先跟着(Web服務器工作原理總體描述01)這張圖,將一次Web服務的工作流程過一遍,我們假設以瀏覽器作為客戶端
(1) 用戶做出了一個操作,可以是填寫網址敲回車,可以是點擊鏈接,可以是點擊按鍵等,接着瀏覽器獲取了該事件。
(2) 瀏覽器與對端服務程序建立TCP連接。
(3) 瀏覽器將用戶的事件按照HTTP協議格式打包成一個數據包,其實質就是在待發送緩沖區中的一段有着HTTP協議格式的字節流。
(4) 瀏覽器確認對端可寫,並將該數據包推入Internet,該包經過網絡最終遞交到對端服務程序。
(5) 服務端程序拿到該數據包后,同樣以HTTP協議格式解包,然后解析客戶端的意圖。
(6) 得知客戶端意圖后,進行分類處理,或是提供某種文件、或是處理數據。
(7) 將結果裝入緩沖區,或是HTML文件、或是一張圖片等。
(8) 按照HTTP協議格式將(7)中的數據打包
(9) 服務器確認對端可寫,並將該數據包推入Internet,該包經過網絡最終遞交到客戶端。
(10) 瀏覽器拿到包后,以HTTP協議格式解包,然后解析數據,假設是HTML文件。
(11) 瀏覽器將HTML文件展示在頁面
以上為Web服務器工作基本原理。其實不難發現,這僅僅只是一個簡單的網絡通信。我們應該深信,作為一個服務器,其根本的工作無非有三個
接收數據 2. 發送數據 3. 數據處理
而Web服務器的本質就是 接收數據 ⇒ HTTP解析 ⇒ 邏輯處理 ⇒ HTTP封包 ⇒ 發送數據
高級的服務器無非就是將這三個部分更加細致的設計了。