WebService又是一種進階應用程式,與之前學習的Struts、Spring、Hibernate等架構不同。WebService是面向服務的架構(SOA),看起來像是比SSH架構要大。那麼它到底是做什麼用的?什麼才是面向服務的架構?
讓我們來看一種需求,集團公司可能具有多種WEB應用。比如,前年開發了個進銷存系統、去年開發了一個ERP、今年又開發了一個OA。現在這家集團公司需要將這三個系統整合,難道需要重新編碼將它們整合嗎?而這三個系統又是用不同語言編寫的,這種成本對公司來說無疑是一種浪費。WebService可以很好的解決這種需求。
WebService是可以進行跨語言、跨平台、分布式系統間整合的方案,WebService像是一條線將這些系統穿起來——企業服務匯流排(ESB)。WebService使用簡易物件存取通訊協定 (SOAP)(SOAP)使用http協議傳輸xml資料(xml是最常用的,也有其他格式資料。)來完成系帶間的整合。
什麼是整合?當然是功能和資料的整合,也就是一個系統可以調用另一個系統的WebService介面來完成資料的互動。這樣我們就需要知道,提供WebService服務功能的應用公開了哪些介面,我們可以通過WebService描述文檔(WSDL)得知。WSDL不需要我們手動編寫,Java的WebService實現可以為我們自動產生。JDK1.6新增支援WebService,但還不夠成熟。所以我們使用Apache第三方開源組織提供的WebService實現——Axis。
Axis的目前的版本是Java版本,它的C++版本正在開發中。Axis是一個功能強大的soap引擎,關於它們的詳細資料在此就不做介紹了。下面,讓我們來編寫一個例子程式,以瞭解WebService的應用流程。
一、編寫支援WebService的WEB應用
1.建立工程
Project Name:TestWebService
Target runtime:Apache Tomcat V6.0
其他的預設
2.添加Axis的Jar包
在axis的jar包目錄lib子目錄中的所有jar檔案添加到工程中。
3.配置web.xml
在axis的webapps子目錄中有一個axisWeb應用,我們直接使用它的web.xml檔案內容。
4.添加功能類
1 package com.enfang;
2
3
4 public class TestLiu {
5
6 public String getInfo(String aa){
7 return "webservice:"+aa;
8 }
9 }
10
5.部署WebService
我們可以將需要公開的類檔案複製到WEB應用目錄下,並修改檔案尾碼名為jws。把類檔案更名並放到WEB目錄下?這樣做並不好,它被暴露了。
所以在這裡我們使用一個常量的部署方法,在工程中(根目錄)添加一個deploy.wsdd檔案:
XML代碼
1 <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java=
2
3 "http://xml.apache.org/axis/wsdd/providers/java">
4 <service name="TestLiu" provider="java:RPC">
5 <parameter name="className" value="com.enfang.TestLiu"/>
6 <parameter name="allowedMethods" value="*"/>
7 <parameter name="scope" value="session"/><!-- request, session, or application -->
8 </service>
9 </deployment>
10
首先將工程部署到Tomcat伺服器上,並啟動Tomcat伺服器。然後在工程上右鍵-->Run As...-->Run Configurations...,建立一個JavaApplication。在main頁面中,project指定為我們的TestWebService,MainClass指定為org.apache.axis.client.AdminClient。在Arguments頁面下設定Program arguments為-l http://localhost:8080/TestWebService/servlet/AxisServlet deploy.wsdd。點擊Run按鈕。
完成上面的操作後,AdminClient會為我們部署在Tomcat的TestWebService的WEB-INF目錄下產生一個server-config.wsdd檔案,它是提供給Axis使用的設定檔。
6.產生用戶端
在根目錄下建一個bat檔案例如:WSDL2Java.bat,代碼如下:
Ruby代碼
set Axis_Lib=.\WebRoot\WEB-INF\lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Output_Path=.\src
set Package=client.webservice
set wsdl_path=http://localhost:8080/TestWebService/services/TestLiu?wsdl
%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% %wsdl_path%
pause
然後執行這個檔案產生用戶端,用戶端目錄在src/client/webservice.
7、調用webservice用戶端
java代碼
1 package cn.anycall.test;
2 import java.rmi.RemoteException;
3
4 import javax.xml.rpc.ServiceException;
5
6 import client.webservice.*;
7 public class Test {
8
9 /**
10 * @param args
11 * @throws ServiceException
12 * @throws RemoteException
13 */
14 public static void main(String[] args) throws ServiceException, RemoteException {
15 // TODO Auto-generated method stub
16 TestLiuService service = new TestLiuServiceLocator();
17 TestLiu_PortType client = service.getTestLiu();
18 String aa = client.getInfo();
19 System.out.println(aa);
20 }
21
22 }
23
24