使用HttpServletRequest.newPushBuilder()实现SSE(服务器发送事件)总是返回null

问题描述 投票:0回答:1

我是 SSE - 服务器发送事件实现的新手。 我正在尝试使用 java jakarta.HttpServletRequest 实现 SSE。

import java.io.IOException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.PushBuilder;


@WebServlet("/check-push")
public class PushServlet extends HttpServlet {
    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        final String titleText;
        PushBuilder builder = req.newPushBuilder();
        System.out.println(builder);
    }

}

req.newPushBuilder()
始终返回null。

我尝试将HTTP的配置更改为2 使用自签名证书和 server.xml 中所需的配置

但是不起作用。

如果我有什么需要实施的地方,请指导我。 预先感谢您的帮助。

使用 tomcat 10.1 实现此功能需要采取哪些必要步骤 我真的需要 tls 证书来实现 SSE 还是我也可以在 Http 1 中实现它。

tomcat servlets server-sent-events
1个回答
0
投票
PushBuilder builder = req.newPushBuilder();

这与 SSE 完全无关

这是用于 HTTP/2 服务器推送 (RFC 7540),它与服务器发送事件 (HTML Living Standard) 完全不同。

基本上,HTTP/2 推送允许您通过请求标头向客户端发送页面资源(基本上是 CSS/JS/图像文件的 URL),以便客户端可以选择预取它们,而无需按顺序解析整个 HTML 页面找到他们。

为了在 servlet 容器上使用 SSE,请改用 JAX-RS API。它不是由 Servlet API 提供。由于 Tomcat 不是一个Jakarta EE 兼容服务器,而是一个准系统 JSP/Servlet/EL/WebSocket 容器,因此您有 2 个选择:

  1. 手动安装 JAX-RS。
  2. 或者,切换到 Jakarta EE 兼容服务器,例如 TomEEWildFlyGlassFish

如果您希望手动安装 JAX-RS,您首先需要选择 JAX-RS 实现并阅读其文档。以下是可用的 JAX-RS 实现,请选择其中之一。

安装 JAX-RS 切换到普通 Jakarta EE 服务器(无需手动安装 JAX-RS)后,您可以按照第 9 章开始实现 SSE。 JAX-RS 文档

© www.soinside.com 2019 - 2024. All rights reserved.