将Jetty 8升级到Jetty 9

时间:2018-02-12 14:03:05

标签: java eclipse jetty embedded-jetty

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

SslSelectChannelConnector已被删除,我可以看到httpConfiguration with secureRequestCustomizer取代了它。

但是我找不到两种方法。例如

setRequestBufferSize

setResponseBufferSize

setAcceptors

setMaxIdleTime

SessionHandler不再具有getSessionManager()方法。

queueThreadPool也不再具有setMaxQueued(int),JettyServer不再具有以下两种方法: setThreadPool(QueueThreadPool) 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代替上述内容?

还有任何自定义内容在运行时停止工作,查找/查看并不明显。

1 个答案:

答案 0 :(得分:3)

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

您正在进行从8.1到9.4的主要版本升级(这是6个主要版本!)。由于这个原因,你看到了大量的变化。

  

SslSelectChannelConnector已被删除,我可以看到httpConfiguration with secureRequestCustomizer取代了它。

欢迎来到协议的新世界。

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

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

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

ConnectionFactory决定了。

HttpConfiguration确定HTTP级别行为的运行方式。

有关说明,请参阅:https://stackoverflow.com/a/30191878/775715

请参阅:embedded-jetty examples这是有用的。从LikeJettyXml.java开始。

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

  

但是我找不到两种方法。例如

     

setRequestBufferSize

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

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

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

  

setResponseBufferSize

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

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

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

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

  

setAcceptors

请参阅ServerConnector的各种构造函数,这些构造函数没有。

  

setMaxIdleTime

您可以使用许多空闲超时设置(例如:连接器,连接,端点,线程,线程池,AsyncContext,读取,写入,websocket会话等等)。

以下是根据您的问题看似相关的一些示例。

请参阅ServerConnector.setIdleTimeout(long)

请参阅HttpConfiguration.setIdleTimeout(long)

请参阅QueuedThreadPool.setIdleTimeout(int)

  

SessionHandler不再具有getSessionManager()方法。

会话处理在过去的6个主要版本更新中经历了更大的变化,然后是连接器。

请参阅:OneServletContextWithSession.java

  

此外,queueThreadPool不再具有setMaxQueued(int),JettyServer不再具有以下两种方法:setThreadPool(QueueThreadPool)setGracefulShutdown(int)

QueuedThreadPool中min / max的配置是构造函数的一部分。没有最小/最大的设定者

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

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