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组件的详细介绍,希望对开发者有所帮助。
超级会员免费看
650

被折叠的 条评论
为什么被折叠?



