Web Service(Web 服務)本質上是「基於 Web 的服務」。它利用 HTTP 協議,接收並響應內部系統的請求,從而實現遠程調用。簡單說:將應用程序轉化為網絡應用,發布功能供全球或特定系統調用。
| 模式 | 特點 | 適用場景 |
|---|---|---|
| RPC (遠程過程調用) | 客戶端感覺像調用本地對象,屏蔽網絡細節 | 強一致性、同步調用、傳統企業應用集成 |
| 消息傳遞 | 異步、解耦、支持發布/訂閱 | 高併發、異步處理、微服務事件驅動 |
text/xml (SOAP 1.1) 或 application/soap+xml (SOAP 1.2),數據格式強制 XML+SOAP;application/x-www-form-urlencoded,返回 HTML;JDK 1.6+ 內置 JAX-WS,無需額外框架即可快速發布:
@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());
}
}
@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 位於 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 在金融、電信、政府等強契約、高安全、需事務支持的領域仍佔據核心地位。