#java #migration #jetty
Вопрос:
Я пытаюсь обновить версию jetty с 8.1.13 до 9.4.43. Поскольку это серьезное обновление, класс HttpExchange был сильно изменен. Многие методы HttpExchange устарели, и мне трудно найти альтернативу этим методам.
HttpExchange exchange = new HttpExchange() {
protected void onRequestCommitted() throws IOException {
}
protected void onRequestComplete() throws IOException {
}
protected void onResponseComplete() throws IOException {
}
protected void onResponseContent(Buffer content) throws IOException {
content.writeTo(out);
}
protected void onResponseHeaderComplete() throws IOException {
}
protected void onResponseStatus(Buffer version, int status, Buffer reason) throws IOException {
}
protected void onResponseHeader(Buffer name, Buffer value) throws IOException {
}
protected void onConnectionFailed(Throwable ex) {
onException(ex);
}
protected void onException(Throwable ex) {
}
protected void onExpire() {
onException(new SocketTimeoutException());
}
};
exchange.setScheme(HttpSchemes.HTTPS.equals(request.getScheme()) ? HttpSchemes.HTTPS_BUFFER
: HttpSchemes.HTTP_BUFFER);
exchange.setMethod(request.getMethod());
exchange.setURL(url.toString());
exchange.setVersion(request.getProtocol());
exchange.setRequestHeader("Host", _hostHeader);
exchange.setRequestHeader("Via", request.getProtocol() " " host " (" getClass().getSimpleName() ")");
if (!xForwardedFor) {
exchange.addRequestHeader("X-Forwarded-For", request.getRemoteAddr());
exchange.addRequestHeader("X-Forwarded-Proto", scheme);
exchange.addRequestHeader("X-Forwarded-Host", host);
exchange.addRequestHeader("X-Forwarded-Server", request.getLocalName());
exchange.addRequestHeader(HttpServer.PROXY_URI_HEADER, from.toString());
}
Каковы альтернативы всем методам «обмена» объектом?
Комментарии:
1. На самом деле, обновление с Jetty 8.1.x до 9.4.x отличается от 5 основных версий. (Напоминание: Версия Jetty с 1995
<servlet_support>.<major_version>.<minor_version>
года ). Этот класс значительно эволюционировал с течением времени и сократился примерно до Jetty 9.1.x. Пожалуйста, отредактируйте свой вопрос и укажите, что вам нужно сделать, и мы сможем ответить более четко. (Также обратите внимание, чтоHttpExchange
в какой-то момент это был как класс сервера, так и класс клиента, и ваш вопрос не указывает, какой из них вы хотите использовать)2. Там также есть намеки на то, что вы управляете прокси-сервером, с которым лучше
ProxyServlet
всего обращатьсяAsyncProxyServlet
, или, если вам нужно возиться с содержимым, тоAsyncMiddleManServlet
. Просто расширьте один из них и внесите необходимые изменения.3. Кроме того,
X-Forwarded-*
заголовки являются устаревшими и нестандартными, пожалуйста, используйте официальныйForwarded
заголовок спецификации, который определен по адресу datatracker.ietf.org/doc/html/rfc7239 (который также поддерживает причал)4. спасибо @JoakimErdfelt