response
This commit is contained in:
@@ -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> {
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user