[英]jetty upgrade 8 to 9 missing classes
我之前曾问过这个问题-> 将Jetty 8升级到Jetty 9 ,这有助于对某些缺少的软件包/类进行特定的升级。
我有一个稍旧的版本现在正在升级,并且它的软件包和类在Jetty中不再存在,并且我找不到任何文档来查看替换的内容或位置。
以下不再存在:
import org.eclipse.jetty.io.Buffer;
import org.eclipse.jetty.util.thread.Timeout;
import org.eclipse.jetty.server.AbstractHttpConnection;
HttpURI.getCompletePath不再存在,我可以不再使用HttpClient的getPath()或getDecodedPath()吗:
setThreadPool
setMaxConnectionsPerAddress
setTimeout
setRequestHeaderSize
setResponseHeaderSize
我可以在HttpConfiguration上使用QueuedThreadPool,并且上述大多数方法也在HTTPConfiguration上,但是setTimeout(httpClient)是setIdleTimeout(HttpConfiguration)吗?
HttpExchange()不再具有公共的默认构造函数,因此我无法使用默认构造函数覆盖它。 在新的HttpExchange(9.4)中,它在构造函数中需要以下三个参数:
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();
导入org.eclipse.jetty.io.Buffer;
不存在,我们现在使用java.nio.ByteBuffer
。
导入org.eclipse.jetty.util.thread.Timeout;
没有替换,空闲超时将与需要它的各个地方一起在线处理。
导入org.eclipse.jetty.server.AbstractHttpConnection;
无需更换,整个连接器层大约在6年前已被完全重写。
HttpURI.getCompletePath不再存在,我可以使用getPath()或getDecodedPath()
使用java.net.URI
。
Jetty 9的HttpURI
与您在Jetty 8中使用的无关。
我们在内部将java.net.URI
用于许多事情,并且仅出于HTTP / 2物理连接与逻辑通道请求的目的,仅使用HttpURI
将URI拼凑在一起。
HttpClient不再具有:
HttpClient在大约6年前进行了重写,以满足更新的HTTP / 1.1 RFC,HTTP / 2,FastCGI和代理用法。
根据您所询问的问题类型,您可能需要研究Jetty内置的整个可扩展代理层。
setThreadPool
使用setExecutor()
注意:这不是一件明智的事情,特别是在Jetty 8和Jetty 9之间的连接处理方面存在巨大差异的情况下。
可以从[1..n]线程处理单个请求(在其生命周期内)。
与执行器(线程池)发生冲突的最常见原因是人为地限制资源利用。 与执行器混淆是限制资源利用率的错误位置。
setMaxConnectionsPerAddress
连接已合并。
您可以选择连接池实现,还可以在HttpClient
上设置一些通用的连接池行为。
见setMaxConnectionsPerDestination
和setMaxRequestsQueuedPerDestination
setTimeout
现在有很多超时。
setRequestHeaderSize setResponseHeaderSize
Jetty客户端不存在,这些是服务器端的概念。
我可以在HttpConfiguration上使用QueuedThreadPool,并且上述大多数方法也在HTTPConfiguration上,但是setTimeout(httpClient)是setIdleTimeout(HttpConfiguration)吗?
HttpClient和HttpConfiguration无关。
HttpExchange()不再具有公共的默认构造函数,因此我无法使用默认构造函数覆盖它。 在新的HttpExchange(9.4)中,它在构造器中需要以下三个参数:它们现在在什么类上? 我只能访问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是一个内部类,并不意味着您可以使用/访问/配置它或将其弄乱。
我怀疑您正在查看的是古老的代码库,该代码库为码头用户提供了HttpExchange概念。
在Jetty 9中,HttpClient不再存在整个概念。
您创建一个org.eclipse.jetty.client.api.Request
(请参阅各种HttpClient.newRequest()
方法),挂接到请求的各种侦听器中,然后对它进行Request.send()
。 响应您感兴趣的各种侦听器事件。
我建议您首先只从Response.CompleteListener
开始,仔细查看通过onComplete(Result)
方法传递给您的Result
对象。
IO.copyThread(InputStream,OutputStream)不再存在
不再存在,没有替代(这是许多错误/问题的根源)
org.eclipse.jetty.server.RequestRequest不再具有getConnection();
DANGER WILL ROBINSON-表示代码库严重/危险。 这样做的代码库最初不应该存在。
尽管有内部访问连接/端点/通道/ httpinput / httpoutput / interceptor的方法,但要想获得成功的希望,就必须考虑所有这些概念,而不仅仅是连接。
您的问题尖叫“我有一个旧的代理,我正在尝试更新”。 现在,Jetty是100%异步的,从Servlet 2.x开始,较早的InputStream / OutputStream行为已不复存在。 如果您不考虑使用异步I / O开发代理解决方案,那么注定会出现无尽的错误/问题/失败,直到为Servlet 3.1异步I / O功能更新它为止。
帮个忙,阅读整个org.eclipse.jetty.proxy
软件包。
您将扩展AsyncProxyServlet
(用于典型的代理行为)或AsyncMiddleManServlet
(用于具有内容修改行为的代理),并将Servlet端Async I / O实现智能地链接到HttpClient的Async I / O行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.