今天偶然看到常見web服務器的介紹有Apache HTTP server、Nginx、Microsoft IIS、GWS,心中不禁產生了疑問,這些都是什么呢?一直認為tomcat就是web服務器,以下是百度對web服務器的介紹。
看到這可能有些同學不明白,通俗點來說web服務器的作用就是用戶通過瀏覽器向web服務器發送http請求,web服務器解析http請求將請求路徑的文件返回給瀏覽器,瀏覽器再將文件渲染顯示給我們看,因此web服務器的作用就是返回服務端的靜態文件。
那么tomcat又是什么呢?在了解Tomcat之前我們先要知道Servlet是什么,百度上說Servlet是用Java編寫的服務器端程序,具有獨立於平台和協議的特性,主要功能在於交互式地瀏覽和生成數據,生成動態Web內容,看到這可能又迷糊了,說半天還是不知道Servlet是什么,其實Servlet就是一種用來處理網絡請求的一套規范。
在用Eclipse搭建SSM項目的時候,不知道大家有沒有導入過Servlet-api的jar包呢?這個實際上就是servlet以及它的實現。可以看到javax.servlet下的Servlet接口里面有Servlet的生命周期方法。
而javax.servlet.http下的就是基於http通信實現的servlet。而在tomcat的根目錄的lib文件夾下也有servlet-api這個jar包,因此在tomcat運行應用程序時我們就不需要額外導入這個jar包了。
可以看到HttpServlet接口就定義了我們熟悉的一些http請求方法。
了解了什么是servlet后,那么tomcat自然就很好理解了,tomcat是servlet容器,同時它也包括了web服務器的功能,因此tomcat是web服務器的擴展,也可以理解為tomcat就是web服務器。那么為什么說tomcat是servlet容器呢?字面意思容器就是可以容納很多東西,眾所周知,在tomcat上部署應用程序的時候,我們是把應用程序放在tomcat根路徑下的webapps文件夾下,而這個文件夾下可以放置多個應用程序,我們可以通過請求來決定具體訪問那個應用,由此我們可以知道tomcat的整個運行流程
(1)用戶通過瀏覽器向服務器發送請求
(2)tomcat接收請求后解析請求具體訪問哪個應用
(3)tomcat創建一個HttpServletRequest對象,將用戶發送的請求封裝到這個對象里
(4)tomcat創建一個HttpServletResponse對象
(5)Servlet容器調用HttpServlet對象的service方法,把HttpRequest對象與HttpResponse對象作為參數傳給 HttpServlet對象
(6)HttpServlet調用HttpRequest對象的有關方法,獲取Http請求信息
(7)HttpServlet調用HttpResponse對象的有關方法,生成響應數據
(8)Servlet容器把HttpServlet的響應數據結果傳給瀏覽器,瀏覽器再根據返回的response進行相應的渲染
綜上我們還可以猜測到servlet的出現就是彌補以前web服務器只能訪問靜態資源的問題,有了servlet我們就可以通過瀏覽器與服務端進行動態交互了。
以上是我學習后根據個人理解及查閱相關資料進行的總結,如有錯誤歡迎指正。