java jetty将8到9个缺少的类升级
我之前问过这个问题->Upgrading Jetty 8 to Jetty 9这有助于对某些缺失的包/类进行特定的升级
我现在升级了一个稍旧的版本,它的包和类已经不在Jetty中了,我找不到任何文档来查看它们被替换了什么或在哪里/如果被替换
以下内容已不复存在:
import org.eclipse.jetty.io.Buffer;
import org.eclipse.jetty.util.thread.Timeout;
import org.eclipse.jetty.server.AbstractHttpConnection;
HttpURI。getCompletePath已不存在我可以使用getPath()或GetDecodePath()吗 HttpClient不再具有:
setThreadPool
setMaxConnectionsPerAddress
setTimeout
setRequestHeaderSize
setResponseHeaderSize
我可以在HttpConfiguration上使用QueuedThreadPool,上面的大多数方法也在HttpConfiguration上,但是setTimeout(httpClient)现在是setIdleTimeout(HttpConfiguration)吗
HttpExchange()不再有公共默认构造函数,因此我不能用默认构造函数重写它。 在新的HttpExchange(9.4)中,Constructor需要以下三个参数:
HttpDestination destination, HttpRequest request, List<Response.ResponseListener> listeners
他们现在上什么课?我只有 访问HttpClient _客户端、ServletConfig和ServletContext
以下方法也不再存在:
onResponseContent
onResponseHeaderComplete
onResponseStatus
onResponseHeader
onConnectionFailed
setRequestHeader
exchange.setScheme(HttpScheme.HTTPS.equals(request.getScheme())?HttpScheme.HTTPS_BUFFER:HttpScheme.HTTP_BUFFER);
exchange.setMethod(request.getMethod());
exchange.setURL(url.toString());
exchange.setVersion(request.getProtocol());
addRequestHeader
有没有用这些方法替代HttpExchange或其他类
伊奥。copyThread(InputStream、OutputStream)不再存在
组织。日食码头。服务器RequestRequest不再具有getConnection()
# 1 楼答案
不存在,我们现在使用
java.nio.ByteBuffer
无需更换,空闲超时会根据不同的需要进行处理
无需更换,整个连接器层在大约6年前已完全重写
使用
java.net.URI
Jetty 9的
HttpURI
与您在Jetty 8中使用的内容无关我们在内部使用
java.net.URI
来处理许多事情,并且只使用HttpURI
来拼凑一个URI,以实现HTTP/2物理连接和逻辑通道请求HttpClient大约在6年前被重写,以满足更新的HTTP/1.1 RFC、HTTP/2、FastCGI和代理使用
从您所问的问题类型来看,您可能希望了解Jetty内置的整个可扩展代理层
使用
setExecutor()
注意:这不是一件明智的事情,尤其是在Jetty 8和Jetty 9之间的连接处理存在巨大差异的情况下
单个请求可以从[1..n]个线程处理(在其生存期内)
与执行器(线程池)发生冲突的最常见原因是人为限制资源利用率。干扰执行器是限制资源利用率的错误地方
连接现在已合并
您可以选择连接池实现,还可以在
HttpClient
上设置一些通用的连接池行为参见
setMaxConnectionsPerDestination
和setMaxRequestsQueuedPerDestination
现在有很多暂停
jetty客户端不存在,这些是服务器端概念
HttpClient和HttpConfiguration是不相关的
HttpExchange是一个内部类,不适合您使用/访问/配置或处理
我怀疑您正在查看一个古老的代码库,它为jetty客户端提供了一个HttpExchange概念
在Jetty 9中,HttpClient的整个概念已不复存在
创建一个
org.eclipse.jetty.client.api.Request
(请参阅各种HttpClient.newRequest()
方法),钩住请求上的各种侦听器,然后Request.send()
调用它。回应你感兴趣的各种听众事件我建议您首先从
Response.CompleteListener
开始,仔细查看在onComplete(Result)
方法中传递给您的Result
对象不再存在,无法替换(这是许多错误/问题的根源)
危险WILL ROBINSON-这表示一个非常糟糕/危险的代码库。 这样做的代码库本来就不应该存在
虽然可以通过内部方式访问连接/端点/通道/httpinput/httpoutput/拦截器,但要想获得成功,必须考虑所有这些概念,而不仅仅是连接
你的问题是尖叫“我有一个旧的代理,我正试图更新”。 Jetty现在是100%异步的,这是Servlet 2中较旧的InputStream/OutputStream行为。x天已经过去很久了。如果你不开发一个考虑异步I/O的代理解决方案,在你为Servlet 3.1异步I/O特性更新它之前,你注定会遇到无数的错误/问题/失败
帮你自己一个忙,把整个
org.eclipse.jetty.proxy
包读一遍最终,您将扩展
AsyncProxyServlet
(对于典型的代理行为)或AsyncMiddleManServlet
(对于具有内容修改行为的代理),servlet端异步I/O实现将智能地连接到HttpClient的异步I/O行为中