我之前问过这个问题 - > 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()或getDecodedPath() HttpClient不再拥有:
setThreadPool
setMaxConnectionsPerAddress
setTimeout
setRequestHeaderSize
setResponseHeaderSize
我可以在HttpConfiguration上使用QueuedThreadPool,上面的大多数方法也在HTTPConfiguration上,但是是setTimeout(httpClient),现在是setIdleTimeout(HttpConfiguration)?
HttpExchange()不再具有公共默认构造函数,因此我无法使用默认构造函数覆盖它。 在新的HttpExchange(9.4)中,它需要在construtctor中使用以下三个参数:
HttpDestination destination, HttpRequest request, List<Response.ResponseListener> listeners
他们现在在上课?我只有 访问HttpClient _client,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或其他类?
IO.copyThread(InputStream,OutputStream)不再存在
org.eclipse.jetty.server.RequestRequest不再具有getConnection();
答案 0 :(得分:1)
import org.eclipse.jetty.io.Buffer;
不存在,我们现在使用java.nio.ByteBuffer
。
import org.eclipse.jetty.util.thread.Timeout;
无替换,空闲超时与需要它的各个地方一起处理。
import org.eclipse.jetty.server.AbstractHttpConnection;
没有替代品,整个连接器层大约在6年前被完全重写。
HttpURI.getCompletePath不再存在我可以使用getPath()或getDecodedPath()
使用java.net.URI
。
Jetty 9的HttpURI
与您在Jetty 8中使用的内容没有任何关系。
我们在内部使用java.net.URI
进行许多操作,并且仅使用HttpURI
拼凑URI以用于HTTP / 2物理连接与逻辑信道请求。
HttpClient不再拥有:
大约6年前重写了HttpClient,以满足更新的HTTP / 1.1 RFC,HTTP / 2,FastCGI和代理使用。
根据您提出的问题类型,您可能希望查看Jetty内置的整个可扩展代理层
setThreadPool
使用setExecutor()
注意:这不是一件好事,尤其是Jetty 8和Jetty 9之间的连接处理存在巨大差异。
可以从[1..n]线程处理单个请求(在其生命周期内)。
弄乱执行程序(线程池)的最常见原因是人为限制资源利用率。与执行者混淆是限制资源利用的错误地方。
setMaxConnectionsPerAddress
现在汇集了连接。
您可以选择连接池实现,还可以在HttpClient
上设置一些通用连接池行为。
请参阅setMaxConnectionsPerDestination
和setMaxRequestsQueuedPerDestination
setTimeout
现在有很多超时。
setRequestHeaderSize setResponseHeaderSize
对于jetty-client不存在,这些是服务器端概念。
我可以在HttpConfiguration上使用QueuedThreadPool,上面的大多数方法也在HTTPConfiguration上,但是是setTimeout(httpClient),现在是setIdleTimeout(HttpConfiguration)?
HttpClient和HttpConfiguration无关。
HttpExchange()不再具有公共默认构造函数,因此我无法使用默认构造函数覆盖它。在新的HttpExchange(9.4)中,它需要在construtctor中使用以下三个参数: 他们现在上课了什么?我只能访问HttpClient _client, 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或其他类?
HttpExchange是一个内部类,并不适合您使用/访问/配置或通常搞乱。
我怀疑你正在寻找一个古老的代码库,它为jetty-client提供了一个HttpExchange概念。
在Jetty 9中,HttpClient不再存在整个概念。
您创建org.eclipse.jetty.client.api.Request
(请参阅各种HttpClient.newRequest()
方法),在请求中挂钩各种侦听器,然后Request.send()
。回应您感兴趣的各种听众事件。
我建议您先从Response.CompleteListener
开始,仔细查看Result
方法中传递给您的onComplete(Result)
对象。
IO.copyThread(InputStream,OutputStream)不再存在
不再存在,没有替代品(这是许多错误/问题的根源)
org.eclipse.jetty.server.RequestRequest不再具有getConnection();
危险将ROBINSON - 这表示严重不良/危险的代码库。 执行此操作的代码库应该永远不会存在。
虽然有内部方法可以访问连接/端点/频道/ httpinput / httpoutput /拦截器,但所有这些概念都必须考虑到成功的希望,而不仅仅是连接。
你的问题是尖叫的&#34;我有一个旧代理我试图更新&#34;。 Jetty现在是100%Async,来自Servlet 2.x天的旧的InputStream / OutputStream行为早已不复存在。如果您没有开发具有异步I / O的代理解决方案,那么在更新Servlet 3.1异步I / O功能之前,您注定会遇到无穷无尽的错误/问题/失败。
帮自己一个忙,并阅读整个org.eclipse.jetty.proxy
包。
您最终会扩展AsyncProxyServlet
(对于典型的代理行为)或AsyncMiddleManServlet
(对于具有内容修改行为的代理),并将servlet端异步I / O实现连接到智能的HttpClient的异步I / O行为。