WebService 簡單介紹以及Eclipse IDE下伺服器端+客戶端的例項
一、Web Service基本概念
Web Service也叫XML Web Service WebService是一種可以接收從Internet或者Intranet上的其它系統中傳遞過來的請求,輕量級的獨立的通訊技術。(ps:Internet 是面向全球的網路,而 Intranet 則是 Internet 技術在企業機構內部的實現。)是:通過SOAP在Web上提供的軟體服務,使用WSDL檔案進行說明,並通過UDDI進行註冊。
一言以蔽之:WebService是一種跨程式語言和跨作業系統平臺的遠端呼叫技術。
下面是一些需要了解的基本術語
XML:(Extensible Markup Language)擴充套件型可標記語言。面向短期的臨時資料處理、面向全球資訊網絡,是Soap的基礎。
Soap:(Simple Object Access Protocol)簡單物件存取協議。是XML Web Service 的通訊協議。當用戶通過UDDI找到你的WSDL描述文件後,他通過可以SOAP呼叫你建立的Web服務中的一個或多個操作。SOAP是XML文件形式的呼叫方法的規範,它可以支援不同的底層介面,像HTTP(S)或者SMTP。
WSDL:(Web Services Description Language) WSDL 檔案是一個 XML 文件,
UDDI (Universal Description, Discovery, and Integration) 是一個主要針對Web服務供應商和使用者的新專案。在使用者能夠呼叫Web服務之前,必須確定這個服務內包含哪些商務方法,找到被呼叫的介面定義,還要在服務端來編制軟體,UDDI是一種根據描述文件來引導系統查詢相應服務的機制。UDDI利用SOAP訊息機制(標準的XML/HTTP)來發布,編輯,瀏覽以及查詢註冊資訊。它採用XML格式來封裝各種不同型別的資料,並且傳送到註冊中心或者由註冊中心來返回需要的資料。
二、呼叫原理
實現一個完整的Web服務包括以下步驟:
◆ Web服務提供者設計實現Web服務,並將除錯正確後的Web服務通過Web服務中介者釋出,並在UDDI註冊中心註冊; (釋出)
◆ Web服務請求者向Web服務中介者請求特定的服務,中介者根據請求查詢UDDI註冊中心,為請求者尋找滿足請求的服務; (發現)
◆ Web服務中介者向Web服務請求者返回滿足條件的Web服務描述資訊,該描述資訊用WSDL寫成,各種支援Web服務的機器都能閱讀;(發現)
◆ 利用從Web服務中介者返回的描述資訊生成相應的SOAP訊息,傳送給Web服務提供者,以實現Web服務的呼叫;(繫結)
◆ Web服務提供者按SOAP訊息執行相應的Web服務,並將服務結果返回給Web服務請求者。(繫結)
客戶端——> 閱讀WSDL文件 (根據文件生成SOAP請求) ——>傳送到Web伺服器——>交給WebService請求處理器 (ISAPI Extension)
——>處理SOAP請求——> 呼叫WebService——>生成SOAP應答 ——> Web伺服器通過http的方式交給客戶端
三、WebService案例
第一步:建立web services 伺服器端
(1) Eclipse 下 新建 java Project 命名為 test_services 建立如下幾個類
新建介面 IHelloWorld 程式碼如下
package com.services;
import javax.jws.WebService;
@WebService
public interface IHelloWorld {
String say(String str);
}
新建 HelloWorldImpl 類 實現 IHelloWorld介面 程式碼如下
package com.services;
import javax.jws.WebService;
@WebService
public class HelloWorldImpl implements IHelloWorld {
public String say(String str){
return str+",世界!";
}
}
新建 ServicesMain 類 用於暴露WSDL
package com.services;
import javax.xml.ws.Endpoint;
public class ServiceMain {
public static void main(String[] args) {
String address="http://127.0.0.1:9999/test_services"; //這裡相當於在本地主機上釋出一個專案的地址
Endpoint.publish(address, new HelloWorldImpl()); //第一個引數是專案的地址,第二個引數是功能類
System.out.println("Web Service已成功暴露..."); //這裡是提示資訊,web services 是否成功暴露
}
}
(2)我們現在執行ServiceMain 讓webservice 暴露出來
可以看到 已打印出 web service 已成功暴露的提示資訊
(3)在瀏覽器中檢視wsdl,檢測 web service是否成功暴露
輸入的地址為 ServiceMain 中的 address 地址加上 “?WSDL”
這裡是我釋出的伺服器地址
在瀏覽器位址列中輸入 http://127.0.0.1:9999/test_services?WSDL
到這裡 說明伺服器端已經發布成功了,啟示這裡的WSDL相當於該專案的使用說明書
第二步:建立 web service 伺服器端測試 伺服器端釋出的類的功能,
() file ->new JavaProject 命名為 test_client ,然後在該專案上點選滑鼠右鍵,
新建Web Service Client 客戶端,注意 在Service definition 中填入的是WSDL的地址,也就是第一步中測試WSDL是否釋出成功的地址
(2)可以看到這裡已經生成了客戶端的程式碼
接下來 我們寫一個測試類 ServiceTest
package com.services;
import java.rmi.RemoteException;
public class ServiceTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
HelloWorldImplProxy hello=new HelloWorldImplProxy();
String str = null;
try {
str = hello.say("你好");
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//伺服器端定義了客戶端呼叫返回的格式
System.out.println(str);
}
}
執行測試類,結果如下
到這裡 一個簡單的web service 專案的伺服器端和客戶頓就已經成功構建了。