一、引言
首先來理解一下簡單的一個請求發送到響應的過程。
首先,客戶端,通常是瀏覽器或者一些應用發送請求到你的服務器地址,比如訪問你的Url或者其他的東西。而我們的服務器通常要分為兩個部分,一部分是服務器硬件,有了硬件之后還有有硬件上對應運行的軟件。即服務器軟件其次,服務器的硬件部分接收到了這一段請求,將其遞交給對應的進程,服務器軟件。此時這個服務器軟件即為Web服務器,比如說Apache。再然后,這些Web服務器服務器本身不一定提供動態頁面的訪問能力,所以對jsp或者一些其他的訪問需要其他的東西來輔助實現,這個東西類似於插件(客觀來講Tomcat不是Apache的一個插件,在這里暫且理解為插件)。在本例中,這個插件就是Tomcat。Tomcat是一個運行環境,或者叫容器。Tomcat負責實例化jsp並且處理請求(通俗的講就是“運行”jsp,搞到對應的響應信息),並且返回一個響應到apache,apache再調度硬件資源,則繼續將響應返回到客戶端。至此,一個響應完成。
二、定義
服務器
硬件角度上說就是一台高性能的Computer。我們通常指的服務器其實應該是裝有能夠處理具體請求事務的服務器軟件的Computer。比如最常見的www服務器、mail服務器、計費服務器、ftp服務器等等。很多時候人們常把諸如Tomcat、IIS、Weblogic 也稱之為web服務器,其實這些只是用於開發、集成、部署和管理Web應用、網絡應用和數據庫應用的應用服務器軟件。
資源網站大全 https://55wd.com 我的007辦公資源網站 https://www.wode007.com
Web服務器
web服務器可以處理Http協議,當web服務器接受到一個Http請求,會返回一個Http響應,例如送回一個html頁面。
web服務器可以響應針對靜態頁面或者圖片的請求,進行頁面跳轉(redirect),或者把動態響應(dynamic response)的產生委托(delegate)給一些其它的程序,例如 CGI 腳本,jsP(JavaServer Pages)腳本,servlets,ASP(Active Server Pages)腳本,服務器端 JavaScript,或者一些其它的服務器端技術。
web服務器僅僅提供一個可以執行服務器端程序和返回(程序產生)響應的環境,而不會超出職能范圍
web服務器主要是處理需要向瀏覽器發送html的請求以供瀏覽
Web服務器也可以叫做應用服務器。它的功能比web容器要強大的多,因為它可以部署EJB應用,可以實現容器管理的事務,一般的應用服務器有weblogic和websphere等,它們都是商業服務器,功能強大但都是收費的。
Web應用程序需要部署到Web容器或者Web服務器中才能運行,兩者都必須符合J2EE規范。
Web容器
web容器就是一種服務程序,在服務器中一個端口就對應一個提供相應服務的程序(比如Apache默認的端口為80),給處於其中的應用程序組件提供環境,使其直接跟容器中的環境變量交互,不必關注其它系統問題。而這個程序就是處理服務器從客戶端收到的請求,如Java中的Tomcat容器,ASP的IIS都是這樣的容器。這些容器兼容了Web服務器軟件的一些功能。一個服務器可以有多個容器。
如果web服務器應用得到一個指向servlet的請求(而不是其他請求,如請求一個普通的靜態html),此時服務器不是把這個請求交給servlet本身,而是交給部署該servlet的容器,要由容器調用servlet的方法,如doPost()或doGet()。
筆者在網上搜到的這些概念,很多時候也都混淆不清。容器和服務器有時候的定義也比較模糊,容器兼有了服務器的職責和能力。
容器中,中小型的Tomcat,Nginx大型的,JBoss、Weblogic、WebSphere等
應用程序服務器 The Application Servlet
根據定義,作為應用程序服務器,要求可以通過各種協議包括Http協議把商業邏輯暴露給expose客戶端應用程序,應用程序使用此商業邏輯就像你調用對象的一個方法或過程一樣。
Servlet(Server Applet),全稱 Java Servlet,未有中文譯文。是用 Java 編寫的服務器端程序。其主要功能在於交互式地瀏覽和修改數據,生成動態 Web 內容。狹義的 Servlet 是指 Java 語言實現的一個接口,廣義的 Servlet 是指任何實現了這個 Servlet 接口的類,一般情況下,人們將 Servlet 理解為后者。
Servlet 運行於支持 Java 的應用服務器中。從實現上講,Servlet 可以響應任何類型的請求,但絕大多數情況下 Servlet 只用來擴展基於 HTTP 協議的 Web 服務器。
Apache
Apache就是一個服務器(軟件),提供了靜態頁面的訪問能力。它配置上插件(模塊)后可以以各種語言實現動態頁面。(但是一定要注意Tomcat並不是Apache的插件)
Tomcat
Apache Tomcat(即平時所說的Tomcat),也是一個服務器。在這個案例中,Tomcat充當了一個插件的作用,這個插件是針對於Java的,或者說是jsp/servlet的。它是一個容器。何為容器?容器么,就是容器。容的是什么,jsP、Servlet。容器管理jsp、servlet的聲明周期,包括創建,運行,銷毀。它是一個jsp、servlet的運行環境。通俗點說,請求發過來,Tomcat負責執行jsP、Servlet,並返回結果。關於生命周期這東西,在此不做闡述。也就是說,沒有Tomcat,Apache是不認你jsP的。懂設計模式的可以想想了。。。當然,整個過程都有設計模式的影子
要注意:Tomcat本身也是可以單獨作為服務器來運行的。Tomcat 有時也被稱為Apache Tomcat,這個Apache指的並不是Apache服務器,而是一個“商標”,因為Tomcat是屬於Apache這個項目的
Apache與Tomcat比較聯系
apache支持靜態頁,tomcat支持動態的,比如servlet等。
一般使用apache+tomcat的話,apache只是作為一個轉發,對jsp的處理是由tomcat來處理的。
apache可以支持php\cgi\perl,但是要使用java的話,你需要tomcat在apache后台支撐,將java請求由apache轉發給tomcat處理。
apache是web服務器,Tomcat是應用(java)服務器,它只是一個servlet(jsp也翻譯成servlet)容器,可以認為是apache的擴展,但是可以獨立於apache運行。
共同點
兩者都是apache組織開發的
兩者都有HTTP服務的功能
兩者都是免費的
不同點:
Apache是專門用了提供HTTP服務的,以及相關配置的(例如虛擬主機、URL轉發等等)
Tomcat是Apache組織在符合J2EE的JSP、Servlet標准下開發的一個JSP服務器