From 869b82b8d0fd7c37f14e9dd20b2df84142b8fdfe Mon Sep 17 00:00:00 2001 From: Looly Date: Thu, 17 Apr 2025 17:09:44 +0800 Subject: [PATCH] update Jetty to 12 and add JettyRequest and JettyResponse --- hutool-http/pom.xml | 13 +--- .../http/server/engine/jetty/JettyEngine.java | 5 +- .../{Jetty9Handler.java => JettyHandler.java} | 21 +++---- .../server/engine/jetty/JettyRequest.java | 61 ++++++++++++++++++ .../server/engine/jetty/JettyResponse.java | 62 +++++++++++++++++++ .../server/engine/jetty/package-info.java | 2 +- 6 files changed, 136 insertions(+), 28 deletions(-) rename hutool-http/src/main/java/cn/hutool/v7/http/server/engine/jetty/{Jetty9Handler.java => JettyHandler.java} (58%) create mode 100644 hutool-http/src/main/java/cn/hutool/v7/http/server/engine/jetty/JettyRequest.java create mode 100644 hutool-http/src/main/java/cn/hutool/v7/http/server/engine/jetty/JettyResponse.java diff --git a/hutool-http/pom.xml b/hutool-http/pom.xml index 412f473cb..1d47fecfe 100755 --- a/hutool-http/pom.xml +++ b/hutool-http/pom.xml @@ -37,10 +37,8 @@ 5.4.1 4.5.14 4.12.0 - - 2.2.36.Final - - 9.4.56.v20240826 + 2.3.18.Final + 12.0.19 9.0.97 1.4.3 @@ -85,13 +83,6 @@ 5.0.0 true - - javax.servlet - javax.servlet-api - 4.0.1 - provided - true - diff --git a/hutool-http/src/main/java/cn/hutool/v7/http/server/engine/jetty/JettyEngine.java b/hutool-http/src/main/java/cn/hutool/v7/http/server/engine/jetty/JettyEngine.java index ad9037eb7..597a6a387 100644 --- a/hutool-http/src/main/java/cn/hutool/v7/http/server/engine/jetty/JettyEngine.java +++ b/hutool-http/src/main/java/cn/hutool/v7/http/server/engine/jetty/JettyEngine.java @@ -36,9 +36,6 @@ import javax.net.ssl.SSLContext; public class JettyEngine extends AbstractServerEngine { private Server server; - /** - * 由于Jetty9和以上版本中接口实现不同,此处根据不同版本做兼容自定义 - */ private Handler jettyHandler; /** @@ -112,7 +109,7 @@ public class JettyEngine extends AbstractServerEngine { final Server server = new Server(threadPool); server.addConnector(createConnector(server)); server.setHandler(ObjUtil.defaultIfNull(this.jettyHandler, - () -> new Jetty9Handler(this.handler))); + () -> new JettyHandler(this.handler))); this.server = server; } diff --git a/hutool-http/src/main/java/cn/hutool/v7/http/server/engine/jetty/Jetty9Handler.java b/hutool-http/src/main/java/cn/hutool/v7/http/server/engine/jetty/JettyHandler.java similarity index 58% rename from hutool-http/src/main/java/cn/hutool/v7/http/server/engine/jetty/Jetty9Handler.java rename to hutool-http/src/main/java/cn/hutool/v7/http/server/engine/jetty/JettyHandler.java index 0ddec3c01..89e42e464 100644 --- a/hutool-http/src/main/java/cn/hutool/v7/http/server/engine/jetty/Jetty9Handler.java +++ b/hutool-http/src/main/java/cn/hutool/v7/http/server/engine/jetty/JettyHandler.java @@ -17,20 +17,17 @@ package cn.hutool.v7.http.server.engine.jetty; import cn.hutool.v7.http.server.handler.HttpHandler; -import cn.hutool.v7.http.server.servlet.JavaxServletRequest; -import cn.hutool.v7.http.server.servlet.JavaxServletResponse; +import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.Request; -import org.eclipse.jetty.server.handler.AbstractHandler; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import org.eclipse.jetty.server.Response; +import org.eclipse.jetty.util.Callback; /** - * Jetty9版本使用的Handler + * Jetty版本使用的Handler * * @author Looly */ -public class Jetty9Handler extends AbstractHandler { +public class JettyHandler extends Handler.Abstract { private final HttpHandler handler; @@ -39,13 +36,13 @@ public class Jetty9Handler extends AbstractHandler { * * @param handler 处理器 */ - public Jetty9Handler(final HttpHandler handler) { + public JettyHandler(final HttpHandler handler) { this.handler = handler; } @Override - public void handle(final String target, final Request baseRequest, - final HttpServletRequest request, final HttpServletResponse response) { - handler.handle(new JavaxServletRequest(request), new JavaxServletResponse(response)); + public boolean handle(Request request, Response response, Callback callback) { + handler.handle(new JettyRequest(request), new JettyResponse(response)); + return true; } } diff --git a/hutool-http/src/main/java/cn/hutool/v7/http/server/engine/jetty/JettyRequest.java b/hutool-http/src/main/java/cn/hutool/v7/http/server/engine/jetty/JettyRequest.java new file mode 100644 index 000000000..5e0dea5dd --- /dev/null +++ b/hutool-http/src/main/java/cn/hutool/v7/http/server/engine/jetty/JettyRequest.java @@ -0,0 +1,61 @@ +package cn.hutool.v7.http.server.engine.jetty; + +import cn.hutool.v7.http.server.handler.ServerRequest; +import org.eclipse.jetty.http.HttpFields; +import org.eclipse.jetty.io.Content; +import org.eclipse.jetty.server.Request; + +import java.io.InputStream; + +/** + * Jetty请求对象包装 + * + * @author looly + */ +public class JettyRequest implements ServerRequest { + + private final Request request; + + /** + * 构造 + * + * @param request Jetty请求对象 + */ + public JettyRequest(Request request) { + this.request = request; + } + + @Override + public String getMethod() { + return request.getMethod(); + } + + @Override + public String getPath() { + return Request.getPathInContext(request); + } + + @Override + public String getQuery() { + return request.getHttpURI().getQuery(); + } + + @Override + public String getHeader(String name) { + return request.getHeaders().get(name); + } + + /** + * 获取所有请求头 + * + * @return 请求头 + */ + public HttpFields getHeaders() { + return request.getHeaders(); + } + + @Override + public InputStream getBodyStream() { + return Content.Source.asInputStream(request); + } +} diff --git a/hutool-http/src/main/java/cn/hutool/v7/http/server/engine/jetty/JettyResponse.java b/hutool-http/src/main/java/cn/hutool/v7/http/server/engine/jetty/JettyResponse.java new file mode 100644 index 000000000..cf3eb6051 --- /dev/null +++ b/hutool-http/src/main/java/cn/hutool/v7/http/server/engine/jetty/JettyResponse.java @@ -0,0 +1,62 @@ +package cn.hutool.v7.http.server.engine.jetty; + +import cn.hutool.v7.http.server.handler.ServerResponse; +import org.eclipse.jetty.io.Content; +import org.eclipse.jetty.server.Response; + +import java.io.OutputStream; +import java.nio.charset.Charset; + +/** + * Jetty响应对象 + * + * @author looly + */ +public class JettyResponse implements ServerResponse { + + private Charset charset; + private final Response response; + + /** + * 构造 + * + * @param response Jetty响应对象 + */ + public JettyResponse(Response response) { + this.response = response; + } + + @Override + public JettyResponse setStatus(int statusCode) { + response.setStatus(statusCode); + return this; + } + + @Override + public JettyResponse setCharset(Charset charset) { + this.charset = charset; + return this; + } + + @Override + public Charset getCharset() { + return this.charset; + } + + @Override + public JettyResponse addHeader(String header, String value) { + response.getHeaders().add(header, value); + return this; + } + + @Override + public JettyResponse setHeader(String header, String value) { + response.getHeaders().put(header, value); + return this; + } + + @Override + public OutputStream getOutputStream() { + return Content.Sink.asOutputStream(response); + } +} diff --git a/hutool-http/src/main/java/cn/hutool/v7/http/server/engine/jetty/package-info.java b/hutool-http/src/main/java/cn/hutool/v7/http/server/engine/jetty/package-info.java index f914d7d2b..498fbee68 100644 --- a/hutool-http/src/main/java/cn/hutool/v7/http/server/engine/jetty/package-info.java +++ b/hutool-http/src/main/java/cn/hutool/v7/http/server/engine/jetty/package-info.java @@ -15,7 +15,7 @@ */ /** - * Jetty9引擎实现 + * Jetty引擎实现 * * @author Looly */