1. 程式人生 > >Web Service 介紹及實現方式

Web Service 介紹及實現方式

        隨著企業之間聯絡的不斷緊密,企業之間的系統服務也不斷接受新的挑戰。例如一個金融公司與一家大資料公司展開了合作,金融公司需要呼叫大資料公司的資料來完成自身業務的開展。那麼服務之間的呼叫是怎麼實現呢?Http可以實現,但我覺得web service 是討論這類問題時不能避開的一個答案。

        Web Service我的理解是更接近一種規範了,實現了這套規範的系統,可以互相之間互動資料已完成業務上的呼叫。它的特點有跨語言、跨平臺,能夠實現不同語言之間的互聯互通。歸結一句話:Web Service就是一種跨程式語言和跨作業系統平臺的遠端呼叫技術。

        Web Service遵從的協議叫做SOAP協議,全稱叫做 Simple Object Access Protocol,簡單物件訪問協議。Web Service服務傳輸的資料格式是XML形式組織的,通過HTTP協議傳送和接收結果。因此我們可以簡便的理解為:SOAP協議=HTTP協議+XML資料格式。

       還有一個重要概念要提,就是WSDL( Web Services Description Language ),釋出好一個web service 服務後怎麼檢查服務是否正常,答案就是檢視WSDL檔案。檢視方式通常是在瀏覽器中開啟服務的釋出地址,然後後面加上 .wsdl即可。

        下面我們釋出個簡單的服務。

        服務端程式碼如下:

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;

@WebService
public class HelloService {
    private String sayHello(String name) {
        System.out.println("hello " + name);
        return "Hello " + name;
    }

    @WebMethod
    public String sayHi(String name) {
        return this.sayHello(name);
    }

    public static void main(String[] args) {
        Endpoint.publish("http://localhost:8081/sayhi", new HelloService());
    }
}

        程式碼和明晰,HelloService 是一個Web Service服務類,它對外提供了一個呼叫方法:sayHi。main函式中,我們用Endpoint來發布這個服務,釋出方法的引數是地址、服務例項。

        話不多述,啟動main函式。在瀏覽器中輸入地址:http://localhost:8081/sayhi?wsdl,我們看瀏覽器返回結果:

        說明我們的服務釋出成功,可以供外部呼叫了。

下來我們看外部系統如何呼叫這個服務。

在建立一個客戶端工程。然後開啟cmd命令列工具,使用jdk自帶的客戶端程式碼生成工具wsimport,生成客戶端程式碼。生成方式如下:

我當前目錄在e盤,-s表示生成原始碼即java檔案,-p用來指定包結構。執行命令即可生成程式碼了。

執行後我的E盤下生成情況如圖:

我們把java檔案拷貝到客戶端工程中去。

編寫呼叫類ServiceClient:

public class ServiceClient {
    public static void main(String[] args) {
        HelloServiceService service = new HelloServiceService();

        HelloService service2 = service.getHelloServicePort();

        String result = service2.sayHi("Wrold");
        System.out.println(result);

    }
}

執行檢視結果:

需要特別注意的是wsimport那個定義包結構的引數,一定要輸入正