This commit is contained in:
@@ -7,6 +7,7 @@ package org.redkale.net;
|
|||||||
|
|
||||||
import java.nio.*;
|
import java.nio.*;
|
||||||
import java.nio.channels.*;
|
import java.nio.channels.*;
|
||||||
|
import java.util.function.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -27,7 +28,7 @@ public abstract class Response<R extends Request> {
|
|||||||
|
|
||||||
private boolean inited = true;
|
private boolean inited = true;
|
||||||
|
|
||||||
protected Runnable recycleListener;
|
protected BiConsumer<Request, Response> recycleListener;
|
||||||
|
|
||||||
private final CompletionHandler finishHandler = new CompletionHandler<Integer, ByteBuffer>() {
|
private final CompletionHandler finishHandler = new CompletionHandler<Integer, ByteBuffer>() {
|
||||||
|
|
||||||
@@ -103,7 +104,7 @@ public abstract class Response<R extends Request> {
|
|||||||
boolean keepAlive = request.keepAlive;
|
boolean keepAlive = request.keepAlive;
|
||||||
if (recycleListener != null) {
|
if (recycleListener != null) {
|
||||||
try {
|
try {
|
||||||
recycleListener.run();
|
recycleListener.accept(request, this);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
System.err.println(request);
|
System.err.println(request);
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@@ -136,7 +137,7 @@ public abstract class Response<R extends Request> {
|
|||||||
this.request.createtime = System.currentTimeMillis();
|
this.request.createtime = System.currentTimeMillis();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setRecycleListener(Runnable recycleListener) {
|
public void setRecycleListener(BiConsumer<Request, Response> recycleListener) {
|
||||||
this.recycleListener = recycleListener;
|
this.recycleListener = recycleListener;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ public abstract class BasedHttpServlet extends HttpServlet {
|
|||||||
response.finish(ce.getBuffers());
|
response.finish(ce.getBuffers());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
response.setBufferHandler(entry.cacheInterceptor);
|
response.setBufferHandler(entry.cacheHandler);
|
||||||
}
|
}
|
||||||
entry.servlet.execute(request, response);
|
entry.servlet.execute(request, response);
|
||||||
}
|
}
|
||||||
@@ -261,7 +261,7 @@ public abstract class BasedHttpServlet extends HttpServlet {
|
|||||||
HttpCacheable hc = method.getAnnotation(HttpCacheable.class);
|
HttpCacheable hc = method.getAnnotation(HttpCacheable.class);
|
||||||
this.cachetimeout = hc == null ? 0 : hc.timeout() * 1000;
|
this.cachetimeout = hc == null ? 0 : hc.timeout() * 1000;
|
||||||
this.cache = cachetimeout > 0 ? new ConcurrentHashMap() : null;
|
this.cache = cachetimeout > 0 ? new ConcurrentHashMap() : null;
|
||||||
this.cacheInterceptor = cachetimeout > 0 ? (HttpResponse response, ByteBuffer[] buffers) -> {
|
this.cacheHandler = cachetimeout > 0 ? (HttpResponse response, ByteBuffer[] buffers) -> {
|
||||||
int status = response.getStatus();
|
int status = response.getStatus();
|
||||||
if (status != 200) return null;
|
if (status != 200) return null;
|
||||||
CacheEntry ce = new CacheEntry(response.getStatus(), response.getContentType(), buffers);
|
CacheEntry ce = new CacheEntry(response.getStatus(), response.getContentType(), buffers);
|
||||||
@@ -274,7 +274,7 @@ public abstract class BasedHttpServlet extends HttpServlet {
|
|||||||
return this.moduleid != 0 || this.actionid != 0;
|
return this.moduleid != 0 || this.actionid != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public final HttpResponse.BufferHandler cacheInterceptor;
|
public final HttpResponse.BufferHandler cacheHandler;
|
||||||
|
|
||||||
public final ConcurrentHashMap<String, CacheEntry> cache;
|
public final ConcurrentHashMap<String, CacheEntry> cache;
|
||||||
|
|
||||||
|
|||||||
@@ -36,9 +36,10 @@ public class HttpResponse<R extends HttpRequest> extends Response<R> {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* HttpResponse.finish 方法内调用
|
* HttpResponse.finish 方法内调用
|
||||||
|
* 主要给@HttpCacheable使用
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public static interface BufferHandler {
|
protected static interface BufferHandler {
|
||||||
|
|
||||||
public ByteBuffer[] execute(final HttpResponse response, final ByteBuffer[] buffers);
|
public ByteBuffer[] execute(final HttpResponse response, final ByteBuffer[] buffers);
|
||||||
}
|
}
|
||||||
@@ -504,11 +505,11 @@ public class HttpResponse<R extends HttpRequest> extends Response<R> {
|
|||||||
this.contentLength = contentLength;
|
this.contentLength = contentLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
public BufferHandler getBufferHandler() {
|
protected BufferHandler getBufferHandler() {
|
||||||
return bufferHandler;
|
return bufferHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setBufferHandler(BufferHandler bufferHandler) {
|
protected void setBufferHandler(BufferHandler bufferHandler) {
|
||||||
this.bufferHandler = bufferHandler;
|
this.bufferHandler = bufferHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user