update Jetty to 12 and add JettyRequest and JettyResponse

This commit is contained in:
Looly
2025-04-17 17:09:44 +08:00
parent 33aa3ecf3a
commit 869b82b8d0
6 changed files with 136 additions and 28 deletions

View File

@@ -37,10 +37,8 @@
<httpclient5.version>5.4.1</httpclient5.version>
<httpclient4.version>4.5.14</httpclient4.version>
<okhttp.version>4.12.0</okhttp.version>
<!-- 固定 2.2.x支持到JDK8 -->
<undertow.version>2.2.36.Final</undertow.version>
<!-- 固定 9.x支持到JDK8 -->
<jetty.version>9.4.56.v20240826</jetty.version>
<undertow.version>2.3.18.Final</undertow.version>
<jetty.version>12.0.19</jetty.version>
<!-- 固定 9.x支持到JDK8 -->
<tomcat.version>9.0.97</tomcat.version>
<smartboot.version>1.4.3</smartboot.version>
@@ -85,13 +83,6 @@
<version>5.0.0</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
<optional>true</optional>
</dependency>
<!-- 第三方HTTP客户端库 -->
<dependency>

View File

@@ -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;
}

View File

@@ -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;
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -15,7 +15,7 @@
*/
/**
* Jetty9引擎实现
* Jetty引擎实现
*
* @author Looly
*/