Java WebService 完整教程
目录
-
第一部分:基础概念
(图片来源网络,侵删)- 什么是 WebService?
- 为什么需要 WebService?
- WebService 的核心标准(XML, SOAP, WSDL, UDDI)
- WebService 的两种主流风格:SOAP vs. REST
-
第二部分:传统 SOAP WebService 开发 (JAX-WS)
- JAX-WS 简介
- 实践 1:使用 JDK 内置工具开发一个简单的 JAX-WS 服务
- 实践 2:使用主流框架(如 Spring Boot)开发 JAX-WS 服务
- 客户端如何调用 JAX-WS 服务
-
第三部分:现代 RESTful WebService 开发 (JAX-RS / Spring Boot)
- REST 架构风格简介
- JAX-RS 简介 (Java API for RESTful Web Services)
- 实践 3:使用 Spring Boot 开发 RESTful WebService (这是目前最主流的方式)
- 实践 4:使用 JAX-RS (如 Jersey) 开发 RESTful WebService
-
第四部分:进阶与总结
- 如何选择 SOAP 还是 REST?
- WebService 安全性考虑
- 总结与学习路径
第一部分:基础概念
什么是 WebService?
WebService 是一种跨编程语言、跨操作系统的远程调用技术,它允许不同的应用程序通过网络进行交互,就像调用本地方法一样简单,其核心思想是“服务”,即一个应用程序可以提供一个功能(服务),其他应用程序可以通过网络来调用这个功能。

为什么需要 WebService?
- 系统集成:将不同技术栈(如 Java, .NET, PHP)构建的应用系统连接起来。
- 跨平台:通信双方无需关心对方的具体实现语言和操作系统。
- 松耦合:服务提供方和调用方之间通过标准接口(WSDL)进行约定,实现解耦。
WebService 的核心标准
- XML (eXtensible Markup Language):WebService 的数据交换格式,它是一种平台无关的、自描述的标记语言,非常适合异构系统间的数据传输。
- SOAP (Simple Object Access Protocol):一种基于 XML 的协议,用于在 Web 上交换结构化的信息,它定义了消息的格式、处理方式以及如何通过 HTTP/SMTP 等协议进行传输,SOAP 消息通常包含一个信封、一个头部和一个体。
- WSDL (Web Services Description Language):一个 XML 文件,用于描述 WebService 的功能,它就像服务的“说明书”,告诉客户端:
- 服务的地址在哪里(Endpoint/URL)。
- 服务提供了哪些方法(Operations)。
- 每个方法的输入参数是什么(Message)。
- 每个方法的返回值是什么。
- UDDI (Universal Description, Discovery, and Integration):一个目录服务,用于发布和发现 WebService,可以把它想象成“WebService 的黄页”,UDDI 的使用已大大减少,更多是直接通过 WSDL 地址来发现服务。
WebService 的两种主流风格:SOAP vs. REST
| 特性 | SOAP (Simple Object Access Protocol) | REST (Representational State Transfer) |
|---|---|---|
| 协议 | 严格定义的协议,通常基于 XML。 | 不是协议,而是一种架构风格。 |
| 数据格式 | 强制使用 XML。 | 非常灵活,支持 JSON, XML, HTML, Text 等。JSON 是目前最主流的格式。 |
| 标准 | 有官方标准(W3C)。 | 无官方标准,依赖于 HTTP 协议。 |
| 性能 | 消息相对“重”,因为需要完整的 SOAP 信封和 XML 解析,性能较低。 | 消息“轻量”,通常使用 JSON,解析速度快,性能高。 |
| 使用场景 | 企业级应用、金融、电信等对安全性、事务性要求极高的场景。 | 移动 App 后端、公共 API、微服务架构等互联网应用。 |
| 代表技术 | JAX-WS (Java) | JAX-RS (Java), Spring MVC (Spring Boot) |
第二部分:传统 SOAP WebService 开发 (JAX-WS)
JAX-WS 是 Java 官方推出的用于创建 SOAP WebService 的 API。
实践 1:使用 JDK 内置工具开发一个简单的 JAX-WS 服务
这个例子不需要任何第三方库,只需 JDK 6+ 即可。
步骤 1:创建服务端接口和实现
HelloService.java (服务接口)

import javax.jws.WebService;
import javax.jws.WebMethod;
// @WebService 注解将一个普通类标记为 WebService 服务
@WebService
public interface HelloService {
// @WebMethod 注解将一个方法标记为可以被远程调用的方法
@WebMethod
String sayHello(String name);
}
HelloServiceImpl.java (服务实现)
import javax.jws.WebService;
// endpointInterface 指定服务的接口
@WebService(endpointInterface = "com.example.webservice.jaxws.HelloService")
public class HelloServiceImpl implements HelloService {
@Override
public String sayHello(String name) {
return "Hello, " + name + "!";
}
}
步骤 2:发布服务
创建一个 Publisher 类来启动服务。
Publisher.java
import javax.xml.ws.Endpoint;
public class Publisher {
public static void main(String[] args) {
// 定义服务的访问地址
String address = "http://localhost:8888/hello";
// 创建服务实例
HelloService helloService = new HelloServiceImpl();
// 发布服务
Endpoint.publish(address, helloService);
System.out.println("Service is published at: " + address);
}
}
运行 Publisher 类,现在你的 SOAP 服务已经启动了,你可以用浏览器访问 http://localhost:8888/hello?wsdl,会看到生成的 WSDL 文件。
步骤 3:创建客户端
JDK 提供了 wsimport 工具来根据 WSDL 生成客户端代码。
-
打开命令行,进入你的项目目录。
-
运行命令:
wsimport -keep -p com.example.webservice.jaxws.client http://localhost:8888/hello?wsdl
-keep: 生成源代码。-p: 指定生成的包名。- 最后面是 WSDL 的地址。
-
命令执行后,会生成一堆 Java 文件(包括
HelloService接口、HelloServiceImplService类等)。 -
编写客户端代码调用服务:
Client.javaimport com.example.webservice.jaxws.client.HelloService; import com.example.webservice.jaxws.client.HelloServiceImplService; public class Client { public static void main(String[] args) { // 通过服务工厂类获取服务实例 HelloServiceImplService service = new HelloServiceImplService(); // 从服务中获取 Port(即服务的接口) HelloService helloPort = service.getHelloServiceImplPort(); // 调用远程方法 String result = helloPort.sayHello("WebService World"); System.out.println("Client received: " + result); } }运行
Client,输出Client received: Hello, WebService World!。
第三部分:现代 RESTful WebService 开发 (JAX-RS / Spring Boot)
REST 目前是构建 WebService 的绝对主流,尤其是在互联网领域,它的核心是资源,通过 HTTP 动词(GET, POST, PUT, DELETE)来对资源进行操作。
实践 3:使用 Spring Boot 开发 RESTful WebService (最推荐)
Spring Boot 极大地简化了 REST 服务的开发,是目前 Java 后端开发的事实标准。
步骤 1:创建 Spring Boot 项目
使用 Spring Initializr 创建一个新项目,选择以下依赖:
- Spring Web (提供 Web 开发支持,包括 REST)
步骤 2:创建实体类
User.java
public class User {
private long id;
private String name;
private String email;
// Getters and Setters
// ... (省略)
}
步骤 3:创建数据访问层 (模拟数据库)
UserRepository.java
import org.springframework.stereotype.Repository;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@Repository
public class UserRepository {
private final List<User> users = new ArrayList<>();
private long nextId = 1;
public User save(User 