15、Jakarta EE规范与Helidon WebServer组件详解

Jakarta EE规范与Helidon WebServer组件详解

1. Jakarta EE规范概述

Jakarta EE包含众多规范,涵盖从基础服务到高级应用开发的各个方面。以下为部分重要规范及其对应兼容实现的介绍:
| 规范名称 | 版本 | 描述 | 兼容实现 |
| — | — | — | — |
| Jakarta Interceptors | 2.2(Jakarta EE 11) | 定义在业务方法调用和特定事件(如生命周期事件和超时事件)上进行插入操作的方法 | Weld 6.0.0.Beta1 |
| Jakarta JSON Binding | 3.0(Jakarta EE 10) | 定义将Java对象与JSON文档相互转换的绑定框架 | Eclipse Yasson 3.0.0 - RC1 |
| Jakarta JSON Processing | 2.1(Jakarta EE 10) | 定义基于Java的框架,用于解析、生成、转换和查询JSON文档 | Eclipse Parsson 1.1.2 |
| Jakarta Mail | 2.1(Jakarta EE 10) | 定义独立于平台和协议的框架,用于构建邮件和消息传递应用程序 | Eclipse Angus Mail 2.0.2 |
| Jakarta Managed Beans | 2.0(Jakarta EE 9) | 为容器管理的对象(POJOs)定义一组基本服务 | Eclipse GlassFish 6.0.0 |
| Jakarta Management | 1.1(Jakarta EE 8) | 定义用于公开和访问Jakarta EE平台组件的管理信息、操作和参数的标准管理模型 | Eclipse GlassFish 5.1.0 |
| Jakarta Messaging | 3.1(Jakarta EE 10) | 描述Java应用程序通过松散耦合、可靠的异步通信服务创建、发送和接收消息的方法 | Eclipse OpenMQ 6.3.0 - RC1 |
| Jakarta MVC | 3.0(开发中,支持Jakarta EE 11) | 定义遵循基于动作的MVC模式创建Web应用程序的标准 | 暂无Jakarta MVC 3.0的兼容实现;Jakarta MVC 2.1(支持Jakarta EE 10)的兼容实现有Eclipse Krazo for Jersey 3.0.0、Eclipse Krazo for RESTEasy 3.0.1和Eclipse GlassFish 7.0.0 - M9 |
| Jakarta NoSQL | 1.0(开发中,支持Jakarta EE 11) | 定义一组API,为大多数NoSQL数据库提供标准实现,并简化Java应用程序与NoSQL数据库的集成 | Eclipse JNoSQL 1.1.1 |
| Jakarta Pages | 4.0(Jakarta EE 11) | 定义Web应用程序的模板引擎,支持将文本内容(包括HTML和XML)与自定义标签、表达式语言和嵌入式Java代码混合使用 | Apache Tomcat 11.0.0 - M20 |
| Jakarta Persistence | 3.2(Jakarta EE 11) | 定义Java环境中持久化和对象/关系映射的管理标准 | EclipseLink 5.0.0 - B02和Hibernate ORM 7.0.0.Alpha2 |
| Jakarta RESTful Web Services | 4.0(Jakarta EE 11) | 提供遵循REST架构模式开发Web服务的基础API | Eclipse RESTEasy 7.0.0.Alpha1和Eclipse Jersey 4.0.0 - M1 |
| Jakarta RPC | 开发中 | 定义允许开发人员以与REST服务和客户端相同的方式定义gRPC服务和客户端的标准 | 暂无兼容实现 |
| Jakarta Security | 4.0(Jakarta EE 11) | 定义在现代应用程序范式中创建安全的Jakarta EE应用程序的标准 | Eclipse Soteria 4.0.0和Eclipse GlassFish 8.0.0 - M6 |
| Jakarta Servlet | 6.1(Jakarta EE 11) | 定义处理HTTP请求和响应的服务器端API | Tomcat 11.0.0 - M20 |
| Jakarta SOAP with Attachments | 3.0(Jakarta EE 10) | 定义使开发人员能够生成和使用符合SOAP 1.1和SOAP 1.2协议以及SOAP附件功能的消息的API | Eclipse Implementation of Jakarta SOAP with Attachments 3.0.0 - M2 |
| Jakarta Standard Tag Library | 3.0(Jakarta EE 10) | 将许多Web应用程序共有的核心功能封装为简单标签,以便更轻松地使用Jakarta Pages规范进行开发 | EE4J implementation of Jakarta Standard Tag Library 3.0.0 |
| Jakarta Transactions | 2.0(Jakarta EE 9) | 定义允许在应用程序中划分事务并对XA感知的资源管理器进行事务协调的标准 | Eclipse GlassFish 6.0.0 - SNAPSHOT - 2020 - 10 - 04 |
| Jakarta Validation | 3.1(Jakarta EE 11) | 提供对象级约束声明和验证工具,以及约束元数据存储库和查询API,还提供方法和构造函数验证工具 | Hibernate Validator 8.0.1.Final |
| Jakarta Web Services Metadata | 3.0(Jakarta EE 9) | 定义Java Web服务的编程模型、元数据的使用、元数据注释的Web服务源文件的非规范处理模型、容器的运行时要求以及用于WSDL、绑定和配置的注释 | Eclipse Implementation of XML Web Services 3.0.0和Eclipse Metro 3.0.0 |
| Jakarta WebSocket | 2.2(Jakarta EE 11) | 定义WebSocket协议的客户端和服务器端点的API | Eclipse Tyrus 2.2.0 - M1和Apache Tomcat 11.0.0 - M20 |
| Jakarta XML Binding | 4.0(Jakarta EE 10) | 定义自动映射XML文档和Java对象的API和相应工具 | Jakarta XML Binding 4.0.0 - M3 |
| Jakarta XML Registries | 1.0(Jakarta EE 8) | 定义专门用于开放和可互操作的注册表服务集的API,使相关方能够共享信息 | Eclipse GlassFish 5.1.0 |
| Jakarta XML RPC | 1.1(Jakarta EE 8) | 定义使用基于XML的远程过程调用(RPC)标准的一致Java API | Eclipse XML RPC 1.1.5 |
| Jakarta XML Web Services | 4.0(Jakarta EE 10) | 定义基于Jakarta SOAP with Attachments和Jakarta Web Services Metadata规范实现基于XML的Web服务的方法 | Eclipse Implementation of XML Web Services 4.0.0 - M3和Eclipse Metro 4.0.0 - M3 |

2. Helidon Reactive WebServer组件

Helidon的WebServer组件是一个受Node.js和其他Java框架启发的异步和反应式API,它基于Netty异步事件驱动网络应用程序框架运行。以下是该组件的详细介绍:

2.1 WebServer组件基础
  • 接口签名
public interface WebServer

该接口定义了配置、构建、启动和停止Web服务器所需的方法。

  • 创建方法 :WebServer接口定义了四个重载的 create() 方法:
• create(Routing routing):从提供的路由和默认配置创建新实例。
• create(Routing routing, Config config):从提供的路由和配置创建新实例。
• create(Supplier<? extends Routing> routingBuilder):从提供的路由和默认配置创建新实例。
• create(Supplier<Routing> routingBuilder, Config config):从提供的路由和配置创建新实例。
2.2 配置WebServer
  • 直接配置 :可以使用 WebServer.Builder 类的方法直接配置Web服务器,示例代码如下:
WebServer server = WebServer.builder() 
      .bindAddress(InetAddress.getLocalHost()) 
      .port(8080) 
      .build(); 
- `builder()`方法创建`WebServer`接口的流畅API构建器,并返回`WebServer.Builder`的静态实例。
- `bindAddress(InetAddress bindAddress)`方法配置服务器套接字监听的本地地址,若未配置则监听所有本地地址。
- `port(int port)`方法配置服务器套接字监听的端口,若设置为0则使用任何可用的临时端口。
- `build()`方法使用构建器及其参数的配置构建`WebServer`接口的实例。
  • 外部配置 :可以使用配置文件创建Web服务器,Helidon的默认配置文件是 src/main/resources 文件夹中的 application.yaml ,也可以使用其他常用文件名。示例配置文件如下:
server:
  port: 8080
  host: 0.0.0.0

加载配置文件的代码如下:

Config config = Config.create();
Config greeting = config.get("server");
2.3 路由配置
  • 路由接口签名
public interface Routing extends ServerLifecycle

该接口扩展了 ServerLifecycle 接口,定义了基本的服务器生命周期操作,并声明了 beforeStart() afterStart() 方法。

  • 构建路由实例 :可以使用 Routing.Builder 类构建 Routing 接口的实例,示例代码如下:
Routing routing = Routing.builder()
    .get("/hello", (request, response) -> response.send("Hello World!"))
    .build();

Routing.Builder 提供了三个重载的 get() 方法:

• get(Handler... requestHandlers):将所有GET请求路由到提供的处理程序。
• get(PathMatcher pathMatcher, Handler... requestHandlers):通过`PathMatcher`接口将具有相应路径的所有GET请求路由到提供的处理程序。
• get(String pathPattern, Handler... requestHandlers):通过字符串将具有相应路径的所有GET请求路由到提供的处理程序。

Routing.Builder 还提供了处理其他HTTP请求的对应重载方法,如下表所示:
| HTTP请求 | 对应的Routing.Builder方法 |
| — | — |
| GET | .get() |
| PUT | .put() |
| POST | .post() |
| HEAD | .head() |
| 任何请求 | .any() |

以下是WebServer配置和启动的流程图:

graph TD
    A[开始] --> B[创建WebServer.Builder实例]
    B --> C{选择配置方式}
    C -->|直接配置| D[设置绑定地址和端口]
    C -->|外部配置| E[加载配置文件]
    D --> F[构建WebServer实例]
    E --> F
    F --> G[启动WebServer]
    G --> H[监听请求并处理]
    H --> I[停止WebServer]
    I --> J[结束]

以上介绍了Jakarta EE的部分重要规范及其兼容实现,以及Helidon Reactive WebServer组件的详细内容,包括其接口、创建方法、配置方式和路由配置等。这些知识对于开发基于Jakarta EE和Helidon的应用程序具有重要的指导意义。

3. 构建Helidon WebServer应用程序
3.1 依赖配置

在构建Helidon WebServer应用程序时,需要添加相应的依赖。根据使用的构建工具不同,依赖配置如下:
- Maven

<dependency>
    <groupId>io.helidon.webserver</groupId>
    <artifactId>helidon-webserver</artifactId>
    <version>3.2.9</version>
</dependency>
  • Gradle
implementation group: 'io.helidon.webserver', name: 'helidon-webserver', version: '3.2.9'
3.2 启动WebServer示例

以下是一个完整的启动WebServer的示例代码,定义在 Application 类中的 startServer() 方法:

static Single<WebServer> startServer() {
    LogConfig.configureRuntime(); 
    Config config = Config.create(); 
    WebServer server = WebServer.builder(createRouting(config))
            .config(config.get("server"))
            .addMediaSupport(JsonpSupport.create()) 
            .build();
    Single<WebServer> webserver = server.start(); 
    webserver.thenAccept(ws -> { 
        System.out.println("WEB server is up! http://localhost:" + ws.port() + "/greet");
        ws.whenShutdown().thenRun(() -> System.out.println("WEB server is DOWN. Goodbye!"));
        })
    .exceptionallyAccept(t -> { 
            System.err.println("Startup failed: " + t.getMessage());
            t.printStackTrace(System.err);
        });
    return webserver;
    }

代码解释如下:
1. LogConfig.configureRuntime() :如果应用程序通过GraalVM转换为本地映像,此方法会使用运行时配置重新配置日志记录。在应用程序启动时,Helidon会调用相关方法,只要类路径或当前目录中有 logging.properties 文件,就无需显式配置日志记录,也可以使用系统属性(如 java.util.logging.config.class java.util.logging.config.file )进行显式配置。
2. Config.create() :加载默认配置文件 application.yaml
3. addMediaSupport(MediaSupport mediaSupport) :接受 MediaSupport 接口的实现,为应用程序注册读取器和写入器。实现类如下:
- DefaultMediaSupport :向上下文注册默认的读取器和写入器。
- JacksonSupport :提供Jackson集成支持。
- JsonbSupport :提供JSON Binding(JSON - B)集成支持。
- JsonpSupport :提供JSON Processing(JSON - P)集成支持。
- MultiPartSupport :提供多媒体支持。
MediaSupport 的实例可用于 WebServer WebClient 组件。

4. 总结

本文详细介绍了Jakarta EE的众多规范及其对应的兼容实现,涵盖了从基础服务到高级应用开发的各个方面,如拦截器、JSON处理、邮件服务、持久化等。同时,深入探讨了Helidon Reactive WebServer组件,包括其基础接口、创建方法、配置方式(直接配置和外部配置)以及路由配置。

通过实际的代码示例,展示了如何构建一个基于Helidon WebServer的应用程序,包括依赖配置和启动WebServer的具体步骤。以下是整个开发流程的总结表格:
| 步骤 | 描述 | 相关代码或配置 |
| — | — | — |
| 1 | 选择Jakarta EE规范 | 根据应用需求选择合适的规范及其兼容实现 | 参考规范表格 |
| 2 | 配置Helidon WebServer依赖 | 根据构建工具添加 helidon-webserver 依赖 | Maven或Gradle依赖代码 |
| 3 | 配置WebServer | 选择直接配置或外部配置方式 | 直接配置代码、 application.yaml 配置文件 |
| 4 | 配置路由 | 使用 Routing.Builder 构建路由实例 | Routing.builder() 相关代码 |
| 5 | 启动WebServer | 调用 startServer() 方法启动服务器 | startServer() 方法代码 |

希望这些内容能帮助开发者更好地理解和应用Jakarta EE规范以及Helidon WebServer组件,开发出高效、稳定的Java应用程序。

以下是整个应用开发流程的流程图:

graph LR
    A[选择Jakarta EE规范] --> B[配置Helidon WebServer依赖]
    B --> C{选择配置方式}
    C -->|直接配置| D[设置WebServer参数]
    C -->|外部配置| E[加载配置文件]
    D --> F[配置路由]
    E --> F
    F --> G[启动WebServer]
    G --> H[应用运行]

以上就是关于Jakarta EE规范和Helidon Reactive WebServer组件的详细介绍,希望对开发者有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值