應用程序服務器和Web服務器的區別

原文地址:http://www.javaworld.com/article/2077354/learn-java/app-server-web-server-what-s-the-difference.html

什麼是應用服務器和Web服務器之間的區別?

Web服務器專門處理HTTP請求,而應用程序服務器提供業務邏輯應用程序通過任意數量的協議交互。
讓我們更詳細地介紹:

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服務器爲客戶端程序處理應用邏輯方面問題。應用程序使用這些邏輯,就如同調用一個對象的方法(或者面向過程編程中的函數)一樣簡單。

  這些應用程序可能包含PC機上運行的GUI進程,web服務器,甚至其他的app服務器。app服務器和客戶端之間的通信並不侷限於簡單的顯示標記,而是可以由程序邏輯,比如數據表單、方法調用,而非靜態的HTML,這樣,客戶端程序就可以按需去用了!

  在大多數情況下,app服務器通過元件API,比如基於j2ee app服務器的EJB,來提供應用邏輯。而更多的情況下,app服務器自己管理自己的資源。這些責任(gate-keeping)包括安全、進程交互、資源池、消息分發等。同web服務器一樣,app服務器也可能需要各種可擴展性和容錯機制。

  以一個提供實時價格和相關信息的在線商店爲例,它極有可能提供了一個表單,用戶可以選擇不同的產品並查詢。它會查找,並通過HTML網頁展示結果。這個網站可能有多種方式來實現這個功能,下面我們將舉兩個相反的例子,一個不使用app服務器,而另一個使用。通過這兩個例子,可以幫助你理解app服務器的功能。

場景一:web服務器,而非app服務器

  在這個場景裏,web服務器獨自提供在線商店的功能。它接受用戶的請求,交給服務器端程序處理。該服務器端程序通過數據庫,或者純文本,查找到價格信息,然後生成HTML響應,通過web服務器返回給用戶的瀏覽器。

總結來說:web服務器僅需要接受HTTP請求,並響應HTML網頁。

場景二: 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服務器,集羣等)、更好的廠商選擇。

Learn more about this topic

For more articles on application servers, browse the Java Application Servers section of JavaWorld’s Topical Index
http://www.javaworld.com/channel_content/jw-appserv-index.shtml
Want more? See the Java Q&A index page for the full Q&A catalog
http://www.javaworld.com/columns/jw-qna-index.shtml
For more than 100 insightful Java tips from some of the best minds in the business, visit JavaWorld’s Java Tips index page
http://www.javaworld.com/columns/jw-tips-index.shtml
Learn more about application severs and Web servers in our Enterprise Java discussion
http://forums.idg.net/webx?50@@.ee6b80a
Sign up for JavaWorld’s free weekly Enterprise Java email newsletter
http://www.javaworld.com/subscribe
You’ll find a wealth of IT-related articles from our sister publications at IDG.net

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