web開發的基礎

簡介:

在web開發的學習開始,我總是有些概念搞不清楚,這裏的web開發特指在spring mvc下的開發,比如說,spring mvc和tomcat什麼關係啊,爲什麼說tomcat是一個web server,在tomcat主頁中提到的servlet container是什麼意思,既然是個容器,那其中裝的servlet又是什麼,客戶端發起的http請求到底是誰負責處理的,這些內容都在我一開始學習的時候給我造成了很大的阻礙。一個最明顯的地方就是,我甚至無法分析一個springapplication的執行過程。

淺談什麼是webserver

從實體上看,webserver是一個運行在服務器應用程序,他的作用就是一直監聽某個端口,響應客戶端的http請求,根據請求內容,作出相應的處理,這裏的相應的處理可以是服務器上靜態資源的獲取,當然也可以是動態計算服務的獲取。前者我們可以很輕鬆的就可以實現,訪問服務器靜態資源然後封裝成response返回給客戶端即可。但是後者就顯得有些麻煩,早期的實現也相當直接,我只要根據不同的訪問要求,然後去執行服務器不同的計算程序即可。而這個通過http調用本機不同服務程序的轉換接口就是CGI(common gate interface)。執行過程如下圖所示:

這樣的處理的方法是服務端需要爲每個服務請求都開一個進程,在早期網絡服務還不發達的時候尚且可以接受,但是隨着網絡服務的發展,當服務量過大的時候,服務器端的計算資源肯定喫不消。所以servlet的概念就誕生了。

servlet是實際上也是webserver的一個概念,只不過他是由java所定義的接口標準,我們首先看下圖:

通過圖示我們可以看到,客戶端不同的請求實際上是通過不同的線程轉發給servlet的,最終由servlet完成計算服務,然後將結果封裝回webserver,最終返回給用戶。這樣做的好處就是大大減輕了服務端的壓力,因爲我們知道,線程的創建所消耗的資源是要小於進程的。

總結一下,webserver主要的作用就是幫助我們進行http連接的管理,我們只需要關注實際的計算過程。而無需過多的關注網絡連接的維護。

什麼是tomcat

簡單來講,tomcat就是webserver的java具體實現(其中之一)。主要實現了servlet container和jsp。前者對應mvc中的controller,後者對應view。爲什麼叫servlet container呢?我們都知道在面向對象的java中,無論是數據還是計算最終都是由一個個的實例對象完成的。因此我麼要想相應客戶端的某些請求,就必須通過實例化與之對應的servlet實現。如果我們自己管理對象,可能會出現的較多的問題,因此tomcat幫我們將這些servlet統一管理在了servlet container中,用容器統一管理servlet的生命週期和所需的依賴關係。

講了這麼多,還是貼一張圖更能說明問題:

我們可以看到,實際上servlet就是一個接口規範,用來統一http和服務器的具體計算線程。

spring mvc與tomcat的交互

這裏其實不單單是指tomcat,任何實現了servlet標準的web容器,都可以與spring mvc進行交互。spring mvc的策略就是通過請求分發中心:DispatcherServlet來實現的。具體做法就是在spring boot啓動時,將DispatcherServlet註冊到具體使用的實現了servlet標準的web容器中。http消息依然由web server具體負責,而webserver將其接收到的http消息封裝爲servlet request,然後通過DispatcherServlet統一的進行分發,然後去執行與之對應的用戶自定義的處理器方法。這樣就完成了實際計算代碼和http請求的解耦合。使得開發人員只需關注具體的計算過程即可,並不需要關注如何將計算結果返回給客戶端。大大減輕了開發人員的工作,同時也提升程序開發的魯棒性。

參考:

servlet詳解:什麼是servlet

深入理解spring mvc源代碼:p198

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章