杰瑞科技汇

Java WebService教程从哪开始学?

Java WebService 完整教程

目录

  1. 第一部分:基础概念

    Java WebService教程从哪开始学?-图1
    (图片来源网络,侵删)
    • 什么是 WebService?
    • 为什么使用 WebService?
    • WebService 的核心标准 (SOAP, WSDL, REST)
    • Java 实现WebService 的两种主流技术:JAX-WS 和 JAX-RS
  2. 第二部分:使用 JAX-WS 创建和调用 SOAP WebService

    • 什么是 JAX-WS 和 SOAP?
    • 环境准备
    • 实战 1:创建一个简单的 JAX-WS WebService (Provider端)
    • 实战 2:调用 JAX-WS WebService (Consumer端)
    • WSDL 文件详解
  3. 第三部分:使用 JAX-RS (RESTful) 创建和调用 WebService

    • 什么是 REST 和 JAX-RS?
    • 主流 JAX-RS 实现框架:Jersey, RESTEasy
    • 实战 3:创建一个 RESTful WebService (Provider端)
    • 实战 4:调用 RESTful WebService (Consumer端)
    • 常用 HTTP 方法 和状态码
  4. 第四部分:进阶主题与最佳实践

    • WebService 测试工具 (Postman, SoapUI)
    • 数据格式 (XML vs. JSON)
    • 异常处理
    • 安全性考虑

第一部分:基础概念

什么是 WebService?

WebService 是一种跨编程语言、跨操作系统的远程调用技术,它允许不同平台上的应用程序通过标准的 HTTP 协议进行通信和数据交换,你可以把它想象成一个“网络上的函数”,一个应用程序可以调用另一个应用程序提供的服务。

Java WebService教程从哪开始学?-图2
(图片来源网络,侵删)

为什么使用 WebService?

  • 系统集成:将不同技术栈(如 Java, .NET, Python)构建的应用系统连接起来。
  • 跨平台通信:由于基于 XML 和 HTTP,WebService 具有良好的通用性。
  • 可重用性:将通用的业务逻辑封装成 WebService,供多个客户端复用。
  • 松耦合:服务提供方和消费方只需要约定好接口(WSDL 或 API 文档),而不需要关心对方的具体实现技术。

WebService 的核心标准

  • SOAP (Simple Object Access Protocol)

    • 一种基于 XML 的协议,用于在 Web 上交换结构化信息。
    • 它非常重量级,有严格的规范(信封、头体、错误处理等)。
    • 消息格式是 XML,通常通过 HTTP 或 SMTP 传输。
    • 优点:安全、可靠、标准化程度高。
    • 缺点:数据冗余大,解析复杂,性能相对较低。
  • WSDL (Web Services Description Language)

    • 一个基于 XML 的语言,用于描述 WebService 的接口。
    • 它就像WebService的“说明书”,定义了服务的地址、可用的方法、方法的参数、参数类型以及返回值类型等。
    • 客户端可以通过 WSDL 文件自动生成调用服务的代码(客户端存根)。
  • REST (Representational State Transfer)

    • 不是一个标准,而是一种软件架构风格
    • 它更轻量级,通常使用 HTTP 协议本身的方法(GET, POST, PUT, DELETE)来对资源进行操作。
    • 数据格式通常为 JSON 或 XML,JSON 更为流行。
    • 优点:简单、高效、易于理解和扩展,非常适合移动端和 Web 前后端分离。
    • 缺点:无状态,缺少像 SOAP 那样的标准安全机制(但可以通过 HTTPS 等手段弥补)。

Java 实现WebService 的两种主流技术

  • JAX-WS (Java API for XML Web Services)

    Java WebService教程从哪开始学?-图3
    (图片来源网络,侵删)
    • Java 官方定义的一套用于创建 SOAP WebService 的 API。
    • 它是 Java EE 的一部分,现在也包含在 Java SE 中。
    • 主要用于构建传统的、企业级的、需要强契约和可靠性的 SOAP 服务。
  • JAX-RS (Java API for RESTful Web Services)

    • Java 官方定义的一套用于创建 RESTful WebService 的 API。
    • 它只提供一套规范,具体的实现由第三方提供,如 Jersey (Oracle 官方参考实现), RESTEasy (JBoss), Apache CXF
    • 目前是构建现代 WebService(尤其是微服务、API)的主流选择。

第二部分:使用 JAX-WS 创建和调用 SOAP WebService

什么是 JAX-WS 和 SOAP?

JAX-WS 是用于开发 SOAP 服务的 Java 标准,开发者只需要用 Java 注解来标注一个类是一个服务端点,JAX-WS 运行时就会自动帮你处理底层的 SOAP 消息生成、解析和 HTTP 传输。

环境准备

你需要安装 JDK 8 或更高版本,JDK 自带了 wsimport 命令,用于根据 WSDL 文件生成客户端代码。

实战 1:创建一个简单的 JAX-WS WebService (Provider端)

我们将创建一个提供用户信息查询的 WebService。

步骤 1:创建 Maven 项目

pom.xml 中添加依赖(虽然 JAX-WS 是 JDK 自带的,但使用 javax.xml.ws 注解需要这个 API):

<dependencies>
    <dependency>
        <groupId>javax.xml.ws</groupId>
        <artifactId>jaxws-api</artifactId>
        <version>2.3.1</version>
    </dependency>
</dependencies>

步骤 2:创建服务端点接口

这是一个普通的 Java 接口,用 @WebService 注解标记。

// src/main/java/com/example/service/UserService.java
package com.example.service;
import javax.jws.WebService;
import javax.jws.WebMethod;
// @WebService 声明这是一个 WebService 接口
@WebService
public interface UserService {
    // @WebMethod 声明这是一个对外暴露的方法
    @WebMethod
    public String getUserInfo(String userId);
}

步骤 3:创建服务端点实现类

实现上面的接口,并处理具体的业务逻辑。

// src/main/java/com/example/service/UserServiceImpl.java
package com.example.service;
import javax.jws.WebService;
// @WebService(endpointInterface = "com.example.service.UserService") 
// 指定这个实现类是哪个接口的实现。
// 如果不写,JAX-WS 会默认将类名去掉 "Impl" 后的接口作为服务端点接口。
@WebService(endpointInterface = "com.example.service.UserService")
public class UserServiceImpl implements UserService {
    @Override
    public String getUserInfo(String userId) {
        System.out.println("Server received request for user: " + userId);
        if ("001".equals(userId)) {
            return "ID: 001, Name: Zhang San, Email: zhangsan@example.com";
        } else {
            return "User not found";
        }
    }
}

步骤 4:发布 WebService

创建一个主类来启动一个内嵌的 HTTP 服务器并发布我们的服务。

// src/main/java/com/example/publisher/UserServicePublisher.java
package com.example.publisher;
import com.example.service.UserServiceImpl;
import javax.xml.ws.Endpoint;
public class UserServicePublisher {
    public static void main(String[] args) {
        // 定义服务的访问地址
        String address = "http://localhost:8080/ws/user";
        // 创建服务实现对象
        UserServiceImpl userServiceImpl = new UserServiceImpl();
        // 发布服务
        Endpoint.publish(address, userServiceImpl);
        System.out.println("WebService is published at: " + address);
    }
}

步骤 5:运行和测试

  1. 运行 UserServicePublishermain 方法。
  2. 打开浏览器,访问 http://localhost:8080/ws/user?wsdl
  3. 如果看到一个 XML 文件(WSDL),说明服务发布成功!

实战 2:调用 JAX-WS WebService (Consumer端)

现在我们创建一个客户端来调用刚刚发布的服务。

步骤 1:使用 wsimport 生成客户端代码

打开命令行(CMD 或 PowerShell),进入你的项目目录(src/main/java 的上一级),执行以下命令:

wsimport -p com.example.client -keep http://localhost:8080/ws/user?wsdl
  • -p com.example.client: 指定生成的客户端代码所在的包名。
  • -keep: 保留生成的源文件,方便查看。
  • ...wsdl: WSDL 文件的地址。

执行后,会在 com/example/client 目录下生成一堆

分享:
扫描分享到社交APP
上一篇
下一篇