Customizable error page buffer size (#11654)
Customizable error page buffer size --------- Co-authored-by: Greg Wilkins <gregw@webtide.com>
This commit is contained in:
parent
ed1cadc449
commit
4755fa3f68
|
@ -75,6 +75,7 @@ public class ErrorHandler implements Request.Handler
|
||||||
boolean _showStacks = false;
|
boolean _showStacks = false;
|
||||||
boolean _showCauses = false;
|
boolean _showCauses = false;
|
||||||
boolean _showMessageInTitle = true;
|
boolean _showMessageInTitle = true;
|
||||||
|
int _bufferSize = -1;
|
||||||
String _defaultResponseMimeType = Type.TEXT_HTML.asString();
|
String _defaultResponseMimeType = Type.TEXT_HTML.asString();
|
||||||
HttpField _cacheControl = new PreEncodedHttpField(HttpHeader.CACHE_CONTROL, "must-revalidate,no-cache,no-store");
|
HttpField _cacheControl = new PreEncodedHttpField(HttpHeader.CACHE_CONTROL, "must-revalidate,no-cache,no-store");
|
||||||
|
|
||||||
|
@ -198,8 +199,7 @@ public class ErrorHandler implements Request.Handler
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int bufferSize = request.getConnectionMetaData().getHttpConfiguration().getOutputBufferSize();
|
int bufferSize = getBufferSize() <= 0 ? computeBufferSize(request) : getBufferSize();
|
||||||
bufferSize = Math.min(8192, bufferSize); // TODO ?
|
|
||||||
ByteBufferPool byteBufferPool = request.getComponents().getByteBufferPool();
|
ByteBufferPool byteBufferPool = request.getComponents().getByteBufferPool();
|
||||||
RetainableByteBuffer buffer = byteBufferPool.acquire(bufferSize, false);
|
RetainableByteBuffer buffer = byteBufferPool.acquire(bufferSize, false);
|
||||||
|
|
||||||
|
@ -266,6 +266,13 @@ public class ErrorHandler implements Request.Handler
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected int computeBufferSize(Request request)
|
||||||
|
{
|
||||||
|
int bufferSize = request.getConnectionMetaData().getHttpConfiguration().getOutputBufferSize();
|
||||||
|
bufferSize = Math.min(8192, bufferSize);
|
||||||
|
return bufferSize;
|
||||||
|
}
|
||||||
|
|
||||||
protected void writeErrorHtml(Request request, Writer writer, Charset charset, int code, String message, Throwable cause, boolean showStacks) throws IOException
|
protected void writeErrorHtml(Request request, Writer writer, Charset charset, int code, String message, Throwable cause, boolean showStacks) throws IOException
|
||||||
{
|
{
|
||||||
if (message == null)
|
if (message == null)
|
||||||
|
@ -530,6 +537,25 @@ public class ErrorHandler implements Request.Handler
|
||||||
return errorHandler;
|
return errorHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Buffer size for entire error response. If error page is bigger than buffer size, it will be truncated.
|
||||||
|
* With a -1 meaning that a heuristic will be used (e.g. min(8K, httpConfig.bufferSize))
|
||||||
|
*/
|
||||||
|
@ManagedAttribute("Buffer size for entire error response")
|
||||||
|
public int getBufferSize()
|
||||||
|
{
|
||||||
|
return _bufferSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param bufferSize Buffer size for entire error response. If error page is bigger than buffer size, it will be truncated.
|
||||||
|
* With a -1 meaning that a heuristic will be used (e.g. min(8K, httpConfig.bufferSize))
|
||||||
|
*/
|
||||||
|
public void setBufferSize(int bufferSize)
|
||||||
|
{
|
||||||
|
this._bufferSize = bufferSize;
|
||||||
|
}
|
||||||
|
|
||||||
public static class ErrorRequest extends Request.AttributesWrapper
|
public static class ErrorRequest extends Request.AttributesWrapper
|
||||||
{
|
{
|
||||||
private static final Set<String> ATTRIBUTES = Set.of(ERROR_MESSAGE, ERROR_EXCEPTION, ERROR_STATUS);
|
private static final Set<String> ATTRIBUTES = Set.of(ERROR_MESSAGE, ERROR_EXCEPTION, ERROR_STATUS);
|
||||||
|
|
Loading…
Reference in New Issue