今天偶然看到常見web服務器的介紹有Apache HTTP server、Nginx、Microsoft IIS、GWS,心中不由產生了疑問,這些都是什麼呢?一直認爲tomcat就是web服務器,如下是百度對web服務器的介紹。java
看到這可能有些同窗不明白,通俗點來講web服務器的做用就是用戶經過瀏覽器向web服務器發送http請求,web服務器解析http請求將請求路徑的文件返回給瀏覽器,瀏覽器再將文件渲染顯示給咱們看,所以web服務器的做用就是返回服務端的靜態文件。web
那麼tomcat又是什麼呢?在瞭解Tomcat以前咱們先要知道Servlet是什麼,百度上說Servlet是用Java編寫的服務器端程序,具備獨立於平臺和協議的特性,主要功能在於交互式地瀏覽和生成數據,生成動態Web內容,看到這可能又迷糊了,說半天仍是不知道Servlet是什麼,其實Servlet就是一種用來處理網絡請求的一套規範。api
在用Eclipse搭建SSM項目的時候,不知道你們有沒有導入過Servlet-api的jar包呢?這個實際上就是servlet以及它的實現。能夠看到javax.servlet下的Servlet接口裏面有Servlet的生命週期方法。瀏覽器
而javax.servlet.http下的就是基於http通訊實現的servlet。而在tomcat的根目錄的lib文件夾下也有servlet-api這個jar包,所以在tomcat運行應用程序時咱們就不須要額外導入這個jar包了。tomcat
能夠看到HttpServlet接口就定義了咱們熟悉的一些http請求方法。服務器
瞭解了什麼是servlet後,那麼tomcat天然就很好理解了,tomcat是servlet容器,同時它也包括了web服務器的功能,所以tomcat是web服務器的擴展,也能夠理解爲tomcat就是web服務器。那麼爲何說tomcat是servlet容器呢?字面意思容器就是能夠容納不少東西,衆所周知,在tomcat上部署應用程序的時候,咱們是把應用程序放在tomcat根路徑下的webapps文件夾下,而這個文件夾下能夠放置多個應用程序,咱們能夠經過請求來決定具體訪問那個應用,由此咱們能夠知道tomcat的整個運行流程網絡
(1)用戶經過瀏覽器向服務器發送請求app
(2)tomcat接收請求後解析請求具體訪問哪一個應用webapp
(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咱們就能夠經過瀏覽器與服務端進行動態交互了。
以上是我學習後根據我的理解及查閱相關資料進行的總結,若有錯誤歡迎指正。