[英]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.