杰瑞科技汇

webservice教程 java

目录

  1. 第一部分:基础概念

    webservice教程 java-图1
    (图片来源网络,侵删)
    • 什么是 WebService?
    • WebService 的核心要素 (SOAP, WSDL, UDDI)
    • 为什么使用 WebService?(优势与应用场景)
    • Java WebService 的演进史:从 JAX-WS 到 JAX-RS
  2. 第二部分:主流技术栈介绍

    • SOAP / JAX-WS:传统、企业级、重量级
      • 什么是 SOAP?
      • 什么是 WSDL?
      • JAX-WS 简介
    • REST / JAX-RS:现代、轻量级、面向 Web
      • 什么是 REST?
      • 什么是 RESTful API?
      • JAX-RS 简介 (Jakarta RESTful Web Services)
    • 如何选择?
  3. 第三部分:实战教程

    • 使用 JAX-WS (SOAP) 开发 WebService
      • 环境准备 (JDK + Maven)
      • 开发一个简单的 WebService (Provider 端)
      • 调用 WebService (Consumer 端)
      • 生成和查看 WSDL
    • 使用 JAX-RS (REST) 开发 WebService
      • 环境准备 (JDK + Maven + Jersey/Jersey RESTful Web Services)
      • 开发一个简单的 RESTful Service (Provider 端)
      • 使用 Postman 或 curl 调用 RESTful API (Consumer 端)
      • 处理 JSON 数据
  4. 第四部分:进阶与扩展

    • 框架集成:Spring Boot 与 WebService
    • 服务治理:WSDL/Swagger 文档
    • 安全性:OAuth2, JWT, API Key
    • 最佳实践

第一部分:基础概念

什么是 WebService?

WebService 是一种跨编程语言、跨操作系统的远程调用技术,它允许不同平台、不同语言的应用程序通过网络进行交互和通信,就像调用本地方法一样简单。

webservice教程 java-图2
(图片来源网络,侵删)

核心思想:将应用程序的功能(服务)通过 Web 协议(主要是 HTTP)暴露出来,供其他程序调用。

WebService 的核心要素

  • SOAP (Simple Object Access Protocol)

    • 一种基于 XML 的协议,用于在 Web 上交换结构化信息。
    • 它是消息传递的协议,规定了消息的格式(信封、头部、体)。
    • 特点是重量级、标准化、安全性高
  • WSDL (Web Services Description Language)

    • 一个基于 XML 的语言,用于描述 WebService 的功能、接口、参数、协议绑定等信息。
    • 可以理解为 WebService 的“说明书”“契约”,客户端通过 WSDL 文件就知道如何调用这个服务。
  • UDDI (Universal Description, Discovery, and Integration)

    webservice教程 java-图3
    (图片来源网络,侵删)
    • 一个基于 XML 的注册中心,用于发布和发现 WebService。
    • 企业可以将自己的 WebService 发布到 UDDI 注册中心,其他企业则可以从中查找并使用这些服务。
    • UDDI 的使用已大幅减少,更多是直接通过 WSDL 地址或 API 网关进行服务发现。

为什么使用 WebService?

  • 跨平台和跨语言:任何支持 HTTP 协议的语言都可以调用。
  • 松耦合:服务提供方和消费方之间不需要知道对方的实现细节,只需遵循 WSDL/REST API 契约。
  • 可复用性:一个核心业务逻辑可以作为 WebService 被多个系统复用。
  • 标准化:遵循行业标准,便于集成和维护。

Java WebService 的演进史

  • JAX-WS (Java API for XML Web Services):Java 官方推出的用于创建 SOAP WebService 的标准 API,它简化了 SOAP 服务的开发,是 Java EE 的一部分。
  • JAX-RS (Java API for RESTful Web Services):Java 官方推出的用于创建 RESTful WebService 的标准 API,随着移动互联网和前后端分离的兴起,RESTful API 成为绝对的主流。
  • 重要更新:从 Java EE 8 开始,JAX-RS 和 JAX-WS 的包名从 javax.* 迁移到了 jakarta.*,如果你使用的是较新的 Jakarta EE (如 Jakarta EE 9+) 或 Spring Boot 3.x,请使用 jakarta 包。

第二部分:主流技术栈介绍

SOAP / JAX-WS

  • 特点

    • 协议:基于 XML 的 SOAP 协议。
    • 格式:消息是 XML 文本,格式严格、冗长。
    • 标准:有严格的 WS-* 标准(如 WS-Security, WS-Addressing),适合企业级应用。
    • 工具:通常需要工具(如 wsimport)根据 WSDL 生成客户端存根代码。
  • 适用场景

    • 企业应用集成,特别是对安全性、事务性要求高的场景。
    • 需要严格契约和标准化的金融、电信等行业。
    • 老旧系统的维护和集成。

REST / JAX-RS

  • 特点

    • 架构风格:不是一种协议,而是一种架构风格(Roy Fielding 提出)。
    • 协议:基于简单的 HTTP 协议。
    • 格式:数据格式灵活,最常用的是 JSON,也支持 XML、Text 等。
    • 无状态:服务器不保存客户端状态,每次请求都包含所有必要信息。
    • 资源导向:通过 URL 来定位资源(如 /users/123)。
  • JAX-RS 实现框架

    • Jersey:参考实现,功能强大,社区活跃。
    • RESTEasy:JBoss 社区出品。
    • Apache CXF:功能全面,也支持 SOAP。
  • 适用场景

    • 现代 Web 应用的前后端分离
    • 移动 App 的后端 API
    • 微服务架构中服务间的通信。
    • 几乎所有需要通过网络暴露 API 的新项目

如何选择?

特性 SOAP / JAX-WS REST / JAX-RS
风格/协议 协议 架构风格
数据格式 严格、冗长的 XML 灵活,主要为 JSON
标准 WS-* 标准,严格 无统一标准,依赖 HTTP
性能 较低(XML 解析开销大) (JSON 解析快,HTTP 简单)
学习曲线 较陡峭 相对平缓
适用场景 企业应用集成,EAI Web/Mobile API,微服务
工具支持 强(WSDL 自动生成代码) 较弱(依赖手动或 Swagger 生成)

对于新项目,尤其是面向公众或移动端的 API,RESTful (JAX-RS) 是首选。 只有在对标准化、安全性和事务性有苛刻要求的企业内部集成时,才考虑 SOAP。


第三部分:实战教程

我们将分别用最主流的 JAX-WS (通过 Maven 插件) 和 JAX-RS (通过 Jersey) 来创建一个简单的服务。

环境准备

  • JDK 8 或更高版本
  • Maven 3.6 或更高版本
  • IDE:IntelliJ IDEA 或 Eclipse
  • API 测试工具:Postman (推荐) 或 curl

使用 JAX-WS (SOAP) 开发 WebService

我们将使用 Maven 的 jaxws-maven-plugin 来简化开发。

创建 Maven 项目 (Provider 端)

创建一个普通的 Maven Java 项目。

pom.xml 配置

<project ...>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>jaxws-server</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <jaxws.version>2.3.1</jaxws.version>
    </properties>
    <dependencies>
        <!-- JAX-WS API -->
        <dependency>
            <groupId>
分享:
扫描分享到社交APP
上一篇
下一篇