首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Web Service 入門詳解:從核心協議到 JDK 發布與調用實戰

     編輯:Java 相關知識

什麼是 Web Service?

Web Service(Web 服務)本質上是「基於 Web 的服務」。它利用 HTTP 協議,接收並響應內部系統的請求,從而實現遠程調用。簡單說:將應用程序轉化為網絡應用,發布功能供全球或特定系統調用。

核心技術棧:XML + HTTP

  • XML:數據編碼格式,跨平台、跨語言、可擴展;
  • SOAP (Simple Object Access Protocol):基於 XML 的輕量級傳輸協議,定義了信息封裝(Envelope)、編碼規則、RPC 約定;
  • WSDL (Web Services Description Language):基於 XML 的服務描述語言,機器可讀、人可讀,描述接口、參數、返回值;
  • UDDI (Universal Description, Discovery and Integration):服務註冊發現中心,構建電子商務標準。

通信模式:RPC vs 消息傳遞

模式特點適用場景
RPC (遠程過程調用)客戶端感覺像調用本地對象,屏蔽網絡細節強一致性、同步調用、傳統企業應用集成
消息傳遞異步、解耦、支持發布/訂閱高併發、異步處理、微服務事件驅動

Web Service vs 普通 Web 應用 vs Web 服務器

  • Web Service:僅支持 HTTP POST,Content-Type 為 text/xml (SOAP 1.1) 或 application/soap+xml (SOAP 1.2),數據格式強制 XML+SOAP;
  • 普通 Web 應用 (JSP/ASP):支持 GET/POST,Content-Type 通常為 application/x-www-form-urlencoded,返回 HTML;
  • Web 服務器 (Tomcat/Jetty):運行容器,Web Service 部署其上,二者是「運行關係」。

JDK 內置發布 Web Service 實戰

JDK 1.6+ 內置 JAX-WS,無需額外框架即可快速發布:

JDK 1.6.0_13 版本(需完整註解)

@WebService(targetNamespace="https://localhost:9999/helloworld")
@SOAPBinding(style=Style.RPC) // 僅支持 RPC 風格
public class HelloWorld {
    @WebMethod
    public String sayHello() { return "HelloWorld"; }
    
    public static void main(String[] args) {
        Endpoint.publish("https://localhost:9999/helloworld", new HelloWorld());
    }
}

JDK 1.6.0_21+ 版本(簡化註解,內置 JAX-WS 2.1)

@WebService // 僅需此註解,默認 DOCUMENT 風格
public class HelloWorld {
    public String sayHello() { return "Hello World"; }
    
    public static void main(String[] args) {
        Endpoint.publish("https://127.0.0.1:9999/helloworld", new HelloWorld());
    }
}

關鍵點:所有非靜態 public 方法自動暴露;訪問 ?wsdl 可獲取服務描述文檔。

wsimport 生成客戶端代碼

wsimport 位於 JAVA_HOME/bin,根據 WSDL 生成 Java 客戶端代碼,與服務端語言無關。

常用參數

  • -d <目錄>:生成 .class 文件(默認);
  • -s <目錄>:生成 .java 源碼;
  • -p <包名>:指定生成代碼包結構。

實戰步驟

# 1. 切換 JDK 版本(如需)
set path=D:\jdk1.6.0_24\bin;%PATH%

# 2. 進入乾淨目錄
cd /d d:\ws

# 3. 啟動服務端(運行上述 HelloWorld main 方法)

# 4. 生成客戶端代碼
wsimport -s . https://127.0.0.1:9999/helloworld?wsdl
# 或指定包名
wsimport -s . -p com.beijing.itcast https://127.0.0.1:9999/helloworld?wsdl

客戶端調用示例

public class RunMain {
    public static void main(String[] args) {
        // 獲取服務端點 -> 獲取接口代理 -> 調用方法
        HelloWorld helloWorld = new HelloWorldService().getHelloWorldPort();
        String result = helloWorld.sayHello();
        System.err.println(result); // 輸出: Hello World
    }
}

總結

Web Service 以 XML+SOAP 為基石,通過 WSDL 實現契約優先,配合 UDDI 完成服務治理。JDK 內置的 JAX-WS 讓 Java 開發者零依賴快速構建 SOAP 服務,wsimport 則實現了跨語言、跨平台的客戶端自動生成。雖然 RESTful API 如今更主流,但 SOAP/Web Service 在金融、電信、政府等強契約、高安全、需事務支持的領域仍佔據核心地位。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved