本文介紹使用AXIS作為開(kāi)發(fā)環(huán)境來(lái)體會(huì )Web服務(wù)的開(kāi)發(fā)過(guò)程。
本文并不是想介紹Web服務(wù)的原理、系統架構等,我們假設您已經(jīng)了解了關(guān)于Web服務(wù)的一些基本的概念、原理等知識。本文主要是針對那些已經(jīng)了解Web服務(wù)概念,但是還沒(méi)有親身體會(huì )Web服務(wù)所帶來(lái)令人歡欣鼓舞的特征的開(kāi)發(fā)人員。在此我們認為你已經(jīng)具備了Java、XML等基礎知識,如果你還有其他開(kāi)發(fā)環(huán)境的經(jīng)驗例如VB、VC那是再好不過(guò)的了。
雖然我們并不想詳細講述Web服務(wù)的體系結構,但是大概的介紹一下還是有必要的。Web服務(wù)是一種新型的Web應用程序。不同于其他Web應用程序,它是自適應、自我描述、模塊化的應用程序,并可以跨越Web進(jìn)行發(fā)布、定位以及調用。簡(jiǎn)單的Web服務(wù)可以提供例如天氣預報或者航班信息的服務(wù)。一旦部署了Web服務(wù),其他的應用程序就可以發(fā)現和調用所部署的服務(wù)。
Axis框架來(lái)自 Apache 開(kāi)放源代碼組織,它是基于JAVA語(yǔ)言的最新的 SOAP 規范(SOAP 1.2)和 SOAP withAttachments 規范(來(lái)自 Apache Group)的開(kāi)放源代碼實(shí)現。有很多流行的開(kāi)發(fā)工具都使用AXIS作為其實(shí)現支持Web服務(wù)的功能,例如JBuilder以及著(zhù)名的EclipseJ2EE插件Lomboz。AXIS的最新版本是1.1,可以從 http://ws.apache.org/axis/index.html下載。下圖是AXIS核心引擎的體系結構圖:

圖1
整個(gè)AXIS項目包括以下幾個(gè)部分:
AXIS目前版本支持的標準是:W3C SOAP 1.1 和 1.2;WSDL 1.1;SAAJ 1.1(SUN公司:SOAP withAttachments API for Java);JAX-RPC(SUN公司:Java API for XML-Based RPC)1.0。
除了前面介紹的AXIS外,本文中還將會(huì )用到TOMCAT,這里不再另行介紹。另外為了演示W(wǎng)eb服務(wù)真正與開(kāi)發(fā)環(huán)境無(wú)關(guān)以及AXIS產(chǎn)生的是標準的、符合規范的Web服務(wù),我們還將用到微軟公司的SOAPTOOLKIT以及微軟的開(kāi)發(fā)環(huán)境VB和VC來(lái)做為Web服務(wù)的客戶(hù)端。
![]() ![]() |
![]()
|
由于A(yíng)XIS本身是基于JAVA語(yǔ)言開(kāi)發(fā)的項目,并且是以Web應用形式發(fā)布的,因此它運行時(shí)需要一個(gè)應用服務(wù)器作為支撐。為了方便我們這里選用的是Tomcat。由于A(yíng)XIS本身需要用到處理XML信息的包,所以我們建議使用JDK1.4并安裝Tomcat4.1.24。下面是環(huán)境搭建步驟,讀取根據自身情況進(jìn)行安裝。

圖2
點(diǎn)擊超鏈接Validate后,AXIS會(huì )自動(dòng)檢查所需的每一個(gè)JAVA組件,這協(xié)組件分為:必需組件以及可選組件,必須保證所有必需組件都存在,如下圖所示即為驗證成功。

圖3
![]() ![]() |
![]()
|
三. Web Service服務(wù)端開(kāi)發(fā)
經(jīng)過(guò)了前兩步之后我們就可以開(kāi)始Web服務(wù)之旅了!大多數人在學(xué)習一種編程語(yǔ)言的第一步都是從Helloworld程序開(kāi)始的,我們也不例外。我們將提供這樣一個(gè)Web服務(wù),通過(guò)給它傳入姓名,服務(wù)返回:你好[姓名],歡迎來(lái)到Web服務(wù)的世界。這就是我們的需求。我們將馬上根據AXIS的要求完成我們的需求,你就會(huì )發(fā)現原來(lái)Web服務(wù)可以這么簡(jiǎn)單!
編寫(xiě)JAVA類(lèi)Hello.java,內容如下:
public class Hello{ |
僅此而已,無(wú)需編譯,將該文件改名為Hello.jws并拷貝到AXIS應用目錄C:\Tomcat\webapps\axis下。
下面我們就可以測試該Web服務(wù)了,打開(kāi)瀏覽器并輸入剛剛創(chuàng )建的文件名對應的URL地址http://localhost:8080/axis/Hello.jws 瀏覽器顯示如下結果:
There is a Web Service here |
點(diǎn)擊頁(yè)面上的鏈接查看該Web服務(wù)對應的WSDL信息如下所示(我們將在下一小節簡(jiǎn)單介紹WSDL)
<?xml version="1.0" encoding="UTF-8" ?> |
到此我們已經(jīng)完成了hello的Web服務(wù)了,那我們怎么告訴用戶(hù)如何來(lái)使用該服務(wù)呢?我們只需要告訴用戶(hù)我們的Web服務(wù)的URL地址:http://localhost:8080/axis/Hello.jws?wsdl 就可以了!下一節我們將介紹如何通過(guò)這個(gè)地址來(lái)訪(fǎng)問(wèn)對應的Web服務(wù)。
![]() ![]() |
![]()
|
四. Web Service客戶(hù)端開(kāi)發(fā)
在這一節中我們將使用三種不同的語(yǔ)言來(lái)訪(fǎng)問(wèn)剛剛創(chuàng )建的Web服務(wù),分別是JAVA、VB、VC。為了使用VB和VC訪(fǎng)問(wèn)Web服務(wù),我們需要安裝微軟公司的Soap Toolkit 開(kāi)發(fā)工具包,這個(gè)工具包可以從微軟公司的主頁(yè)
http://download.microsoft.com/download/xml/soap/2.0/W98NT42KMe/EN-US/SoapToolkit20.exe
下載,下載該軟件包并使用默認方式安裝即可。
在開(kāi)始客戶(hù)端開(kāi)發(fā)之前有兩個(gè)概念我們必須先粗略的介紹一下。
SOAP:簡(jiǎn)單對象訪(fǎng)問(wèn)協(xié)議。這是一種在松散的、分布的環(huán)境中使用XML對等地交換結構化的和類(lèi)型化的信息提供了一個(gè)簡(jiǎn)單且輕量級的機制,它是一個(gè)基于XML的協(xié)議。它包括四個(gè)部分:SOAP封裝(envelop),封裝定義了一個(gè)描述消息中的內容是什么,是誰(shuí)發(fā)送的,誰(shuí)應當接受并處理它以及如何處理它們的框架;SOAP編碼規則(encoding rules),用于表示應用程序需要使用的數據類(lèi)型的實(shí)例; SOAP RPC表示(RPCrepresentation),表示遠程過(guò)程調用和應答的協(xié)定;SOAP綁定(binding),使用底層協(xié)議交換信息。
雖然這四個(gè)部分都作為SOAP的一部分,作為一個(gè)整體定義的,但他們在功能上是相交的、彼此獨立的。特別的,信封和編碼規則是被定義在不同的XML命名空間(namespace)中,這樣使得定義更加簡(jiǎn)單。
SOAP的主要設計目標是簡(jiǎn)明性和可擴展性。這就意味著(zhù)有一些傳統消息系統或分布式對象系統中的特性將不包含在SOAP的核心規范中。這些特性包括:分布式垃圾收集;批量消息傳輸/處理;對象引用;對象激活。
WSDL:WebService描述語(yǔ)言。使用了WSDL,我們就可以通過(guò)這種跨平臺和跨語(yǔ)言的方法使WebService代理的產(chǎn)生自動(dòng)化。就像COM和CORBA的IDL文件,WSDL文件由客戶(hù)和服務(wù)器約定。由于WSDL設計成可以綁定除SOAP以外的其他協(xié)議,這里我們主要關(guān)注WSDL在HTTP上和SOAP的關(guān)系。同樣,由于SOAP目前主要用來(lái)調用遠程的過(guò)程和函數,WSDL支持SOAP傳輸的文檔規范。
WSDL文檔可以分為兩部分。頂部分由抽象定義組成,而底部分則由具體描述組成。抽象部分以獨立于平臺和語(yǔ)言的方式定義SOAP消息,它們并不包含任何隨機器或語(yǔ)言而變的元素。這就定義了一系列服務(wù),截然不同的網(wǎng)站都可以實(shí)現。
使用AXIS的工具將使Web服務(wù)的訪(fǎng)問(wèn)和我們之前介紹的創(chuàng )建一個(gè)Web服務(wù)一樣的簡(jiǎn)單。我們前面安裝的AXIS環(huán)境中已經(jīng)包含著(zhù)這樣的工具,它是一個(gè)JAVA類(lèi),類(lèi)名為:org.apache.axis.wsdl.WSDL2Java。打開(kāi)命令行窗口,轉到AXIS目錄下的WEB-INF子目錄。確保Tomcat服務(wù)已經(jīng)處于啟動(dòng)狀態(tài),鍵入命令 :
Java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java http://localhost:8080/axis/Hello.jws?wsdl |
該命令執行的結果是在當前所在目錄下產(chǎn)生一個(gè)子目錄 localhost/axis/Hello_jws,該目錄下有四個(gè)JAVA源文件,它們分別是:
Hello.java 定義了Web服務(wù)接口,此例中只有一個(gè)hello方法。
HelloService.java 定義了用于獲取Web服務(wù)接口的方法。
HelloServiceLocator.java 接口HelloService的具體實(shí)現。
HelloSoapBindingStub.java Web服務(wù)客戶(hù)端樁,通過(guò)該類(lèi)與服務(wù)器交互。
這四個(gè)JAVA類(lèi)幫我們處理了大部分的邏輯,我們需要的僅僅是把這些類(lèi)加到我們的項目然后創(chuàng )建一個(gè)我們自己的類(lèi)來(lái)調用它們即可。為此我們新加一個(gè)類(lèi)Main.java,為了方便,讓這個(gè)類(lèi)與剛產(chǎn)生的四個(gè)類(lèi)都在同一個(gè)包下。內容如下:
//Main.java |
使用以下命令進(jìn)行編譯:
javac -classpath lib\axis.jar;lib\jaxrpc.jar localhost\axis\Hello_jws\*.java |
如果編譯沒(méi)有問(wèn)題的話(huà)執行該測試程序:
java -Djava.ext.dirs=lib -cp . localhost.axis.Hello_jws.Main//運行結果:Response:你好罐頭,歡迎來(lái)到Web服務(wù)的世界! |
在WSDL2Java工具自動(dòng)產(chǎn)生的幾個(gè)類(lèi)中,類(lèi)HelloServiceLocator中保存這一些跟服務(wù)器相關(guān)的信息,例如URL地址等,當服務(wù)器的地址更改后但是服務(wù)并沒(méi)有改動(dòng)的時(shí)候直接修改該文件中的字符串定義,而無(wú)需重新生成這幾個(gè)類(lèi)。具體需要修改的內容,打開(kāi)該文件便可一目了然。
有了微軟SOAP toolkit,用VB調用Web服務(wù)也是一件令人愉快的事情。
打開(kāi)VB開(kāi)發(fā)環(huán)境新建一個(gè)標準EXE項目,打開(kāi)工程(Project)菜單并選擇引用打開(kāi)組件引用對話(huà)框如下圖所示:找到并選中Microsoft Soap Type Library。

圖 4
新建并編輯窗體如下圖所示:

圖 5
編輯按鈕Call的點(diǎn)擊事件處理程序如下:(注意窗體的控件名稱(chēng)要與程序中的名稱(chēng)對應)
Private Sub callBtn_Click() |
保存項目并運行,輸入姓名并點(diǎn)擊按鈕Call。
打開(kāi)VC開(kāi)發(fā)環(huán)境,新建項目HelloClient,項目類(lèi)型為 Win32 Console Application的空項目。新建C++ Source File文件名為:HelloSoap.cpp,編輯文件內容如下:
//#include "stdafx.h" |
編譯并運行該項目。
本節只是為了演示如果通過(guò)VC來(lái)訪(fǎng)問(wèn)使用AXIS創(chuàng )建的Web服務(wù),至于Soap toolkit的具體使用請參照soap toolkit的幫助手冊,其他語(yǔ)言的訪(fǎng)問(wèn)請查閱相關(guān)的文檔。
![]() ![]() |
![]()
|
為了讓我們的WEB應用程序支持Web服務(wù)功能,我們需要將AXIS集成到我們的應用程序中。集成AXIS很簡(jiǎn)單,首先需要拷貝AXIS用到的幾個(gè)JAR包文件,這些文件都在[AXIS]\WEB-INF\lib目錄下,將這些文件拷貝到我們自己的應用目錄下的WEB-INF\lib。另外如果你用的不是TOMCAT服務(wù)器那就需要拷貝activation.jar,這個(gè)JAR文件可以在[TOMCAT]\common\lib目錄下找到!
拷貝完JAR文件后就是web.xml的配置了,只需要把AXIS中的web.xml中的配置信息添加到我們自己應用程序中的web.xml中即可。最重要的是下面的內容:
<servlet> |
![]() ![]() |
![]()
|
到此文章告一段落,通過(guò)以上的演練,我相信你已經(jīng)對Web服務(wù)有一個(gè)感性的認識,但是這個(gè)僅僅是開(kāi)始,我們也只是很簡(jiǎn)單的介紹了Web服務(wù)的一些基本概念并演示了一個(gè)無(wú)法再簡(jiǎn)單的例子。Web服務(wù)還有很多其他高級的內容例如復雜類(lèi)型、數據安全等沒(méi)有涉及到,不過(guò)沒(méi)有關(guān)系,萬(wàn)事開(kāi)頭難,希望本文能夠促進(jìn)大家理解和應用下一代的應用模式并給還沒(méi)有動(dòng)手試驗的開(kāi)發(fā)人員開(kāi)一個(gè)好頭。
聯(lián)系客服