This commit is contained in:
redkale
2024-10-19 09:28:32 +08:00
parent fd5225ab37
commit fa8ca1fb38
2 changed files with 29 additions and 19 deletions

View File

@@ -160,11 +160,14 @@ public class HttpResponse extends Response<HttpContext, HttpRequest> {
// 0表示跳过header正数表示header的字节长度。 // 0表示跳过header正数表示header的字节长度。
private int headWritedSize = -1; private int headWritedSize = -1;
private BiConsumer<HttpResponse, byte[]> cacheHandler; // 对RetResult结果输出时进行处理例如retinfo国际化
private BiFunction<HttpRequest, RetResult, RetResult> retResultHandler; private BiFunction<HttpRequest, RetResult, RetResult> retResultHandler;
private BiFunction<HttpResponse, ByteArray, ByteArray> sendHandler; // 对输出结果进行加密处理
private BiFunction<HttpResponse, ByteArray, ByteArray> encryptHandler;
// 供HttpMapping.cacheSeconds内部使用
private BiConsumer<HttpResponse, byte[]> cacheHandler;
// ------------------------------------------------ // ------------------------------------------------
private final String plainContentType; private final String plainContentType;
@@ -259,7 +262,7 @@ public class HttpResponse extends Response<HttpContext, HttpRequest> {
this.headerArray.clear(); this.headerArray.clear();
this.cacheHandler = null; this.cacheHandler = null;
this.retResultHandler = null; this.retResultHandler = null;
this.sendHandler = null; this.encryptHandler = null;
this.respHeadContainsConnection = false; this.respHeadContainsConnection = false;
this.jsonWriter.recycle(); this.jsonWriter.recycle();
return super.recycle(); return super.recycle();
@@ -1005,9 +1008,9 @@ public class HttpResponse extends Response<HttpContext, HttpRequest> {
if (isClosed()) { if (isClosed()) {
return; // 避免重复关闭 return; // 避免重复关闭
} }
if (sendHandler != null) { if (encryptHandler != null) {
ByteArray bodyArray = new ByteArray(bodyContent, bodyOffset, bodyLength); ByteArray bodyArray = new ByteArray(bodyContent, bodyOffset, bodyLength);
bodyArray = sendHandler.apply(this, bodyArray); bodyArray = encryptHandler.apply(this, bodyArray);
bodyContent = bodyArray.content(); bodyContent = bodyArray.content();
bodyOffset = bodyArray.offset(); bodyOffset = bodyArray.offset();
bodyLength = bodyArray.length(); bodyLength = bodyArray.length();
@@ -1069,6 +1072,7 @@ public class HttpResponse extends Response<HttpContext, HttpRequest> {
// Header大小 // Header大小
protected void createHeader() { protected void createHeader() {
headerArray.clear();
if (this.status == 200 if (this.status == 200
&& !this.respHeadContainsConnection && !this.respHeadContainsConnection
&& !this.request.isWebSocket() && !this.request.isWebSocket()
@@ -1237,7 +1241,7 @@ public class HttpResponse extends Response<HttpContext, HttpRequest> {
} }
/** /**
* 异步输出指定内容 * 异步输出指定内容, 供WebSocketServlet使用
* *
* @param buffer 输出内容 * @param buffer 输出内容
* @param handler 异步回调函数 * @param handler 异步回调函数
@@ -1251,10 +1255,10 @@ public class HttpResponse extends Response<HttpContext, HttpRequest> {
if (buffer == null) { // 只发header if (buffer == null) { // 只发header
super.send(headerArray, handler); super.send(headerArray, handler);
} else { } else {
ByteBuffer headbuf = channel.pollWriteBuffer(); ByteBuffer headBuf = channel.pollWriteBuffer();
headbuf.put(headerArray.content(), 0, headerArray.length()); headBuf.put(headerArray.content(), 0, headerArray.length());
headbuf.flip(); headBuf.flip();
super.send(new ByteBuffer[] {headbuf, buffer}, null, handler); super.send(new ByteBuffer[] {headBuf, buffer}, null, handler);
} }
} else { } else {
super.send(buffer, null, handler); super.send(buffer, null, handler);
@@ -1591,9 +1595,11 @@ public class HttpResponse extends Response<HttpContext, HttpRequest> {
* 设置输出时的拦截器 * 设置输出时的拦截器
* *
* @param cacheHandler 拦截器 * @param cacheHandler 拦截器
* @return HttpResponse
*/ */
protected void setCacheHandler(BiConsumer<HttpResponse, byte[]> cacheHandler) { protected HttpResponse cacheHandler(BiConsumer<HttpResponse, byte[]> cacheHandler) {
this.cacheHandler = cacheHandler; this.cacheHandler = cacheHandler;
return this;
} }
/** /**
@@ -1609,27 +1615,31 @@ public class HttpResponse extends Response<HttpContext, HttpRequest> {
* 设置输出RetResult时的拦截器 * 设置输出RetResult时的拦截器
* *
* @param retResultHandler 拦截器 * @param retResultHandler 拦截器
* @return HttpResponse
*/ */
public void retResultHandler(BiFunction<HttpRequest, RetResult, RetResult> retResultHandler) { public HttpResponse retResultHandler(BiFunction<HttpRequest, RetResult, RetResult> retResultHandler) {
this.retResultHandler = retResultHandler; this.retResultHandler = retResultHandler;
return this;
} }
/** /**
* 获取输出RetResult时的拦截器 * 获取输出结果时的拦截器
* *
* @return 拦截器 * @return 拦截器
*/ */
protected BiFunction<HttpResponse, ByteArray, ByteArray> getSendHandler() { protected BiFunction<HttpResponse, ByteArray, ByteArray> getEncryptHandler() {
return sendHandler; return encryptHandler;
} }
/** /**
* 设置输出结果时的拦截器 * 设置输出结果时的拦截器
* *
* @param sendHandler 拦截器 * @param sendHandler 拦截器
* @return HttpResponse
*/ */
public void sendHandler(BiFunction<HttpResponse, ByteArray, ByteArray> sendHandler) { public HttpResponse encryptHandler(BiFunction<HttpResponse, ByteArray, ByteArray> sendHandler) {
this.sendHandler = sendHandler; this.encryptHandler = sendHandler;
return this;
} }
// protected final class TransferFileHandler implements CompletionHandler<Integer, Void> { // protected final class TransferFileHandler implements CompletionHandler<Integer, Void> {

View File

@@ -81,7 +81,7 @@ public class HttpServlet extends Servlet<HttpContext, HttpRequest, HttpResponse>
response.finish(ce.getBytes()); response.finish(ce.getBytes());
return; return;
} }
response.setCacheHandler(entry.cacheHandler); response.cacheHandler(entry.cacheHandler);
} }
if (response.inNonBlocking()) { if (response.inNonBlocking()) {
if (entry.nonBlocking) { if (entry.nonBlocking) {