From c738d783c2337784313222f34a7daf0241847fd0 Mon Sep 17 00:00:00 2001 From: Looly Date: Mon, 18 Nov 2024 14:11:59 +0800 Subject: [PATCH] fix code --- .../server/engine/jetty/Jetty9Handler.java | 49 +++++++++++++++++++ .../server/engine/jetty/Jetty9Request.java | 2 +- .../server/engine/jetty/Jetty9Response.java | 2 +- .../{Jetty9Engine.java => JettyEngine.java} | 32 +++++++----- .../server/engine/sun/SunServerRequest.java | 2 +- .../server/engine/sun/SunServerResponse.java | 2 +- .../engine/undertow/UndertowRequest.java | 2 +- .../engine/undertow/UndertowResponse.java | 2 +- .../http/server/handler/HttpHandler.java | 6 +-- .../http/server/handler/RootHandler.java | 2 - .../server/{ => handler}/ServerRequest.java | 2 +- .../server/{ => handler}/ServerResponse.java | 2 +- .../http/server/handler/package-info.java | 4 +- .../hutool/http/server/Issue3343Test.java | 2 + .../hutool/http/server/engine/JettyTest.java | 4 +- 15 files changed, 86 insertions(+), 29 deletions(-) create mode 100644 hutool-http/src/main/java/org/dromara/hutool/http/server/engine/jetty/Jetty9Handler.java rename hutool-http/src/main/java/org/dromara/hutool/http/server/engine/jetty/{Jetty9Engine.java => JettyEngine.java} (83%) rename hutool-http/src/main/java/org/dromara/hutool/http/server/{ => handler}/ServerRequest.java (99%) rename hutool-http/src/main/java/org/dromara/hutool/http/server/{ => handler}/ServerResponse.java (99%) diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/jetty/Jetty9Handler.java b/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/jetty/Jetty9Handler.java new file mode 100644 index 000000000..be1a10183 --- /dev/null +++ b/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/jetty/Jetty9Handler.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2024 Hutool Team and hutool.cn + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.dromara.hutool.http.server.engine.jetty; + +import org.dromara.hutool.http.server.handler.HttpHandler; +import org.eclipse.jetty.server.Request; +import org.eclipse.jetty.server.handler.AbstractHandler; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * Jetty9版本使用的Handler + * + * @author Looly + */ +public class Jetty9Handler extends AbstractHandler { + + private final HttpHandler handler; + + /** + * 构造 + * + * @param handler 处理器 + */ + public Jetty9Handler(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 Jetty9Request(request), new Jetty9Response(response)); + } +} diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/jetty/Jetty9Request.java b/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/jetty/Jetty9Request.java index 7add8af91..b4eea65d3 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/jetty/Jetty9Request.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/jetty/Jetty9Request.java @@ -16,7 +16,7 @@ package org.dromara.hutool.http.server.engine.jetty; -import org.dromara.hutool.http.server.ServerRequest; +import org.dromara.hutool.http.server.handler.ServerRequest; import javax.servlet.http.HttpServletRequest; import java.io.IOException; diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/jetty/Jetty9Response.java b/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/jetty/Jetty9Response.java index 293902e16..99b30d502 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/jetty/Jetty9Response.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/jetty/Jetty9Response.java @@ -17,7 +17,7 @@ package org.dromara.hutool.http.server.engine.jetty; import org.dromara.hutool.core.io.IORuntimeException; -import org.dromara.hutool.http.server.ServerResponse; +import org.dromara.hutool.http.server.handler.ServerResponse; import javax.servlet.http.HttpServletResponse; import java.io.IOException; diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/jetty/Jetty9Engine.java b/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/jetty/JettyEngine.java similarity index 83% rename from hutool-http/src/main/java/org/dromara/hutool/http/server/engine/jetty/Jetty9Engine.java rename to hutool-http/src/main/java/org/dromara/hutool/http/server/engine/jetty/JettyEngine.java index f160c0570..ed0ccee54 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/jetty/Jetty9Engine.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/jetty/JettyEngine.java @@ -17,36 +17,49 @@ package org.dromara.hutool.http.server.engine.jetty; import org.dromara.hutool.core.lang.Assert; +import org.dromara.hutool.core.util.ObjUtil; import org.dromara.hutool.http.HttpException; import org.dromara.hutool.http.server.ServerConfig; import org.dromara.hutool.http.server.engine.AbstractServerEngine; import org.eclipse.jetty.http.HttpVersion; import org.eclipse.jetty.server.*; -import org.eclipse.jetty.server.handler.AbstractHandler; import org.eclipse.jetty.util.ssl.SslContextFactory; import javax.net.ssl.SSLContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; /** * Jetty引擎实现 * * @author Looly */ -public class Jetty9Engine extends AbstractServerEngine { +public class JettyEngine extends AbstractServerEngine { private Server server; + /** + * 由于Jetty9和以上版本中接口实现不同,此处根据不同版本做兼容自定义 + */ + private Handler jettyHandler; /** * 构造 */ - public Jetty9Engine() { + public JettyEngine() { // issue#IABWBL JDK8下,在IDEA旗舰版加载Spring boot插件时,启动应用不会检查字段类是否存在 // 此处构造时调用下这个类,以便触发类是否存在的检查 Assert.notNull(Server.class); } + /** + * 设置Jetty处理器,用于处理请求 + * + * @param jettyHandler 处理器 + * @return this + */ + public JettyEngine setJettyHandler(final Handler jettyHandler) { + this.jettyHandler = jettyHandler; + return this; + } + @Override public void start() { initEngine(); @@ -80,13 +93,8 @@ public class Jetty9Engine extends AbstractServerEngine { final ServerConfig config = this.config; final Server server = new Server(); server.addConnector(createConnector(server, config)); - server.setHandler(new AbstractHandler() { - @Override - public void handle(final String target, final Request baseRequest, - final HttpServletRequest request, final HttpServletResponse response) { - handler.handle(new Jetty9Request(request), new Jetty9Response(response)); - } - }); + server.setHandler(ObjUtil.defaultIfNull(this.jettyHandler, + () -> new Jetty9Handler(this.handler))); this.server = server; } diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/sun/SunServerRequest.java b/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/sun/SunServerRequest.java index f1d298212..ba52a667f 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/sun/SunServerRequest.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/sun/SunServerRequest.java @@ -33,7 +33,7 @@ import org.dromara.hutool.http.meta.ContentTypeUtil; import org.dromara.hutool.http.meta.HeaderName; import org.dromara.hutool.http.multipart.MultipartFormData; import org.dromara.hutool.http.multipart.UploadSetting; -import org.dromara.hutool.http.server.ServerRequest; +import org.dromara.hutool.http.server.handler.ServerRequest; import java.io.InputStream; import java.net.HttpCookie; diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/sun/SunServerResponse.java b/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/sun/SunServerResponse.java index b18559725..c3dcbe57c 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/sun/SunServerResponse.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/sun/SunServerResponse.java @@ -22,7 +22,7 @@ import org.dromara.hutool.core.io.IORuntimeException; import org.dromara.hutool.core.io.IoUtil; import org.dromara.hutool.http.meta.ContentType; import org.dromara.hutool.http.meta.HttpStatus; -import org.dromara.hutool.http.server.ServerResponse; +import org.dromara.hutool.http.server.handler.ServerResponse; import java.io.IOException; import java.io.InputStream; diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/undertow/UndertowRequest.java b/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/undertow/UndertowRequest.java index 88241be4e..f54f39d1e 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/undertow/UndertowRequest.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/undertow/UndertowRequest.java @@ -19,7 +19,7 @@ package org.dromara.hutool.http.server.engine.undertow; import io.undertow.server.HttpServerExchange; import io.undertow.util.HeaderMap; import org.dromara.hutool.core.util.CharsetUtil; -import org.dromara.hutool.http.server.ServerRequest; +import org.dromara.hutool.http.server.handler.ServerRequest; import java.io.InputStream; import java.nio.charset.Charset; diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/undertow/UndertowResponse.java b/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/undertow/UndertowResponse.java index 4c660b8d7..3878b84b4 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/undertow/UndertowResponse.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/undertow/UndertowResponse.java @@ -19,7 +19,7 @@ package org.dromara.hutool.http.server.engine.undertow; import io.undertow.io.Sender; import io.undertow.server.HttpServerExchange; import io.undertow.util.HttpString; -import org.dromara.hutool.http.server.ServerResponse; +import org.dromara.hutool.http.server.handler.ServerResponse; import java.io.OutputStream; import java.nio.ByteBuffer; diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/server/handler/HttpHandler.java b/hutool-http/src/main/java/org/dromara/hutool/http/server/handler/HttpHandler.java index b24678fff..30b1cf550 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/server/handler/HttpHandler.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/server/handler/HttpHandler.java @@ -16,11 +16,9 @@ package org.dromara.hutool.http.server.handler; -import org.dromara.hutool.http.server.ServerRequest; -import org.dromara.hutool.http.server.ServerResponse; - /** - * HTTP请求处理器 + * HTTP请求处理器
+ * 抽象请求处理,对于不同的HTTP服务器,将这个处理器封装成对应的处理器,例如Jetty的JettyHandler,Undertow的UndertowHandler等 * * @author Looly */ diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/server/handler/RootHandler.java b/hutool-http/src/main/java/org/dromara/hutool/http/server/handler/RootHandler.java index 4c2504c27..fdf288d2d 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/server/handler/RootHandler.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/server/handler/RootHandler.java @@ -19,8 +19,6 @@ package org.dromara.hutool.http.server.handler; import org.dromara.hutool.core.collection.ListUtil; import org.dromara.hutool.core.io.file.FileUtil; import org.dromara.hutool.http.meta.HttpStatus; -import org.dromara.hutool.http.server.ServerRequest; -import org.dromara.hutool.http.server.ServerResponse; import java.io.File; import java.util.List; diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/server/ServerRequest.java b/hutool-http/src/main/java/org/dromara/hutool/http/server/handler/ServerRequest.java similarity index 99% rename from hutool-http/src/main/java/org/dromara/hutool/http/server/ServerRequest.java rename to hutool-http/src/main/java/org/dromara/hutool/http/server/handler/ServerRequest.java index 785963336..9a3bb610a 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/server/ServerRequest.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/server/handler/ServerRequest.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.dromara.hutool.http.server; +package org.dromara.hutool.http.server.handler; import org.dromara.hutool.core.io.IORuntimeException; import org.dromara.hutool.core.io.IoUtil; diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/server/ServerResponse.java b/hutool-http/src/main/java/org/dromara/hutool/http/server/handler/ServerResponse.java similarity index 99% rename from hutool-http/src/main/java/org/dromara/hutool/http/server/ServerResponse.java rename to hutool-http/src/main/java/org/dromara/hutool/http/server/handler/ServerResponse.java index 5522b7d22..df6283083 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/server/ServerResponse.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/server/handler/ServerResponse.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.dromara.hutool.http.server; +package org.dromara.hutool.http.server.handler; import org.dromara.hutool.core.io.IoUtil; import org.dromara.hutool.core.io.file.FileUtil; diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/server/handler/package-info.java b/hutool-http/src/main/java/org/dromara/hutool/http/server/handler/package-info.java index c1eeec9bc..44941f82e 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/server/handler/package-info.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/server/handler/package-info.java @@ -15,6 +15,8 @@ */ /** - * {@link com.sun.net.httpserver.HttpHandler} 实现包装 + * HTTP服务器请求和响应处理器的统一封装 + * + * @author Looly */ package org.dromara.hutool.http.server.handler; diff --git a/hutool-http/src/test/java/org/dromara/hutool/http/server/Issue3343Test.java b/hutool-http/src/test/java/org/dromara/hutool/http/server/Issue3343Test.java index 662bd8f35..3f58def19 100644 --- a/hutool-http/src/test/java/org/dromara/hutool/http/server/Issue3343Test.java +++ b/hutool-http/src/test/java/org/dromara/hutool/http/server/Issue3343Test.java @@ -21,6 +21,8 @@ import org.dromara.hutool.core.lang.Console; import org.dromara.hutool.core.map.multi.ListValueMap; import org.dromara.hutool.http.HttpUtil; import org.dromara.hutool.http.server.engine.sun.SimpleServer; +import org.dromara.hutool.http.server.handler.ServerRequest; +import org.dromara.hutool.http.server.handler.ServerResponse; /** * http://localhost:8888/?name=hutool diff --git a/hutool-http/src/test/java/org/dromara/hutool/http/server/engine/JettyTest.java b/hutool-http/src/test/java/org/dromara/hutool/http/server/engine/JettyTest.java index 6445182df..0ca81ef8e 100644 --- a/hutool-http/src/test/java/org/dromara/hutool/http/server/engine/JettyTest.java +++ b/hutool-http/src/test/java/org/dromara/hutool/http/server/engine/JettyTest.java @@ -2,11 +2,11 @@ package org.dromara.hutool.http.server.engine; import org.dromara.hutool.core.lang.Console; import org.dromara.hutool.http.server.ServerConfig; -import org.dromara.hutool.http.server.engine.jetty.Jetty9Engine; +import org.dromara.hutool.http.server.engine.jetty.JettyEngine; public class JettyTest { public static void main(String[] args) { - final Jetty9Engine engine = new Jetty9Engine(); + final JettyEngine engine = new JettyEngine(); engine.init(ServerConfig.of()); engine.setHandler((request, response) -> { Console.log(request.getPath());