com.planetj.servlet.filter.compression
Class CompressingHttpServletResponse
java.lang.Object
javax.servlet.ServletResponseWrapper
javax.servlet.http.HttpServletResponseWrapper
com.planetj.servlet.filter.compression.CompressingHttpServletResponse
- All Implemented Interfaces:
- javax.servlet.http.HttpServletResponse, javax.servlet.ServletResponse
final class CompressingHttpServletResponse
- extends javax.servlet.http.HttpServletResponseWrapper
Implementation of HttpServletResponse
which will optionally compress data written to the response.
- Author:
- Sean Owen
Fields inherited from interface javax.servlet.http.HttpServletResponse |
SC_ACCEPTED, SC_BAD_GATEWAY, SC_BAD_REQUEST, SC_CONFLICT, SC_CONTINUE, SC_CREATED, SC_EXPECTATION_FAILED, SC_FORBIDDEN, SC_FOUND, SC_GATEWAY_TIMEOUT, SC_GONE, SC_HTTP_VERSION_NOT_SUPPORTED, SC_INTERNAL_SERVER_ERROR, SC_LENGTH_REQUIRED, SC_METHOD_NOT_ALLOWED, SC_MOVED_PERMANENTLY, SC_MOVED_TEMPORARILY, SC_MULTIPLE_CHOICES, SC_NO_CONTENT, SC_NON_AUTHORITATIVE_INFORMATION, SC_NOT_ACCEPTABLE, SC_NOT_FOUND, SC_NOT_IMPLEMENTED, SC_NOT_MODIFIED, SC_OK, SC_PARTIAL_CONTENT, SC_PAYMENT_REQUIRED, SC_PRECONDITION_FAILED, SC_PROXY_AUTHENTICATION_REQUIRED, SC_REQUEST_ENTITY_TOO_LARGE, SC_REQUEST_TIMEOUT, SC_REQUEST_URI_TOO_LONG, SC_REQUESTED_RANGE_NOT_SATISFIABLE, SC_RESET_CONTENT, SC_SEE_OTHER, SC_SERVICE_UNAVAILABLE, SC_SWITCHING_PROTOCOLS, SC_TEMPORARY_REDIRECT, SC_UNAUTHORIZED, SC_UNSUPPORTED_MEDIA_TYPE, SC_USE_PROXY |
Methods inherited from class javax.servlet.http.HttpServletResponseWrapper |
addCookie, containsHeader, encodeRedirectUrl, encodeRedirectURL, encodeUrl, encodeURL, sendError, sendError, sendRedirect, setStatus, setStatus |
Methods inherited from class javax.servlet.ServletResponseWrapper |
getBufferSize, getCharacterEncoding, getContentType, getLocale, getResponse, isCommitted, setBufferSize, setCharacterEncoding, setLocale, setResponse |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Methods inherited from interface javax.servlet.ServletResponse |
getBufferSize, getCharacterEncoding, getContentType, getLocale, isCommitted, setBufferSize, setCharacterEncoding, setLocale |
ACCEPT_ENCODING_HEADER
static final java.lang.String ACCEPT_ENCODING_HEADER
- See Also:
- Constant Field Values
CONTENT_ENCODING_HEADER
static final java.lang.String CONTENT_ENCODING_HEADER
- See Also:
- Constant Field Values
CONTENT_LENGTH_HEADER
private static final java.lang.String CONTENT_LENGTH_HEADER
- See Also:
- Constant Field Values
CONTENT_TYPE_HEADER
private static final java.lang.String CONTENT_TYPE_HEADER
- See Also:
- Constant Field Values
VARY_HEADER
private static final java.lang.String VARY_HEADER
- See Also:
- Constant Field Values
X_COMPRESSED_BY_HEADER
private static final java.lang.String X_COMPRESSED_BY_HEADER
- See Also:
- Constant Field Values
COMPRESSED_BY_VALUE
private static final java.lang.String COMPRESSED_BY_VALUE
httpResponse
private final javax.servlet.http.HttpServletResponse httpResponse
context
private final CompressingFilterContext context
logger
private final CompressingFilterLoggerImpl logger
compressedContentEncoding
private final java.lang.String compressedContentEncoding
compressingStreamFactory
private final CompressingStreamFactory compressingStreamFactory
compressingSOS
private CompressingServletOutputStream compressingSOS
printWriter
private java.io.PrintWriter printWriter
isGetOutputStreamCalled
private boolean isGetOutputStreamCalled
isGetWriterCalled
private boolean isGetWriterCalled
compressing
private boolean compressing
savedContentLength
private int savedContentLength
savedContentLengthSet
private boolean savedContentLengthSet
savedContentEncoding
private java.lang.String savedContentEncoding
contentTypeOK
private boolean contentTypeOK
CompressingHttpServletResponse
CompressingHttpServletResponse(javax.servlet.http.HttpServletResponse httpResponse,
CompressingStreamFactory compressingStreamFactory,
java.lang.String contentEncoding,
CompressingFilterContext context)
getOutputStream
@NotNull
public javax.servlet.ServletOutputStream getOutputStream()
throws java.io.IOException
- Specified by:
getOutputStream
in interface javax.servlet.ServletResponse
- Overrides:
getOutputStream
in class javax.servlet.ServletResponseWrapper
- Throws:
java.io.IOException
getWriter
@NotNull
public java.io.PrintWriter getWriter()
throws java.io.IOException
- Specified by:
getWriter
in interface javax.servlet.ServletResponse
- Overrides:
getWriter
in class javax.servlet.ServletResponseWrapper
- Throws:
java.io.IOException
addHeader
public void addHeader(java.lang.String name,
java.lang.String value)
- Specified by:
addHeader
in interface javax.servlet.http.HttpServletResponse
- Overrides:
addHeader
in class javax.servlet.http.HttpServletResponseWrapper
addIntHeader
public void addIntHeader(java.lang.String name,
int value)
- Specified by:
addIntHeader
in interface javax.servlet.http.HttpServletResponse
- Overrides:
addIntHeader
in class javax.servlet.http.HttpServletResponseWrapper
addDateHeader
public void addDateHeader(java.lang.String name,
long value)
- Specified by:
addDateHeader
in interface javax.servlet.http.HttpServletResponse
- Overrides:
addDateHeader
in class javax.servlet.http.HttpServletResponseWrapper
setHeader
public void setHeader(java.lang.String name,
java.lang.String value)
- Specified by:
setHeader
in interface javax.servlet.http.HttpServletResponse
- Overrides:
setHeader
in class javax.servlet.http.HttpServletResponseWrapper
setIntHeader
public void setIntHeader(java.lang.String name,
int value)
- Specified by:
setIntHeader
in interface javax.servlet.http.HttpServletResponse
- Overrides:
setIntHeader
in class javax.servlet.http.HttpServletResponseWrapper
setDateHeader
public void setDateHeader(java.lang.String name,
long value)
- Specified by:
setDateHeader
in interface javax.servlet.http.HttpServletResponse
- Overrides:
setDateHeader
in class javax.servlet.http.HttpServletResponseWrapper
flushBuffer
public void flushBuffer()
throws java.io.IOException
- Specified by:
flushBuffer
in interface javax.servlet.ServletResponse
- Overrides:
flushBuffer
in class javax.servlet.ServletResponseWrapper
- Throws:
java.io.IOException
reset
public void reset()
- Specified by:
reset
in interface javax.servlet.ServletResponse
- Overrides:
reset
in class javax.servlet.ServletResponseWrapper
resetBuffer
public void resetBuffer()
- Specified by:
resetBuffer
in interface javax.servlet.ServletResponse
- Overrides:
resetBuffer
in class javax.servlet.ServletResponseWrapper
setContentLength
public void setContentLength(int contentLength)
- Specified by:
setContentLength
in interface javax.servlet.ServletResponse
- Overrides:
setContentLength
in class javax.servlet.ServletResponseWrapper
setContentType
public void setContentType(java.lang.String contentType)
- Specified by:
setContentType
in interface javax.servlet.ServletResponse
- Overrides:
setContentType
in class javax.servlet.ServletResponseWrapper
toString
@NotNull
public java.lang.String toString()
- Overrides:
toString
in class java.lang.Object
isCompressing
boolean isCompressing()
close
void close()
throws java.io.IOException
- Throws:
java.io.IOException
setResponseHeaders
private void setResponseHeaders()
rawStreamCommitted
void rawStreamCommitted()
switchToCompression
void switchToCompression()
isAllowedHeader
private boolean isAllowedHeader(java.lang.String header)
Returns true if and only if the named HTTP header may be set directly by the application, as some headers must be
handled specially. null is allowed, though it setting a header named null will probably generate an exception from
the underlying HttpServletResponse
. CONTENT_LENGTH_HEADER
, CONTENT_ENCODING_HEADER
and
X_COMPRESSED_BY_HEADER
are not allowed.
- Parameters:
header
- name of HTTP header
- Returns:
- true if and only if header can be set directly by application
flushWriter
private void flushWriter()
isCompressableContentType
private boolean isCompressableContentType(java.lang.String contentType)
- Checks to see if the given content type should be compressed. This checks against the
includeContentTypes
and excludeContentTypes
filter init parameters; if the former
is set and the given content type is in that parameter's list, or if the latter is set and the content type
is not in that list, then this method returns true
.
- Parameters:
contentType
- content type of response
- Returns:
- true if and only if the given content type should be compressed
getCompressingServletOutputStream
@NotNull
private CompressingServletOutputStream getCompressingServletOutputStream()
throws java.io.IOException
- Throws:
java.io.IOException
mustNotCompress
private boolean mustNotCompress()
mustCompress
private boolean mustCompress()