com.atlassian.gzipfilter
Class SelectingResponseWrapper

java.lang.Object
  extended by javax.servlet.ServletResponseWrapper
      extended by javax.servlet.http.HttpServletResponseWrapper
          extended by com.atlassian.gzipfilter.SelectingResponseWrapper
All Implemented Interfaces:
javax.servlet.http.HttpServletResponse, javax.servlet.ServletResponse

public class SelectingResponseWrapper
extends javax.servlet.http.HttpServletResponseWrapper

Implementation of HttpServletResponseWrapper that captures page data instead of sending to the writer.

Should be used in filter-chains or when forwarding/including pages using a RequestDispatcher.

Author:
Joe Walnes, Scott Farquhar

Field Summary
 
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_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
 
Constructor Summary
SelectingResponseWrapper(javax.servlet.http.HttpServletResponse unWrappedResponse, GzipCompatibilitySelector compatibilitySelector, String defaultEncoding)
           
 
Method Summary
 void addHeader(String name, String value)
          Prevent content-length being set if page is parseable.
 void finishResponse()
           
 void flushBuffer()
          Prevent buffer from being flushed if this is a page being parsed.
 javax.servlet.ServletOutputStream getOutputStream()
           
 PrintWriter getWriter()
           
 void sendError(int sc)
           
 void sendError(int sc, String msg)
           
 void sendRedirect(String location)
          If a redirect is set, cancel the gzip header.
 void setContentLength(int contentLength)
          Prevent content-length being set if page is parseable.
 void setContentType(String type)
           
 void setHeader(String name, String value)
          Prevent content-length being set if page is parseable.
 void setStatus(int statusCode)
          In addition to its normal behaviour this will also deactivate gzip encoding for those responses that MUST NOT have a body.
 void setStatus(int statusCode, String sm)
          In addition to its normal behaviour this will also deactivate gzip encoding for those responses that MUST NOT have a body.
 
Methods inherited from class javax.servlet.http.HttpServletResponseWrapper
addCookie, addDateHeader, addIntHeader, containsHeader, encodeRedirectUrl, encodeRedirectURL, encodeUrl, encodeURL, setDateHeader, setIntHeader
 
Methods inherited from class javax.servlet.ServletResponseWrapper
getBufferSize, getCharacterEncoding, getLocale, getResponse, isCommitted, reset, resetBuffer, setBufferSize, setLocale, setResponse
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface javax.servlet.ServletResponse
getBufferSize, getCharacterEncoding, getLocale, isCommitted, reset, resetBuffer, setBufferSize, setLocale
 

Constructor Detail

SelectingResponseWrapper

public SelectingResponseWrapper(javax.servlet.http.HttpServletResponse unWrappedResponse,
                                GzipCompatibilitySelector compatibilitySelector,
                                String defaultEncoding)
Method Detail

setContentType

public void setContentType(String type)
Specified by:
setContentType in interface javax.servlet.ServletResponse
Overrides:
setContentType in class javax.servlet.ServletResponseWrapper

sendRedirect

public void sendRedirect(String location)
                  throws IOException
If a redirect is set, cancel the gzip header. The JWebunit test http client fails when it tries to unzip an empty body from a redirect and other clients might also fail. Since redirects are unlikely to have much of a body anyway, it makes sense not to gzip them.

Specified by:
sendRedirect in interface javax.servlet.http.HttpServletResponse
Overrides:
sendRedirect in class javax.servlet.http.HttpServletResponseWrapper
Throws:
IOException

setStatus

public void setStatus(int statusCode,
                      String sm)

In addition to its normal behaviour this will also deactivate gzip encoding for those responses that MUST NOT have a body.

This is done according to RFC 2616, section 10

Specified by:
setStatus in interface javax.servlet.http.HttpServletResponse
Overrides:
setStatus in class javax.servlet.http.HttpServletResponseWrapper
See Also:
HttpServletResponseWrapper.setStatus(int, String), setStatus(int)

setStatus

public void setStatus(int statusCode)

In addition to its normal behaviour this will also deactivate gzip encoding for those responses that MUST NOT have a body.

This is done according to RFC 2616, section 10

Specified by:
setStatus in interface javax.servlet.http.HttpServletResponse
Overrides:
setStatus in class javax.servlet.http.HttpServletResponseWrapper
See Also:
setStatus(int, String), HttpServletResponseWrapper.setStatus(int)

sendError

public void sendError(int sc,
                      String msg)
               throws IOException
Specified by:
sendError in interface javax.servlet.http.HttpServletResponse
Overrides:
sendError in class javax.servlet.http.HttpServletResponseWrapper
Throws:
IOException

sendError

public void sendError(int sc)
               throws IOException
Specified by:
sendError in interface javax.servlet.http.HttpServletResponse
Overrides:
sendError in class javax.servlet.http.HttpServletResponseWrapper
Throws:
IOException

setContentLength

public void setContentLength(int contentLength)
Prevent content-length being set if page is parseable.

Specified by:
setContentLength in interface javax.servlet.ServletResponse
Overrides:
setContentLength in class javax.servlet.ServletResponseWrapper

flushBuffer

public void flushBuffer()
                 throws IOException
Prevent buffer from being flushed if this is a page being parsed.

Specified by:
flushBuffer in interface javax.servlet.ServletResponse
Overrides:
flushBuffer in class javax.servlet.ServletResponseWrapper
Throws:
IOException

setHeader

public void setHeader(String name,
                      String value)
Prevent content-length being set if page is parseable.

Specified by:
setHeader in interface javax.servlet.http.HttpServletResponse
Overrides:
setHeader in class javax.servlet.http.HttpServletResponseWrapper

addHeader

public void addHeader(String name,
                      String value)
Prevent content-length being set if page is parseable.

Specified by:
addHeader in interface javax.servlet.http.HttpServletResponse
Overrides:
addHeader in class javax.servlet.http.HttpServletResponseWrapper

getOutputStream

public javax.servlet.ServletOutputStream getOutputStream()
Specified by:
getOutputStream in interface javax.servlet.ServletResponse
Overrides:
getOutputStream in class javax.servlet.ServletResponseWrapper

getWriter

public PrintWriter getWriter()
Specified by:
getWriter in interface javax.servlet.ServletResponse
Overrides:
getWriter in class javax.servlet.ServletResponseWrapper

finishResponse

public void finishResponse()


Copyright © 2015 Atlassian. All rights reserved.