1. 程式人生 > >WebService 簡單介紹以及Eclipse IDE下伺服器端+客戶端的例項

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 文件,

用於說明一組 SOAP 訊息以及如何交換這些訊息。大多數情況下由軟體自動生成和使用。

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 專案的伺服器端和客戶頓就已經成功構建了。