1

Open Liberty 是否支持 HTTP/2,还是需要在 server.xml 上进行设置?我环顾四周,但找不到与此相关的任何内容

我现在有一个推送 servlet -

public class PushServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        PushBuilder pushBuilder = req.newPushBuilder();
         pushBuilder.path("push.css").push();


        try (PrintWriter respWriter = resp.getWriter();) {
            respWriter.write("<html>" +
                    "<img src='images/kodedu-logo.png'>" +
                    "</html>");
        }

    }
}

并且在 newPushBuilder 上收到 NullPointerException

我运行了主要/次要版本,它确认我正在运行符合我的 pom 的 Servlet 4.0 -

<dependencies>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>8.0</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

我的 server.xml 配置为 -

<!-- To access this server from a remote client add a host attribute to 
    the following element, e.g. host="*" -->
<httpEndpoint httpPort="9080" httpsPort="9443" id="defaultHttpEndpoint" >
   <httpOptions http2="enabled" />
</httpEndpoint>

我也在运行Java9

4

1 回答 1

2

你得到一个NullPointerException因为你正在处理的请求不支持 PushPushBuilder您应该在使用对象之前检查 null 。

对 HTTP/2 的开放自由支持仍在开发中。在最新的开发版本中,newPushBuilder()如果PushBuilder您:

  1. 实现 Servlet 4.0,
  2. 启用该servlet-4.0功能,并且
  3. h2c使用不安全的 HTTP/2 ( ) 或通过 ALPN ( h2)的安全 HTTP/2驱动请求

*浏览器不支持不安全的 h2c,Java 8 不支持 ALPN。因此,要在 open-liberty 上使用 ALPN,当前最好的方法是使用 Oracle 或 openjdk 的 JDK 以及启动类路径技巧来启用 ALPN。Oracle 和 Jetty 提供 bootclasspath jars - grizzly-npn-bootstrapalpn-boot - 在配置时允许 open-liberty 使用 ALPN 协商安全 HTTP/2。

于 2018-01-30T16:02:21.667 回答