有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 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 no longer exists can I use getPath() or getDecodedPath()

    使用java.net.URI

    Jetty 9的HttpURI与您在Jetty 8中使用的内容无关

    我们在内部使用java.net.URI来处理许多事情,并且只使用HttpURI来拼凑一个URI,以实现HTTP/2物理连接和逻辑通道请求

    HttpClient no longer has:

    HttpClient大约在6年前被重写,以满足更新的HTTP/1.1 RFC、HTTP/2、FastCGI和代理使用

    从您所问的问题类型来看,您可能希望了解Jetty内置的整个可扩展代理层

    setThreadPool

    使用setExecutor()

    注意:这不是一件明智的事情,尤其是在Jetty 8和Jetty 9之间的连接处理存在巨大差异的情况下

    单个请求可以从[1..n]个线程处理(在其生存期内)

    与执行器(线程池)发生冲突的最常见原因是人为限制资源利用率。干扰执行器是限制资源利用率的错误地方

    setMaxConnectionsPerAddress

    连接现在已合并

    您可以选择连接池实现,还可以在HttpClient上设置一些通用的连接池行为

    参见setMaxConnectionsPerDestination​setMaxRequestsQueuedPerDestination​

    setTimeout

    现在有很多暂停

    • HttpClient。setIdleTimeout
    • HttpClient。设置连接超时
    • 请求。setIdleTimeout
    • 连接空闲超时
    • 连接池空闲超时

    setRequestHeaderSize setResponseHeaderSize

    jetty客户端不存在,这些是服务器端概念

    I can use QueuedThreadPool on HttpConfiguration, and most of the above methods are also on HTTPConfiguration, but is setTimeout(httpClient), now setIdleTimeout(HttpConfiguration)?

    HttpClient和HttpConfiguration是不相关的

    HttpExchange() no longer has a public default constructor and therefore I cant override it with a default constructor. In the new HttpExchange(9.4) it requires the following three arguments in construtctor: What class are they on now? I only have access to the HttpClient _client, ServletConfig and ServletContext

    The following methods no longer exist either:

    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 Is there a replacement for HttpExchange or another class with these methods?

    HttpExchange是一个内部类,不适合您使用/访问/配置或处理

    我怀疑您正在查看一个古老的代码库,它为jetty客户端提供了一个HttpExchange概念

    在Jetty 9中,HttpClient的整个概念已不复存在

    创建一个org.eclipse.jetty.client.api.Request(请参阅各种HttpClient.newRequest()方法),钩住请求上的各种侦听器,然后Request.send()调用它。回应你感兴趣的各种听众事件

    我建议您首先从Response.CompleteListener开始,仔细查看在onComplete(Result)方法中传递给您的Result对象

    IO.copyThread(InputStream, OutputStream) no longer exists

    不再存在,无法替换(这是许多错误/问题的根源)

    org.eclipse.jetty.server.RequestRequest no longer has getConnection();

    危险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行为中