原文: http://www.javaworld.com/javaqa/2002-08/01-qa-0823-appvswebserver.html html
簡單來講,web服務器提供頁面給瀏覽器,而app服務器提供客戶端能夠調用的接口。具體而言,咱們能夠說:
java
Web服務器處理HTTP請求,而app服務器基於多種不一樣的協議,處理應用程序的邏輯問題。
web
如下將詳細介紹它們之間的區別。
數據庫
Web服務器
編程
web服務器處理HTTP協議。當收到一個HTTP請求以後,web服務器會返回一個HTTP響應,好比一個HTML頁面。爲了處理請求,它可能響應一個靜態的HTML頁面、圖片、重定向,或者代理(delegate)其餘動態響應。這些動態響應能夠由其餘程序生成,包括CGI腳本,JSPs,servlets,ASPs,服務器端的Javascript,或者其餘服務器端技術。而這些服務器端程序響應,大多數時候都表現爲HTML頁面,供瀏覽器訪問。
瀏覽器
理解一個web服務器的代理模型(delegate model)相對比較簡單。當web服務器接收到一個請求,它只是簡單的將請求交給處理該請求的最優程序。除了爲服務器程序簡單的提供一個運行環境(服務器程序能夠在其中運行,而且返回生成的響應)以外,web服務器不提供任何功能。服務器程序通常本身處理交換(transaction)、數據庫鏈接、消息分發等。
緩存
雖然web服務器不提供以上的服務,可是它通常會提供諸如容錯機制,負載均衡、緩存、集羣等的可擴展性。然後者,通常來講不該該部署在web服務器上,而應該在app服務器上!
安全
App服務器
服務器
根據咱們的定義,app服務器能夠基於各類不一樣的協議(可能包含HTTP協議),爲客戶端程序提供應用邏輯的處理。不一樣於web服務器主要發送用來展現在瀏覽器上的HTML頁面,app服務器爲客戶端程序處理應用邏輯方面問題。應用程序使用這些邏輯,就如同調用一個對象的方法(或者面向過程編程中的函數)同樣簡單。
app
這些應用程序可能包含PC機上運行的GUI進程,web服務器,甚至其餘的app服務器。app服務器和客戶端之間的通訊並不侷限於簡單的顯示標記,而是能夠由程序邏輯,好比數據表單、方法調用,而非靜態的HTML,這樣,客戶端程序就能夠按需去用了!
在大多數狀況下,app服務器經過元件API,好比基於j2ee app服務器的EJB,來提供應用邏輯。而更多的狀況下,app服務器本身管理本身的資源。這些責任(gate-keeping)包括安全、進程交互、資源池、消息分發等。同web服務器同樣,app服務器也可能須要各類可擴展性和容錯機制。
一個例子
以一個提供實時價格和相關信息的在線商店爲例,它極有可能提供了一個表單,用戶能夠選擇不一樣的產品並查詢。它會查找,並經過HTML網頁展現結果。這個網站可能有多種方式來實現這個功能,下面咱們將舉兩個相反的例子,一個不使用app服務器,而另外一個使用。經過這兩個例子,能夠幫助你理解app服務器的功能。
場景1:web服務器,而非app服務器
在這個場景裏,web服務器獨自提供在線商店的功能。它接受用戶的請求,交給服務器端程序處理。該服務器端程序經過數據庫,或者純文本,查找到價格信息,而後生成HTML響應,經過web服務器返回給用戶的瀏覽器。
總結來講,web服務器僅須要接受HTTP請求,並響應HTML網頁。
場景2: web服務器 + app服務器
同場景1同樣,web服務器仍然代理腳本生成的響應。可是你能夠把業務邏輯部署在app服務器上。這樣,腳本就不須要去關注怎樣查詢和生成響應,而僅須要調用app服務器提供查詢服務,從而利用其生成它的HTML響應。
在這個例子中,app服務器提供了價格查詢的業務邏輯。這個邏輯不該該包含怎樣去展現,或者強迫客戶端使用這些數據。相反的是,客戶端和app服務器進行交互,只有當客戶端調用了app服務器的價格查詢服務的時候,該服務才查找到信息並返回。
♩HTML代碼生成分離開後,價格查詢邏輯的複用性提升了。另一個客戶端,好比收銀機,一樣能夠調用這個接口。而場景1裏,價格查詢服務就很難被重用,由於它和HTML頁面緊密聯繫。
總結來講,第二個場景中,web服務器處理HTTP請求,並返回HTML頁面,而app服務器處理業務邏輯。
注意事項
近來,XML web服務器模糊了app服務器和web服務器的界限。發送一個XML請求給web服務器,web服務器能夠像過去的app服務器同樣,處理數據並返回響應。
另外,不少app服務器包含web服務器,這就意味着你能夠把web服務器看作app服務器的一個子集。雖然app服務器包含web服務器的功能,可是開發者仍是不多以此身份發佈app服務器。若是須要的話,他們一般將web服務器和app服務器分離開。這樣的目的是,性能(簡單的web請求不會影響到app服務器的性能)、發佈配置(專用的web服務器,集羣等)、更好的廠商選擇。