将 Jetty 8 升级到 Jetty 9

Upgrading Jetty 8 to Jetty 9

我正在从 jetty 8 升级到 jetty 9,并且在某些 API 中遇到了编译失败的一些问题。

SslSelectChannelConnector 已被删除,据我所知,httpConfiguration with secureRequestCustomizer 取代了它。

但是有很多方法我都找不到。例如

setRequestBufferSize

setResponseBufferSize

设置接受器

设置最大空闲时间

SessionHandler 不再有 getSessionManager() 方法。

此外,queueThreadPool 不再有 setMaxQueued(int ),JettyServer 也不再有这两个方法: setThreadPool(队列线程池) setGracefulShutdown(int)

编辑:SslSelectChannelConnector 已弃用。将 SelectChannelConnector 与 SslContextFactory 结合使用。

jettyServer.setThreadPool(threadPool);  // --> threadPool is set in the constructor new Server(QueueThreadPool)
jettyServer.setGracefulShutdown(5000);  // --> jettyServer.setStopTimeout(5000);
jettyServer.setConnectors(new Connector[] { connector });  // -->  ServerConnector which takes https_config
jettyServer.setSendServerVersion(false); // -->  https_config.setSendServerVersion(false);

哪里或哪个API被用来代替上面的?

还有一些自定义内容在运行时停止工作,这对 find/see 来说并不明显。

提醒:Jetty 版本控制(自 1995 年起)是 <servlet_support>.<major_version>.<minor_version>

您正在进行从 8.1 到 9.4 的主要版本升级(这是 6 个主要版本!)。因此,您会看到巨大的变化。

The SslSelectChannelConnector has been removed and from what I can see httpConfiguration with secureRequestCustomizer replaces this.

欢迎来到协议的新世界。

不再有任何协议特定连接器的概念。

ServerConnector 是连接器,它没有协议知识,也不需要它。它只是一个到服务器的连接点(甚至不是 TCP/IP 特定的,它可以是 Unix 套接字)。

它的配置决定了连接类型、绑定位置以及客户端连接到该端口后如何协商协议。

ConnectionFactory 确定。

HttpConfiguration 决定了 HTTP 级别行为的运作方式。

请参阅:https://whosebug.com/a/30191878/775715 了解说明。

参见:embedded-jetty examples of this is use. Start with LikeJettyXml.java

有关更多示例,请参阅:embedded-jetty-cookbook

But there are many methods that I cant find on both. For example

setRequestBufferSize

这不再存在,它与 SPDY 和 HTTP/2

不兼容

请参阅 HttpConfiguration.setRequestHeaderSize(int) 以控制最大请求 header 大小。

注意:如果您正在使用 HTTP/2,我们建议您不要将请求 header 大小调整为大于默认大小(出于协议兼容性原因)。

setResponseBufferSize

这不再存在,它与 SPDY 和 HTTP/2 不兼容。

请参阅 HttpConfiguration.setResponseHeaderSize(int) 以控制最大响应 header 大小。

注意:如果您使用 HTTP/2,我们建议您不要将响应 header 大小调整为大于默认大小(出于协议兼容性原因)。

有关输出缓冲区聚合控件,请参阅 HttpConfiguration.setOutputBufferSize(int)。 (在 HTTP/2 中意义不大,实际上只与 HTTP/1.x 相关)

setAcceptors

查看 ServerConnector 的各种构造函数,没有这些构造函数。

setMaxIdleTime

许多空闲超时设置可供您使用(例如:连接器、连接、端点、线程、线程池、AsyncContext、读取、写入、websocket session、等等...)

根据您的问题,这里有一些似乎相关的示例。

ServerConnector.setIdleTimeout(long)

HttpConfiguration.setIdleTimeout(long)

QueuedThreadPool.setIdleTimeout(int)

SessionHandler no longer has a getSessionManager() method.

在过去的 6 个主要版本更新中,Session 处理方式发生了比连接器更大的变化。

参见:OneServletContextWithSession.java

Also the queueThreadPool no longer has a setMaxQueued(int ), and JettyServer no longer has these two methods: setThreadPool(QueueThreadPool) setGracefulShutdown(int)

QueuedThreadPool 中 min/max 的配置是构造函数的一部分。 min/max.

没有设置器

要配置 Server 线程池,请使用允许您传入线程池的构造函数。

注意:如果您使用 HTTP/2,而 html/css/javascript 我们建议您计划增加线程池需求(由于协议的性质)