從JavaEE 5的firstcup文檔中得到下面的信息:
  A Java EE server is a server application that the implements the Java EE platform APIs and provides
the standard Java EE services. Java EE servers are sometimes called application servers, because they
allow you to serve application data to clients, much as how web servers serve web pages to webbrowsers.

  下面的文章來源于互聯網,對比了Web服務器和應用服務器:

  web服務器可以解析(handles)http協 議。當web服務器接收到一個http請求(request),會返回一個http響應 (response),例如送回一個html頁面。為了處理一個請求(request),web服務器可以響應(response)一個靜態頁面或圖片, 進行頁面跳轉(redirect),或者把動態響應(dynamic response)的產生委托(delegate)給一些其它的程序例如cgi腳本,jsp(javaserver pages)腳本,servlets,asp(active server pages)腳本,服務器端(server-side)javascript,或者一些其它的服務器端(server-side)技術。無論它們(譯者 注:腳本)的目的如何,這些服務器端(server-side)的程序通常產生一個html的響應(response)來讓瀏覽器可以瀏覽。

  要知道,web服務器的代理模型(delegation model)非常簡單。當一個請求(request)被送到web服務器里來時,它只單純的把請求(request)傳遞給可以很好的處理請求 (request)的程序(譯者注:服務器端腳本)。web服務器僅僅提供一個可以執行服務器端(server-side)程序和返回(程序所產生的)響 應(response)的環境,而不會超出職能范圍。服務器端(server-side)程序通常具有事務處理(transaction processing),數據庫連接(database connectivity)和消息(messaging)等功能。

  雖然web服務器不支持事務處理或數據庫連接池,但它可以配置(employ)各種策略(strategies)來實現容錯性(fault tolerance)和可擴展性(scalability),例如負載平衡(load balancing),緩沖(caching)。集群特征(clustering—features)經常被誤認為僅僅是應用程序服務器專有的特征。

應用程序服務器(the application server)

  根據我們的定義,作為應用程序服務器,它通過各種協議,可以包括http,把商業邏輯暴露給(expose)客戶端應用程序。web服務器主要是處 理向瀏覽器發送html以供瀏覽,而應用程序服務器提供訪問商業邏輯的途徑以供客戶端應用程序使用。應用程序使用此商業邏輯就象你調用對象的一個方法 (或過程語言中的一個函數)一樣。

  應用程序服務器的客戶端(包含有圖形用戶界面(gui)的)可能會運行在一臺pc、一個web服務器或者甚至是其它的應用程序服務器上。在應用程序 服務器與其客戶端之間來回穿梭(traveling)的信息不僅僅局限于簡單的顯示標記。相反,這種信息就是程序邏輯(program logic)。正是由于這種邏輯取得了(takes)數據和方法調用(calls)的形式而不是靜態html,所以客戶端才可以隨心所欲的使用這種被暴露 的商業邏輯。

  在大多數情形下,應用程序服務器是通過組件(component)的應用程序接口(api)把商業邏輯暴露(expose)(給客戶端應用程序) 的,例如基于j2ee(java 2 platform, enterprise edition)應用程序服務器的ejb(enterprise javabean)組件模型。此外,應用程序服務器可以管理自己的資源,例如看大門的工作(gate-keeping duties)包括安全(security),事務處理(transaction processing),資源池(resource pooling),和消息(messaging)。就象web服務器一樣,應用程序服務器配置了多種可擴展(scalability)和容錯(fault tolerance)技術。

一個例子

  例如,設想一個在線商店(網站)提供實時定價(real-time pricing)和有效性(availability)信息。這個站點(site)很可能會提供一個表單(form)讓你來選擇產品。當你提交查詢 (query)后,網站會進行查找(lookup)并把結果內嵌在html頁面中返回。網站可以有很多種方式來實現這種功能。我要介紹一個不使用應用程序 服務器的情景和一個使用應用程序服務器的情景。觀察一下這兩中情景的不同會有助于你了解應用程序服務器的功能。

情景1:不帶應用程序服務器的web服務器

  在此種情景下,一個web服務器獨立提供在線商店的功能。web服務器獲得你的請求(request),然后發送給服務器端(server- side)可以處理請求(request)的程序。此程序從數據庫或文本文件(flat file,譯者注:flat file是指沒有特殊格式的非二進制的文件,如properties和xml文件等)中查找定價信息。一旦找到,服務器端(server-side)程序 把結果信息表示成(formulate)html形式,最后web服務器把會它發送到你的web瀏覽器。

  簡而言之,web服務器只是簡單的通過響應(response)html頁面來處理http請求(request)。

情景2:帶應用程序服務器的web服務器

  情景2和情景1相同的是web服務器還是把響應(response)的產生委托(delegates)給腳本(譯者注:服務器端(server -side)程序)。然而,你可以把查找定價的商業邏輯(business logic)放到應用程序服務器上。由于這種變化,此腳本只是簡單的調用應用程序服務器的查找服務(lookup service),而不是已經知道如何查找數據然后表示為(formulate)一個響應(response)。這時當該腳本程序產生html響應 (response)時就可以使用該服務的返回結果了。

  在此情景中,應用程序服務器提供(serves)了用于查詢產品的定價信息的商業邏輯。(服務器的)這種功能(functionality)沒有指 出有關顯示和客戶端如何使用此信息的細節,相反客戶端和應用程序服務器只是來回傳送數據。當有客戶端調用應用程序服務器的查找服務(lookup service)時,此服務只是簡單的查找并返回結果給客戶端。

  通過從響應產生(response-generating)html的代碼中分離出來,在應用程序之中該定價(查找)邏輯的可重用性更強了。其他的 客戶端,例如收款機,也可以調用同樣的服務(service)來作為一個店員給客戶結帳。相反,在情景1中的定價查找服務是不可重用的因為信息內嵌在 html頁中了。

  總而言之,在情景2的模型中,在web服務器通過回應html頁面來處理http請求(request),而應用程序服務器則是通過處理定價和有效性(availability)請求(request)來提供應用程序邏輯的。

警告(caveats)

  現在,xml web services已經使應用程序服務器和web服務器的界線混淆了。通過傳送一個xml有效載荷(payload)給服務器,web服務器現在可以處理數據和響應(response)的能力與以前的應用程序服務器同樣多了。

  另外,現在大多數應用程序服務器也包含了web服務器,這就意味著可以把web服務器當作是應用程序服務器的一個子集(subset)。雖然應用程 序服務器包含了web服務器的功能,但是開發者很少把應用程序服務器部署(deploy)成這種功能(capacity)(譯者注:這種功能是指既有應用 程序服務器的功能又有web服務器的功能)。相反,如果需要,他們通常會把web服務器獨立配置,和應用程序服務器一前一后。這種功能的分離有助于提高性 能(簡單的web請求(request)就不會影響應用程序服務器了),分開配置(專門的web服務器,集群(clustering)等等),而且給最佳 產品的選取留有余地。