杰瑞科技汇

Java WebService教程,从入门到实践?

Java WebService 完整教程

目录

  1. 第一部分:基础概念

    Java WebService教程,从入门到实践?-图1
    (图片来源网络,侵删)
    • 什么是 WebService?
    • 为什么使用 WebService?
    • WebService 的核心标准
    • Java 实现WebService的两种主流方式
  2. 第二部分:使用 JAX-WS 开发 WebService (SOAP)

    • JAX-WS 简介
    • 示例1:无注解的 POJO 方式 (适合理解底层)
    • 示例2:使用注解的快速开发方式
    • 如何发布和调用 WebService
  3. 第三部分:使用 JAX-RS 开发 WebService (RESTful)

    • REST 与 RESTful 简介
    • JAX-RS 简介 (Jakarta RESTful Web Services)
    • 示例:使用 Jersey 实现一个简单的 RESTful 服务
    • 如何发布和调用 RESTful 服务
  4. 第四部分:高级主题与工具

    • WebService 框架对比
    • 测试工具介绍 (Postman, SoapUI)
    • WSDL 和 Schema (XSD) 简介
  5. 第五部分:总结与学习路径

    Java WebService教程,从入门到实践?-图2
    (图片来源网络,侵删)

第一部分:基础概念

什么是 WebService?

WebService 是一种跨编程语言、跨操作系统的远程调用技术,它允许不同的应用程序通过网络进行交互,就像调用本地方法一样简单,其核心思想是“服务”,即一个应用程序向其他应用程序提供特定的功能。

为什么使用 WebService?

  • 跨平台/跨语言:WebService 基于 XML、HTTP 等标准,任何语言(Java, Python, C# 等)和平台(Windows, Linux, macOS)都可以开发和调用。
  • 松耦合:客户端和服务端不需要了解彼此的内部实现细节,只需通过约定的接口(WSDL 或 API 文档)进行通信。
  • 基于标准:遵循 W3C 等国际标准,具有良好的互操作性和可扩展性。
  • 穿越防火墙:通常使用 HTTP/HTTPS 协议通信,可以轻松穿过大多数防火墙。

WebService 的核心标准

  • SOAP (Simple Object Access Protocol):一种基于 XML 的协议,用于在 Web 上交换结构化信息,它定义了一套严格的信封格式、编码规则和 RPC (Remote Procedure Call) 规范,消息格式较重,但功能强大、安全可靠。
  • WSDL (Web Services Description Language):一个 XML 文件,用于描述 WebService 的接口,它告诉客户端:服务在哪里(URL)、叫什么名字、提供了哪些方法、每个方法的参数和返回值是什么类型等,客户端通过 WSDL 文件来生成调用代码。
  • UDDI (Universal Description, Discovery, and Integration):一个基于 XML 的注册中心,用于发布和发现 WebService,可以把它理解为“WebService 的黄页”,目前使用较少。

Java 实现WebService的两种主流方式

Java EE (Jakarta EE) 提供了两种主要的 API 来创建 WebService:

  • JAX-WS (Java API for XML Web Services):用于开发 SOAP 风格的 WebService,这是 Java 中最传统、最成熟的 WebService 标准。
  • JAX-RS (Java API for RESTful Web Services):用于开发 RESTful 风格的 WebService,随着移动互联网的兴起,RESTful API 已成为当前的主流。

第二部分:使用 JAX-WS 开发 WebService (SOAP)

JAX-WS 是 Java 官方推荐的 SOAP WebService 开发标准,它简化了 SOAP 消息的创建和解析。

JAX-WS 简介

JAX-WS 允许你通过简单的 Java 注解将一个普通的 Java 类(POJO)变成一个 WebService 端点,客户端也可以通过 WSDL 文件生成客户端存根代码,像调用本地方法一样调用远程服务。

Java WebService教程,从入门到实践?-图3
(图片来源网络,侵删)

示例2:使用注解的快速开发方式 (推荐)

这是目前最主流、最简单的方式。

步骤 1:创建一个动态 Web 项目

在 Eclipse 或 IntelliJ IDEA 中创建一个名为 JaxWsDemo 的 Dynamic Web 项目。

步骤 2:编写服务端代码

创建一个普通的 Java 类,并使用 JAX-WS 的注解来标记它。

src/com/example/HelloServiceImpl.java

package com.example;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
// @WebService 注解将这个类标记为一个 WebService
@WebService
// @SOAPBinding 定义了 SOAP 的风格,默认是 DOCUMENT
@SOAPBinding(style = SOAPBinding.Style.DOCUMENT)
public class HelloServiceImpl {
    // @WebMethod 注解将一个公共方法暴露为 WebService 的操作
    // 默认所有 public 方法都会被暴露,显式声明可以更好地控制
    @WebMethod
    public String sayHello(@WebParam(name = "name") String name) {
        System.out.println("WebService sayHello 方法被调用,参数: " + name);
        return "你好, " + name + " ! 欢迎使用 JAX-WS WebService.";
    }
    @WebMethod
    public int add(@WebParam(name = "a") int a, @WebParam(name = "b") int b) {
        return a + b;
    }
}
步骤 3:发布 WebService

我们需要一个“发布器”将这个服务类发布到网络上的某个地址,最简单的发布器是 Endpoint

创建一个发布类:

src/com/example/Publisher.java

package com.example;
import javax.xml.ws.Endpoint;
public class Publisher {
    public static void main(String[] args) {
        // 1. 定义服务的访问地址
        String address = "http://localhost:8888/ws/hello";
        // 2. 创建服务实例
        HelloServiceImpl helloService = new HelloServiceImpl();
        // 3. 发布服务
        System.out.println("WebService 正在启动...");
        System.out.println("服务访问地址: " + address);
        Endpoint.publish(address, helloService);
        System.out.println("WebService 启动成功!");
    }
}

运行 Publishermain 方法。

你的 WebService 已经发布成功了!你可以通过浏览器访问 http://localhost:8888/ws/hello?wsdl 来查看服务的 WSDL 文件,如果看到一个 XML 文件,说明发布成功。

步骤 4:生成并调用客户端

在实际开发中,客户端和服务端通常是分离的,客户端如何调用这个服务?

方法 A:使用命令行工具 wsimport (推荐)

  1. 打开命令行,进入你的项目根目录(或者任意一个你喜欢的地方)。

  2. 执行以下命令,根据 WSDL 文件生成客户端代码:

    wsimport -keep -p com.example.client http://localhost:8888/ws/hello?wsdl
    • -keep: 生成源代码。
    • -p com.example.client: 指定生成的代码包名。
    • 后面是 WSDL 文件的 URL。
  3. 执行后,会在 com.example.client 包下生成一堆 Java 文件(包括 HelloServiceImplHelloServiceImplServiceHelloServiceImplType 等)。

  4. 编写客户端代码来调用服务

    创建一个新的 Java 类 Client.java

    package com.example.client;
    public class Client {
        public static void main(String[] args) {
            // 1. 创建服务视图 (Service)
            // HelloServiceImplService 是 wsimport 生成的类
            HelloServiceImplService service = new HelloServiceImplService();
            // 2. 获取服务端点 (Port)
            // Hello 是 wsimport 生成的接口,代表服务的远程接口
            Hello helloPort = service.getHelloServiceImplPort();
            // 3. 像调用本地方法一样调用远程方法
            String result = helloPort.sayHello("张三");
            System.out.println("调用WebService返回的结果: " + result);
            int sum = helloPort.add(10, 20);
            System.out.println("调用WebService返回的结果: " + sum);
        }
    }

    运行 Clientmain 方法,你将看到服务端的打印信息和客户端的调用结果。


第三部分:使用 JAX-RS 开发 WebService (RESTful)

REST (Representational State Transfer) 是一种软件架构风格,而不是一个标准,RESTful WebService 是基于 REST 风格设计的 WebService,它更轻量、更简单,通常使用 JSON 或 XML 作为数据交换格式,非常适合移动端和前后端分离的 Web 应用。

REST 与 RESTful 简介

  • 资源:REST 的核心是“资源”,一切皆资源,例如
分享:
扫描分享到社交APP
上一篇
下一篇