在當今的軟件開發領域,各類框架涌現,極大地提升了開發效率。以 Java 開發為例,Spring 框架不斷演進,Spring Boot 更是簡化到只需引入 Maven 包,添加諸如@SpringBootApplication、@RestController等注解,就能輕松啟動一個 Web 應用。然而,這種便利性也帶來了一個問題:許多開發者對底層原理的理解日益模糊。近期在面試中發現,無論是應屆畢業生,還是有著多年工作經驗的開發者,對瀏覽器通過 HTTP 域名訪問后端代碼中method的具體機制,大多一知半解。
在此,一同重溫這些重要的底層知識。如今,開發者們沉浸在各種框架搭建的便捷世界里,Java中的 Servlet,這個曾經開啟眾多開發者編程之路的基礎知識點,或許已被不少人遺忘或忽視。但若不了解底層原理,又怎能在技術之路上穩健前行?
首先,我們來認識一下 Web 服務器。Web服務器猶如網絡世界的信息樞紐,主要職責是接收并處理來自客戶端(如瀏覽器)的 HTTP 請求,然后返回相應的網頁內容或數據。在 Java 開發領域,Tomcat專為運行Java Web應用而生,對Servlet、JSP等技術提供了強大的支持。Tomcat 主要由以下幾部分構成:
- Servlet容器,如同 Servlet 的 “管家”,全面管理 Servlet 的生命周期。它接收客戶端的請求,依據請求特性精準分配給對應的 Servlet 進行處理,最后將處理結果反饋給客戶端。
- JSP引擎,堪稱 JSP 頁面的 “翻譯大師”,能將 JSP 頁面巧妙轉化為 Java Servlet 代碼,然后進行編譯與執行。在運行過程中,它還具備自動感知頁面更新的能力,一旦頁面有變動,便自動重新編譯,確保應用程序實時體現代碼的最新變化。
- HTTP服務器,它像一位時刻警覺的 “門衛”,監聽著指定端口的 HTTP 請求。一旦請求來臨,迅速解析請求信息,并及時給出相應的響應。
- 連接器,它扮演著 “橋梁” 的角色,支持 HTTP、HTTPS、AJP 等多種協議連接,為與其他服務器或應用程序之間的順暢通信提供了便利。
接下來,我們深入剖析瀏覽器的HTTP請求是如何找到代碼中controller的:
請求監聽與接收,Tomcat作為廣泛應用的Web服務器,默認監聽 8080 端口上的HTTP請求。當客戶端發出請求時,Tomcat迅速響應,以極高的效率接收并細致解析請求信息,為后續處理奠定基礎。
Servlet 定位與對象創建,若該請求指向一個 Servlet,Tomcat 憑借其強大的路由機制,依據請求中的 URL,精準定位到對應的Servlet。與此同時,Tomcat會立即創ServletRequest與ServletResponse兩個至關重要的對象,將請求的詳細信息封裝進ServletRequest,然后傳遞給Servlet的service方法進行業務處理。這一步就像是為Servlet的工作準備好所需的全部材料。
業務處理與響應回傳,Servlet 依據預設的業務邏輯,如同一位技藝精湛的工匠,對請求進行精心運算處理,生成相應的響應數據。隨后,借助ServletResponse對象,將處理結果準確無誤地回傳給客戶端,至此完成一次完整的請求 - 響應交互。
此時,如果借助一張形象的示意圖,喚起了大家熟悉的記憶吧