[評論]
作者:劉國棟 (dev2dev ID: yahoo163)
引言
Web服務作爲下一代網絡服務的一個標準已經得到了大家的認同,很多主要的廠商都在自己的技術平臺上實現了對Web服務的支持。作爲一種基於Web的分佈式應用,Web服務可以被多種客戶端程序使用,如果你把自己開發的一個應用實現爲Web服務,那麼,無論將來使用你這個應用的客戶端是Java、VB、C++還是C#都不必再寫專門的接口就可以調用這個服務。爲了實現Web服務可以被任何客戶端調用,它使用了以下的技術:
- 服務發佈/發現:UDDI
- 服務描述:WSDL
- XML消息:SOAP
- 傳輸協議:HTTP、SMTP、FTP、HTTPs、TCP/IP
從上面列出的一系列概念和技術我們不難看出,要實現併發佈一個Web服務需要的東西還真不少。我以前寫過一個服務的實現使用的是Apache SOAP,經過應用實現,服務描述到最後部署最終完成了一個打印HelloWold消息的服務,但是非常的複雜繁瑣。不過,現在如果使用Weblogic WorkShop8.1開發Web服務,你會發現開發一個Web服務將是非常簡單的,甚至給你的感覺就像再搭積木那麼容易。好了,廢話少說,現在就讓我們一起來使用優秀的Weblogic WorkShop8.1結合Weblogic Server8.1來開發我們的第一個Web服務吧。
文中的例子
在開始這篇文章之前我先大概介紹一下,我們將要實現的服務是作什麼的。我們的第一個服務非常簡單,只是在Weblogic WorkShop8.1環境下寫一個在控制檯上打印“HelloWorld”字符串的服務,緊接着我會進一步的講解如何編寫一個運行於Weblogic WorkShop之外的客戶端來調用這個服務。
準備工作
爲了運行我們將要講的例子,我們需要從Bea站點上下載最新版本的WebLogic Platform8.1。Bea的dev2dev中文站點提供了下載的鏈接,你可以從這裏下載它的中文版http://dev2dev.bea.com.cn/。之後的安裝步驟非常簡單,因爲是中文版你只要按照它的提示(一般選擇默認的設置)一步一步安裝就完成了。
另外,爲了能夠更好的運行和調試文中的例子,建議你的計算機配置最好在CPU:P4,內存512M以上,我的開發平臺是Windows2000。當然這不是必須的。
編寫HelloWorld服務
幾乎大多數入門性介紹文章都喜歡使用HelloWorld來開頭,我也用它來開頭給大家介紹一下如何使用Weblogic WorkShop8.1快速開發Web服務。
在安裝完WebLogic Platform8.1之後,在程序菜單裏可以看到Weblogic WorkShop的鏈接,單擊打開它。我們會看到下面的界面。界面是完全中文版的而且它的幫助也漢化了,而且寫的非常好。
現在新建一個工程,選擇建立“空應用程序”,取名爲myWeb,保存在E: myWeb文件夾下面:
在這個應用程序下面我們可以建立Web服務了,在應用程序目錄上點擊“新建->項目”新建一個WebServices項目取名爲myWebServices,如圖:
在這個新建的WebServices項目上點擊右鍵“新建->WebServices”新建一個Web服務取名爲HelloWorld,它是一個以.jws爲後綴的文件。一會我們將在這個服務上添加我們自己的方法和功能。創建完之後你會看到下面的畫面,它代表我們有了一個Web服務名叫”HelloWorld”
雖然有了一個服務但是它現在什麼都不作,就讓我們來給它添加一個方法實現在Weblogic控制檯打印”HelloWorld”字符串。在HelloWorld服務的面板上單擊右鍵,選擇添加方法:
我們添加的方法名爲“SayHello”,添加完之後點擊“源代碼視窗”我們可以看到下面幾行代碼:
public class HelloWorld implements com.bea.jws.WebService
{
static final long serialVersionUID = 1L;
/**
* @common:operation
*/
public void SayHello()
{
System.out.println("HelloWorld");
}
}
代碼說明:WebLogicWorkShop的.jws文件和一般的java文件格式相同使用標準的java類的寫法,所有java語言的規範也同樣適用預.jws,在這裏Weblogic WorkShop 對Java的javadoc進行了擴展。注意註釋標記中的@common:operation它將告訴Weblogic WorkShop這是一個方法操作,這個SayHello方法被作爲服務向客戶端暴露的一個方法。如果去掉這個標記,那麼這個方法被當作是Java的一個內部方法不會向客戶端暴露。
其中System.out.println("HelloWorld");一行是我們自己增加的向控制檯打印的功能。
當然作爲Web服務的一部分,我們還可以爲這個服務生成一個描述文件。完成這一步只要在HelloWorld.jws文件上點擊“生成WSDL文件”就可以了,工具會自動爲我們生成描述這個服務的WSDL文件:
運行並測試服務
現在一個最簡單的WebServices就完成了,要測試這個服務是否能夠正常運行非常簡單,Weblogic WorkShop提供了強大的調試功能,我們要測試這個服務只需要單擊工具欄裏的 按鈕就可以了,這時候如果你的WeblogicServer沒有啓動,它會提示是否啓動服務器,選擇“是:啓動應用服務器(這以過程可能會比較慢,具體情況要看你的計算機配置高低),你將看到下面的畫面。
Weblogic WorkShop在啓動應用服務器的同時還會編譯並打包這個服務,自動生成一個測試這個服務的客戶端,並自動打開瀏覽器顯示一個測試網頁:
現在點擊那個“SayHello“按鈕。看看WeblogicServer控制檯發生了什麼?沒錯在我們的控制檯上顯示了”helloWorld“字符串。
好了,一個最簡單的Web服務完成了。是不是非常容易,雖然容易但這並不表示功能會有什麼欠缺,我們現在生成的Web服務可以被任何WeblogicWorkShop意外的程序訪問。下面我就來講一講如何發佈服務以及如何編寫一個Java客戶端訪問這個服務。
服務的發佈
在Weblogic WorkShop中大包併發佈一個服務非常簡單。在菜單中點擊“生成->生成EAR文件“。把這個服務大包爲一個.ear文件。
打包後的文件可以在E:myWeb目錄下找到,默認使用工程名myWeb.ear。
現在就可以發佈你的Web服務了,WeblogicPaltform8.1中發佈web服務非常簡單,你只要把剛纔那個myWeb.ear複製到你的WeblogicServer的應用程序目錄下,我的是在D:eauser_projectsapplicationsmydomainDefaultWebApp目錄下。下面我將講述如何編寫一個客戶端訪問這個服務。
編寫客戶端
如果讀者中以前有寫過web服務調用的人的話,你一定還記得哪種可怕的精力,因爲你必須關心具體服務的位置,WSDL描述信息等。而在WeblogicWorkShop中這一切講非常簡單。還記得我們在測試helloworld服務是WeblogicWorkShop打開的那個測試頁面嗎?在這個頁面上點擊那個“概述“的鏈接,在頁面上有一個”java 代理“和”代理支持Jar“。把他們下載下來:
這兩個類爲我們提供了,訪問服務的代理類。現在要把他們複製到D:eauser_projectsapplicationsmydomainDefaultWebAppWEB-INFlib下面,這樣一會兒我寫的JSP客戶端就可以訪問這兩個包中的類了。就像在上面那個頁面中看到的描述一樣,“您可以使用其中包含的類訪問此 web service,就好像它是本地 Java 類一樣“。現在就讓我們來寫一個JSP客戶端來訪問這個服務。我給出這個JSP的源代碼如下:
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import ="weblogic.jws.proxies.*"%>//導入代理類
<%
HelloWorld_Impl helloimp;//服務類的代理實現
HelloWorldSoap hellosoap;
try {
helloimp=new HelloWorld_Impl();
hellosoap=helloimp.getHelloWorldSoap();//獲得這個服務的對象
hellosoap.SayHello();//調用方法,打印“HelloWorld“
}
catch (Exception ex) {
ex.printStackTrace();
}
%>
這個客戶端什麼也不作,只是簡單的調用HelloWorld服務中的SayHello方法,使其在服務器控制檯上答應“HelloWorld “字符串。你可以看到,雖然這個服務在遠程的服務器上但是我在這裏調用它和調用一個普通的Java類沒什麼分別。
結論
我向大家展示瞭如何在WeblogicWorkShop8.1中開發、部署、調試一個服務,並最終使用JSP作爲客戶端調用這個服務。你可以看到這一過程非常簡單,你無需編寫繁瑣的WSDL文件,也不必親自編寫客戶端調用的代理類,大部分事情WeblogicWorkShop都爲你完成了。這確實爲我們的開發工作節省了大量的時間。我們可以把更多的精力放到實際的業務流程描述上。好了,希望這篇文章能夠作爲一個入門,把你帶入到Web 服務的世界,使你能夠利用WeblogicWorkShop帶來的便捷性開發下一代的Web服務技術。
作者:劉國棟
個人介紹:
2000年大學畢業之後一直從事軟件開發。先後參與開發了多個項目,使用技術包括EJB,Selvlet,JSP,Struts,JDO,Web Services等。