什么是 Web 服務(wù)?
首先,讓我們從總體上了解一下什么是 Web 服務(wù),以及它們?yōu)楹螌浖_發(fā)重要。
究竟為什么重要呢?
如果您沒有聽說過有關(guān)面向服務(wù)的體系結(jié)構(gòu) (SOA) 和 Web 服務(wù)的大量信息,您就不會(huì)閱讀本文,那么問題就應(yīng)該是,為什么此內(nèi)容這樣重要?答案是,此內(nèi)容之所以重要,是因?yàn)檫@是應(yīng)用程序彼此進(jìn)行通信的方式的典型變化。SOAs 已經(jīng)存在很長很長時(shí)間了。SOA 最初主要由中間件應(yīng)用程序組成,至少進(jìn)行連接的兩端都屬于同一種類型的中間件。另一方面,Web 服務(wù)由一組標(biāo)準(zhǔn)組成,用于在不需要特定類型的中間件、編程語言甚至操作系統(tǒng)的前提下讓各種不同的系統(tǒng)進(jìn)行通信。接下來,讓我們了解一下其發(fā)展的歷程。
傳統(tǒng)應(yīng)用程序
首先從計(jì)算機(jī)發(fā)明開始,當(dāng)時(shí)給人感覺非常不錯(cuò)。計(jì)算機(jī)能執(zhí)行奇跡般的任務(wù),可實(shí)現(xiàn)很多手動(dòng)工作的自動(dòng)化,包括復(fù)雜的計(jì)算、財(cái)務(wù)工作等等很多其他任務(wù)。
但傳統(tǒng)應(yīng)用程序是“豎井”(Silo) 型的。人力資源應(yīng)用程序無法與財(cái)務(wù)應(yīng)用程序真正通信,而后者又無法和分布應(yīng)用程序進(jìn)行真正的通信。所有這些應(yīng)用程序都有獨(dú)立的領(lǐng)域,在獨(dú)立的計(jì)算機(jī)上運(yùn)行,盡管很有用,但并不能很好地在彼此間共享數(shù)據(jù)。當(dāng)時(shí)可以選擇對批處理流程進(jìn)行連接,以將數(shù)據(jù)從一個(gè)系統(tǒng)移動(dòng)到另一個(gè)系統(tǒng),但這并不適合進(jìn)行實(shí)時(shí)集成。
分布式計(jì)算
在我們的進(jìn)化鏈中的第二步是分布式計(jì)算。分布式計(jì)算允許不同的應(yīng)用程序彼此進(jìn)行通信(即使位于不同的計(jì)算機(jī)上也是如此)。CORBA、MTS 和 Enterprise Java Bean (EJB) 等技術(shù)提供了包含各種類別的注冊中心的系統(tǒng),因此應(yīng)用程序可以找到其希望與之進(jìn)行交互的組件,然后像調(diào)用本地的組件一樣調(diào)用這些組件。
這些系統(tǒng)由可同時(shí)滿足這兩個(gè)要求的中間件(或更具體一些,面向消息的中間件)提供支持?,F(xiàn)在能以特定的方式構(gòu)建應(yīng)用程序,即使位于不同的地理位置,也能訪問其他系統(tǒng)上的資源。
但仍然有一個(gè)問題。雖然系統(tǒng)可以自由地與系統(tǒng)內(nèi)的任何對象進(jìn)行通信,但仍然是一個(gè)封閉的系統(tǒng)。至少,客戶機(jī)應(yīng)用程序必須與服務(wù)器應(yīng)用程序使用相同的技術(shù)。另外,通常并不會(huì)將系統(tǒng)設(shè)計(jì)為從創(chuàng)建其的個(gè)體組織外進(jìn)行訪問。
Web 服務(wù)
此進(jìn)化鏈中下一個(gè)幾乎不可避免的鏈接點(diǎn)就是 Web 服務(wù)?!癢eb 服務(wù)”基于 XML 和 HTTP(大多數(shù)情況下),對很多人具有不同的含義,但在此處,我們要將 Web 服務(wù)作為系統(tǒng)間基于 SOAP 的消息交換進(jìn)行討論。
這些消息由 XML 組成(XML 是一個(gè)基于文本的開放標(biāo)準(zhǔn)),可由來自任何應(yīng)用程序(任何設(shè)計(jì)為接收此類消息的應(yīng)用程序)的任何人進(jìn)行訪問。這就擴(kuò)展了應(yīng)用程序的范圍,從而包含任何可通過網(wǎng)絡(luò)對其進(jìn)行訪問的任何人。(如果這讓您開始考慮安全問題,不要緊,您將在本系列的第 4 部分了解如何處理這方面的問題。)
基于 SOAP 的 Web 服務(wù)將要發(fā)送與清單 1 中所示類似的 XML 消息。
清單 1. 基于 SOAP 的 Web 服務(wù)
<SOAPenv:Envelope
xmlns:SOAPenv="http://schemas.xmlSOAP.org/SOAP/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAPenv:Body>
<req:getNumberOfArticles xmlns:req="http://daily-moon.com/CMS/">
<req:category>classifieds</req:category>
</req:getNumberOfArticles>
</SOAPenv:Body>
</SOAPenv:Envelope>
|
這些消息將從一個(gè)系統(tǒng)進(jìn)入另一個(gè)系統(tǒng)(通常通過 HTTP)。接收系統(tǒng)對消息進(jìn)行解釋,進(jìn)行應(yīng)該進(jìn)行從處理,然后發(fā)送另一個(gè) SOAP 消息作為響應(yīng)。
這個(gè)系統(tǒng)很簡單,正因?yàn)槿绱?,有很多企業(yè)級計(jì)算方面的內(nèi)容都尚未涉及。幸運(yùn)的是,其中的很多方面已被納入考慮范疇,且具有自己的相關(guān)規(guī)范來確定此事務(wù)應(yīng)如何進(jìn)行,以包含傳統(tǒng)的面向消息的中間件的很多安全和其他方面的內(nèi)容。
其他類型的 Web 服務(wù)
如果我沒有說明 SOAP 并不是唯一的處理 Web 服務(wù)的方法,那就有些失職了。有很多其他基于 XML 的方法用于在系統(tǒng)間發(fā)送信息,其中一些適用于企業(yè)環(huán)境,而另一些則不適合此用途。例如,Amazon 是為公眾提供對其系統(tǒng)的 Web 服務(wù)訪問的第一批基于 Web 服務(wù)的公司之一。Amazon 包含了一個(gè)基于 SOAP 的服務(wù),但也提供了一個(gè)基于 Representational State Transfer (REST) 的服務(wù)。
REST 是一種 Web 服務(wù)類型,其中,用戶直接訪問 URL,相應(yīng)的響應(yīng)是與清單 2 中所示類似的簡單 XML 文檔。
清單 2. REST 響應(yīng)
<currentArticles>
<category>classifieds</category>
<subcategory>forsale</subcategory>
<article id="888204">
<articleHeadline></articleHeadline>
<articleText>30 ft ladder, only used once. Willing to let
go for half it's worth. Has slight dent near the middle.
Harder than a human head. $150 OBO.</articleText>
</article>
<article id="888242">
<articleHeadline></articleHeadline>
<articleText>Vintage 1963 T-Bird. Less than 300 miles.
Driven by my daughter until I took it away. Serious inquires only.
555-3264 after 7 PM.</articleText>
</article>
</currentArticles>
|
這些消息并沒有特定的格式。可以為任何數(shù)據(jù)。
另一種 Web 服務(wù)類型要使用 XML-RPC 之類的標(biāo)準(zhǔn)。在這種情況下,命令將通過與清單 3 中所示類似的 XML 發(fā)送到系統(tǒng)。
清單 3. XML-RPC
<?xml version="1.0"?>
<methodCall>
<methodName>CMS.getNumberOfArticles</methodName>
<params>
<param>
<value><string>classifieds</string></value>
</param>
<param>
<value><string>forsale</string></value>
</param>
</params>
</methodCall>
|
其響應(yīng)將采用類似的格式。
在學(xué)習(xí)使用 SOAP 的過程中,您可以會(huì)打心底里認(rèn)為 REST 和 XML-RPC 比基于 SOAP 的系統(tǒng)要簡單得多。的確如此。在某些情況下 REST 和 XML-RPC 比 SOAP 系統(tǒng)簡單。不過,我們討論的不是在網(wǎng)站上顯示天氣的簡單應(yīng)用程序。我們此處討論的是企業(yè)級應(yīng)用程序,而企業(yè)級的應(yīng)用程序需要企業(yè)級的屬性,如安全、互操作性等等。這些功能在有關(guān)基于 SOAP 的 Web 服務(wù)的其他規(guī)范中進(jìn)行了定義,因而,從長期來看,SOAP 更適合用于企業(yè)級應(yīng)用程序。
讓我們了解一下這些規(guī)范。
基本 Web 服務(wù)規(guī)范
Web 服務(wù)規(guī)范通常歸為兩類:基本 Web 服務(wù)規(guī)范和擴(kuò)展 Web 服務(wù)規(guī)范。基本規(guī)范有:
-
SOAP:SOAP 規(guī)范是所有基于 SOAP 的 Web 服務(wù)的基礎(chǔ),詳細(xì)說明了實(shí)際消息的格式。其中還詳細(xì)說明了應(yīng)用程序應(yīng)如何對待消息的特定方面(如“Header”中的元素),從而可以創(chuàng)建特定類型的應(yīng)用程序,使其中的消息在達(dá)到最終的目的地前在多個(gè)中間層之間進(jìn)行傳遞。本教程將涵蓋 SOAP 規(guī)范的內(nèi)容。
-
WDSL:Web 服務(wù)描述語言是詳細(xì)說明描述基于 SOAP 的 Web 服務(wù)的標(biāo)準(zhǔn)方式的規(guī)范,包括消息應(yīng)采用的形式以及應(yīng)將其發(fā)送到何處。其中還詳細(xì)說明了此類消息的響應(yīng)。當(dāng)與相應(yīng)的工具結(jié)合使用時(shí),WSDL 允許以編程方式創(chuàng)建對 Web 服務(wù)的調(diào)用,甚至不用知道所查找的 Web 服務(wù)是什么;應(yīng)用程序可以從 WSDL 文件中提取這些詳細(xì)信息,并提供要使用的編程接口。我們將在本系列的第 2 部分討論 WSDL。
-
UDDI:統(tǒng)一描述、發(fā)現(xiàn)和集成 (Universal Description, Discovery and Integration) 是一項(xiàng)從最初提出后發(fā)生了一系列變化的標(biāo)準(zhǔn)。其最初的目的是為了給各個(gè)公司提供在全球注冊中心中注冊服務(wù)并在此注冊中心中搜索可能想使用的服務(wù)的機(jī)制。不過,由于很多公司對于將其系統(tǒng)對外開放的問題上都相當(dāng)保守,這個(gè)目標(biāo)并沒有完全實(shí)現(xiàn)。但是,很多公司已將 UDDI 作為內(nèi)部的服務(wù)及服務(wù)信息注冊中心使用,本系列第 3 部分將對其使用進(jìn)行詳細(xì)論述。
以上是一些基礎(chǔ)知識。另外差不多還有數(shù)十種擴(kuò)展標(biāo)準(zhǔn),可進(jìn)一步擴(kuò)展基于 SOAP 的服務(wù)的用途。
擴(kuò)展 Web 服務(wù)規(guī)范
總共有數(shù)十種 WS-* 規(guī)范,其中幾種對企業(yè)尤為有用。即:
-
WS-Security:此規(guī)范處理加密和數(shù)字簽名,允許創(chuàng)建特定類型的應(yīng)用程序,以防止竊聽消息,且能實(shí)現(xiàn)不可否認(rèn)功能。本系列的第 4 部分將討論 WS-Security。
-
WS-Policy:此規(guī)范對 WS-Security 進(jìn)行了擴(kuò)展,允許更具體地說明誰可以采用何種方式使用服務(wù)。本系列的第 5 部分將討論 WS-Policy。
-
WS-I:盡管 Web 服務(wù)應(yīng)設(shè)計(jì)成具有互操作性,但在實(shí)際中,各個(gè)規(guī)范對不同實(shí)現(xiàn)的解釋的靈活性常常足以導(dǎo)致出現(xiàn)問題。WS-I 提供了一組可用于防止出現(xiàn)各種問題的標(biāo)準(zhǔn)和實(shí)踐,并提供了標(biāo)準(zhǔn)化測試來檢查問題。WS-I 是本系列的第 6 部分將要討論的主題。
-
WS-BPEL:單個(gè)服務(wù)很好處理,但應(yīng)用程序在大多數(shù)情況下則較難處理。企業(yè)級計(jì)算要求至少將多個(gè)服務(wù)組合為一個(gè)完整的系統(tǒng),而 WS-BPEL 提供了用于指定創(chuàng)建此類系統(tǒng)所必需的交互(如分支和并發(fā)處理)。本系列的第 7 部分將討論 WS-BPEL。
在 Web 服務(wù)中扮演重要角色的其他規(guī)范將不在本系列中討論,其中包括 WS-ReliableMessaging
(允許確定檢索一個(gè)且僅一個(gè)消息副本)、Web 服務(wù)資源框架 (WSRF)(允許使用在無狀態(tài)環(huán)境中非常重要的狀態(tài))和 Web 服務(wù)分布式管理 (WSDM)(討論 Web 服務(wù)的管理和使用問題)??梢栽诒窘坛痰?a >參考資料中獲得有關(guān)這些規(guī)范及其他規(guī)范的更多信息。
將要完成的工作
在本教程中,您將了解 Daily Moon 報(bào)社的 Classifieds Department 如何將其自己的系統(tǒng)與內(nèi)容管理系統(tǒng)使用的基于 Web 服務(wù)的接口進(jìn)行集成。將創(chuàng)建一個(gè)應(yīng)用程序,以創(chuàng)建基于 SOAP 的消息,將其發(fā)送到服務(wù),然后檢索響應(yīng)。完成了此工作后,您將了解如何創(chuàng)建服務(wù)來響應(yīng)請求并發(fā)送自己的響應(yīng)。將通過創(chuàng)建 Java 應(yīng)用程序(使用或不使用應(yīng)用服務(wù)器)來完成此工作。
設(shè)置
現(xiàn)在已經(jīng)了解了所涉及的基本原理,接下來讓我們看看如何實(shí)際創(chuàng)建應(yīng)用程序。首先要使所需軟件就緒。
設(shè)置 Apache Geronimo
將需要的第一個(gè)軟件是 Web 應(yīng)用服務(wù)器。為什么需要 Web 應(yīng)用服務(wù)器呢?因?yàn)槟鷷?huì)發(fā)現(xiàn),沒有 Web 應(yīng)用服務(wù)器很難提供 Web 服務(wù)。Web 應(yīng)用服務(wù)器將偵聽請求,將這些請求轉(zhuǎn)換為實(shí)際服務(wù)可以理解的內(nèi)容,然后進(jìn)行任何必要的處理。
此過程中幾乎可以使用任何 Web 服務(wù)器,但在大多數(shù)情況下都將使用能簡化此過程的軟件(通常要求使用某種類型的實(shí)際應(yīng)用服務(wù)器)。具體來說,本教程假定您將使用 Java 應(yīng)用服務(wù)器。(實(shí)際上,將使用 J2EE 應(yīng)用服務(wù)器。)
對于 J2EE 服務(wù)器,有很多選擇;在本例中將使用 Apache Geronimo。Geronimo 是作為 IBM WebSphere Application Server Community Edition 基礎(chǔ)的開放源代碼應(yīng)用服務(wù)器。Geronimo 很小,非常易于安裝和管理。它還能與其他 Apache 項(xiàng)目(如稍后將安裝的 Axis2)一起良好地工作。
請下載相關(guān)軟件(請參閱先決條件)并將文件提取到目標(biāo)目錄中。您會(huì)發(fā)現(xiàn)所提取的文件中包含自身的目錄,因此可以直接對其進(jìn)行解包,并可將其移動(dòng)到任何位置。任何目錄都是可接受的,但要避免名稱中包含空格的目錄,如“Program Files”、“Documents and Settings”或其子目錄。例如,本教程的測試安裝使用的是 e:\geronimo-1.0。
就是這里。已經(jīng)在其中安裝了 Geronimo。這不是很簡單么?
要啟動(dòng)此服務(wù)器,請打開命令提示符窗口,并執(zhí)行以下命令:
cd <GERONIMO_HOME>
java -jar server.jar
要確保服務(wù)器正在運(yùn)行,請打開瀏覽器,并指向清單 4 中所示的 URL:
清單 4. 服務(wù)器 URL
應(yīng)該看到與圖 1 中所示類似的頁面。
圖 1. 服務(wù)器正在運(yùn)行
現(xiàn)在讓我們開始安裝 Web 服務(wù)軟件。
安裝 Apache Axis2
完全可能從普通 HTTP 服務(wù)器提供 Web 服務(wù)。不過,這樣并不明智。處理 SOAP 消息需要進(jìn)行很多工作,但沒有必要完全從頭進(jìn)行所有工作。Apache Axis 項(xiàng)目幾年前就對此任務(wù)進(jìn)行了簡化,創(chuàng)建了可方便地創(chuàng)建和處理 Web 服務(wù)的環(huán)境。該軟件包含了多個(gè)應(yīng)用程序,可幫助從普通項(xiàng)目創(chuàng)建 Web 服務(wù),從 Web 服務(wù)創(chuàng)建 Java 對象,并對二者進(jìn)行處理。Apache 小組已推出了 Axis 的新版本 Axis2,該版本繼承了 Axis 上的所有已有功能,并通過更改體系結(jié)構(gòu)實(shí)現(xiàn)了更大的靈活性,從而將其推向了一個(gè)新的高度。這很重要,因?yàn)?Web 服務(wù)規(guī)范隨時(shí)都在增加。Axis2 的構(gòu)造允許它更方便與 WSS4J、Apache 的 WS-Security 實(shí)現(xiàn)等項(xiàng)目集成。由于我們將在以后使用這些項(xiàng)目,因此請現(xiàn)在安裝 Axis2(有關(guān)下載信息,請參閱先決條件)。
請確保同時(shí)下載 Binary Distribution 和 War Distribution。前者將幫助構(gòu)建客戶機(jī),而后者用于幫助構(gòu)建服務(wù)。
要將 Axis2 安裝到 Web 服務(wù)器中,請將 axis2.war 文件復(fù)制到 Geronimo 的 deploy 目錄。(您將需要確保已經(jīng)至少啟動(dòng)過 Geronimo 一次,才能保證存在此目錄。)Geronimo 將自動(dòng)檢測其是否存在,因此不必手動(dòng)部署任何內(nèi)容。
驗(yàn)證 Axis 的安裝
要確保已經(jīng)恰當(dāng)安裝了所有內(nèi)容,請將瀏覽器指向 http://localhost:8080/axis2/index.jsp
并單擊 Validate。
應(yīng)該看到與圖 2 中所示類似的頁面。
圖 2. Axis 安裝成功
在繼續(xù)本教程的其他內(nèi)容前,請確保成功安裝了 Axis。
安裝示例服務(wù)
將要編寫的第一個(gè)應(yīng)用程序是客戶機(jī),因此將需要其可訪問的服務(wù)。幸運(yùn)的是,Axis2 分發(fā)版提供了若干此類服務(wù)。首先,將按照以下所示安裝 MyService
服務(wù):
- 通過將瀏覽器指向 http://localhost:8080/axis2/Login.jsp 并登錄,從而通過身份驗(yàn)證。缺省用戶名和密碼分別為
admin
和 Axis2
。
- 單擊 Upload service>Browse。
- 導(dǎo)航到 MyService.aar 文件??梢栽跇?biāo)準(zhǔn) Axis2 分發(fā)版的 samples\userguide 目錄下找到該文件。單擊 OK。
- 單擊 Upload。
應(yīng)該看到一個(gè)通知,指示服務(wù)已添加(請參閱圖 3)。在缺省情況下,Axis2 包含“熱部署”功能,因此不必進(jìn)行任何操作來激活。
如 3. MyService.aar 已上載
現(xiàn)在,讓我們了解一下將要構(gòu)建的內(nèi)容。
posted on 2006-12-29 18:25
SIMONE 閱讀(1313)
評論(0) 編輯 收藏 所屬分類:
AXIS 、
JAVA