從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.
下面的文章來源于互聯(lián)網(wǎng),對比了Web服務(wù)器和應(yīng)用服務(wù)器:
web服務(wù)器可以解析(handles)http協(xié)
議。當(dāng)web服務(wù)器接收到一個(gè)http請求(request),會(huì)返回一個(gè)http響應(yīng)
(response),例如送回一個(gè)html頁面。為了處理一個(gè)請求(request),web服務(wù)器可以響應(yīng)(response)一個(gè)靜態(tài)頁面或圖片,
進(jìn)行頁面跳轉(zhuǎn)(redirect),或者把動(dòng)態(tài)響應(yīng)(dynamic
response)的產(chǎn)生委托(delegate)給一些其它的程序例如cgi腳本,jsp(javaserver
pages)腳本,servlets,asp(active server
pages)腳本,服務(wù)器端(server-side)javascript,或者一些其它的服務(wù)器端(server-side)技術(shù)。無論它們(譯者
注:腳本)的目的如何,這些服務(wù)器端(server-side)的程序通常產(chǎn)生一個(gè)html的響應(yīng)(response)來讓瀏覽器可以瀏覽。
要知道,web服務(wù)器的代理模型(delegation
model)非常簡單。當(dāng)一個(gè)請求(request)被送到web服務(wù)器里來時(shí),它只單純的把請求(request)傳遞給可以很好的處理請求
(request)的程序(譯者注:服務(wù)器端腳本)。web服務(wù)器僅僅提供一個(gè)可以執(zhí)行服務(wù)器端(server-side)程序和返回(程序所產(chǎn)生的)響
應(yīng)(response)的環(huán)境,而不會(huì)超出職能范圍。服務(wù)器端(server-side)程序通常具有事務(wù)處理(transaction
processing),數(shù)據(jù)庫連接(database connectivity)和消息(messaging)等功能。
雖然web服務(wù)器不支持事務(wù)處理或數(shù)據(jù)庫連接池,但它可以配置(employ)各種策略(strategies)來實(shí)現(xiàn)容錯(cuò)性(fault
tolerance)和可擴(kuò)展性(scalability),例如負(fù)載平衡(load
balancing),緩沖(caching)。集群特征(clustering—features)經(jīng)常被誤認(rèn)為僅僅是應(yīng)用程序服務(wù)器專有的特征。
應(yīng)用程序服務(wù)器(the application server)
根據(jù)我們的定義,作為應(yīng)用程序服務(wù)器,它通過各種協(xié)議,可以包括http,把商業(yè)邏輯暴露給(expose)客戶端應(yīng)用程序。web服務(wù)器主要是處
理向?yàn)g覽器發(fā)送html以供瀏覽,而應(yīng)用程序服務(wù)器提供訪問商業(yè)邏輯的途徑以供客戶端應(yīng)用程序使用。應(yīng)用程序使用此商業(yè)邏輯就象你調(diào)用對象的一個(gè)方法
(或過程語言中的一個(gè)函數(shù))一樣。
應(yīng)用程序服務(wù)器的客戶端(包含有圖形用戶界面(gui)的)可能會(huì)運(yùn)行在一臺(tái)pc、一個(gè)web服務(wù)器或者甚至是其它的應(yīng)用程序服務(wù)器上。在應(yīng)用程序
服務(wù)器與其客戶端之間來回穿梭(traveling)的信息不僅僅局限于簡單的顯示標(biāo)記。相反,這種信息就是程序邏輯(program
logic)。正是由于這種邏輯取得了(takes)數(shù)據(jù)和方法調(diào)用(calls)的形式而不是靜態(tài)html,所以客戶端才可以隨心所欲的使用這種被暴露
的商業(yè)邏輯。
在大多數(shù)情形下,應(yīng)用程序服務(wù)器是通過組件(component)的應(yīng)用程序接口(api)把商業(yè)邏輯暴露(expose)(給客戶端應(yīng)用程序)
的,例如基于j2ee(java 2 platform, enterprise edition)應(yīng)用程序服務(wù)器的ejb(enterprise
javabean)組件模型。此外,應(yīng)用程序服務(wù)器可以管理自己的資源,例如看大門的工作(gate-keeping
duties)包括安全(security),事務(wù)處理(transaction processing),資源池(resource
pooling),和消息(messaging)。就象web服務(wù)器一樣,應(yīng)用程序服務(wù)器配置了多種可擴(kuò)展(scalability)和容錯(cuò)(fault
tolerance)技術(shù)。
一個(gè)例子
例如,設(shè)想一個(gè)在線商店(網(wǎng)站)提供實(shí)時(shí)定價(jià)(real-time
pricing)和有效性(availability)信息。這個(gè)站點(diǎn)(site)很可能會(huì)提供一個(gè)表單(form)讓你來選擇產(chǎn)品。當(dāng)你提交查詢
(query)后,網(wǎng)站會(huì)進(jìn)行查找(lookup)并把結(jié)果內(nèi)嵌在html頁面中返回。網(wǎng)站可以有很多種方式來實(shí)現(xiàn)這種功能。我要介紹一個(gè)不使用應(yīng)用程序
服務(wù)器的情景和一個(gè)使用應(yīng)用程序服務(wù)器的情景。觀察一下這兩中情景的不同會(huì)有助于你了解應(yīng)用程序服務(wù)器的功能。
情景1:不帶應(yīng)用程序服務(wù)器的web服務(wù)器
在此種情景下,一個(gè)web服務(wù)器獨(dú)立提供在線商店的功能。web服務(wù)器獲得你的請求(request),然后發(fā)送給服務(wù)器端(server-
side)可以處理請求(request)的程序。此程序從數(shù)據(jù)庫或文本文件(flat file,譯者注:flat
file是指沒有特殊格式的非二進(jìn)制的文件,如properties和xml文件等)中查找定價(jià)信息。一旦找到,服務(wù)器端(server-side)程序
把結(jié)果信息表示成(formulate)html形式,最后web服務(wù)器把會(huì)它發(fā)送到你的web瀏覽器。
簡而言之,web服務(wù)器只是簡單的通過響應(yīng)(response)html頁面來處理http請求(request)。
情景2:帶應(yīng)用程序服務(wù)器的web服務(wù)器
情景2和情景1相同的是web服務(wù)器還是把響應(yīng)(response)的產(chǎn)生委托(delegates)給腳本(譯者注:服務(wù)器端(server
-side)程序)。然而,你可以把查找定價(jià)的商業(yè)邏輯(business
logic)放到應(yīng)用程序服務(wù)器上。由于這種變化,此腳本只是簡單的調(diào)用應(yīng)用程序服務(wù)器的查找服務(wù)(lookup
service),而不是已經(jīng)知道如何查找數(shù)據(jù)然后表示為(formulate)一個(gè)響應(yīng)(response)。這時(shí)當(dāng)該腳本程序產(chǎn)生html響應(yīng)
(response)時(shí)就可以使用該服務(wù)的返回結(jié)果了。
在此情景中,應(yīng)用程序服務(wù)器提供(serves)了用于查詢產(chǎn)品的定價(jià)信息的商業(yè)邏輯。(服務(wù)器的)這種功能(functionality)沒有指
出有關(guān)顯示和客戶端如何使用此信息的細(xì)節(jié),相反客戶端和應(yīng)用程序服務(wù)器只是來回傳送數(shù)據(jù)。當(dāng)有客戶端調(diào)用應(yīng)用程序服務(wù)器的查找服務(wù)(lookup
service)時(shí),此服務(wù)只是簡單的查找并返回結(jié)果給客戶端。
通過從響應(yīng)產(chǎn)生(response-generating)html的代碼中分離出來,在應(yīng)用程序之中該定價(jià)(查找)邏輯的可重用性更強(qiáng)了。其他的
客戶端,例如收款機(jī),也可以調(diào)用同樣的服務(wù)(service)來作為一個(gè)店員給客戶結(jié)帳。相反,在情景1中的定價(jià)查找服務(wù)是不可重用的因?yàn)樾畔?nèi)嵌在
html頁中了。
總而言之,在情景2的模型中,在web服務(wù)器通過回應(yīng)html頁面來處理http請求(request),而應(yīng)用程序服務(wù)器則是通過處理定價(jià)和有效性(availability)請求(request)來提供應(yīng)用程序邏輯的。
警告(caveats)
現(xiàn)在,xml web services已經(jīng)使應(yīng)用程序服務(wù)器和web服務(wù)器的界線混淆了。通過傳送一個(gè)xml有效載荷(payload)給服務(wù)器,web服務(wù)器現(xiàn)在可以處理數(shù)據(jù)和響應(yīng)(response)的能力與以前的應(yīng)用程序服務(wù)器同樣多了。
另外,現(xiàn)在大多數(shù)應(yīng)用程序服務(wù)器也包含了web服務(wù)器,這就意味著可以把web服務(wù)器當(dāng)作是應(yīng)用程序服務(wù)器的一個(gè)子集(subset)。雖然應(yīng)用程
序服務(wù)器包含了web服務(wù)器的功能,但是開發(fā)者很少把應(yīng)用程序服務(wù)器部署(deploy)成這種功能(capacity)(譯者注:這種功能是指既有應(yīng)用
程序服務(wù)器的功能又有web服務(wù)器的功能)。相反,如果需要,他們通常會(huì)把web服務(wù)器獨(dú)立配置,和應(yīng)用程序服務(wù)器一前一后。這種功能的分離有助于提高性
能(簡單的web請求(request)就不會(huì)影響應(yīng)用程序服務(wù)器了),分開配置(專門的web服務(wù)器,集群(clustering)等等),而且給最佳
產(chǎn)品的選取留有余地。