org.sitemesh.webapp.contentfilter
Class HttpServletResponseBuffer

java.lang.Object
  extended by javax.servlet.ServletResponseWrapper
      extended by javax.servlet.http.HttpServletResponseWrapper
          extended by org.sitemesh.webapp.contentfilter.HttpServletResponseBuffer
All Implemented Interfaces:
javax.servlet.http.HttpServletResponse, javax.servlet.ServletResponse

public class HttpServletResponseBuffer
extends javax.servlet.http.HttpServletResponseWrapper

Wraps an HttpServletResponse, allowing the output to be buffered. The passed in Selector, will be used to determine whether to actually do the buffering for the request.

If the response is not buffered, all operations will be delegated back to the original response, unmodified.

If the response is buffered, the content written to getOutputStream() and getWriter() to an underlying buffer instead, available through getBuffer(). Additionally, the 'Content-Length' header will not be passed through to the original response.

Author:
Joe Walnes

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_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
 
Constructor Summary
HttpServletResponseBuffer(javax.servlet.http.HttpServletResponse originalResponse, ResponseMetaData metaData, Selector selector)
           
 
Method Summary
protected  void abortBufferingIfBadStatusCode(int statusCode)
           
 void addDateHeader(String name, long value)
           
 void addHeader(String name, String value)
           
 void addIntHeader(String name, int value)
           
 boolean bufferingWasDisabled()
           
protected  void disableBuffering()
          Disable buffering for this request.
protected  void enableBuffering(String encoding)
          Enable buffering for this request.
 void flushBuffer()
           
 CharBuffer getBuffer()
          Returns the underlying buffered content.
 javax.servlet.ServletOutputStream getOutputStream()
          If buffering has been enabled for this request, it will return a stream that writes to the buffer, otherwise it will return the original stream.
 PrintWriter getWriter()
          If buffering has been enabled for this request, it will return a writer that writes to the buffer, otherwise it will return the original writer.
 boolean isBufferStreamBased()
          Whether the underlying buffer was written to using getOutputStream() (as opposed to getWriter().
protected  void preCommit()
          Hook that is called just before the response is committed.
 void sendError(int statusCode)
           
 void sendError(int statusCode, String reason)
           
 void sendRedirect(String location)
           
 void setContentLength(int contentLength)
           
 void setContentType(String type)
          Enable/disable buffering for this request based on the result of Selector.shouldBufferForContentType(String, String, String).
 void setDateHeader(String name, long value)
           
 void setHeader(String name, String value)
           
 void setIntHeader(String name, int value)
           
 void setStatus(int statusCode)
           
 void setStatus(int statusCode, String reason)
           
 
Methods inherited from class javax.servlet.http.HttpServletResponseWrapper
addCookie, containsHeader, encodeRedirectUrl, encodeRedirectURL, encodeUrl, encodeURL
 
Methods inherited from class javax.servlet.ServletResponseWrapper
getBufferSize, getCharacterEncoding, getContentType, getLocale, getResponse, isCommitted, reset, resetBuffer, setBufferSize, setCharacterEncoding, 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, getContentType, getLocale, isCommitted, reset, resetBuffer, setBufferSize, setCharacterEncoding, setLocale
 

Constructor Detail

HttpServletResponseBuffer

public HttpServletResponseBuffer(javax.servlet.http.HttpServletResponse originalResponse,
                                 ResponseMetaData metaData,
                                 Selector selector)
Method Detail

getOutputStream

public javax.servlet.ServletOutputStream getOutputStream()
If buffering has been enabled for this request, it will return a stream that writes to the buffer, otherwise it will return the original stream.

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

getWriter

public PrintWriter getWriter()
If buffering has been enabled for this request, it will return a writer that writes to the buffer, otherwise it will return the original writer.

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

getBuffer

public CharBuffer getBuffer()
                     throws IOException
Returns the underlying buffered content. If buffering was not enabled, null is returned.

Throws:
IOException

isBufferStreamBased

public boolean isBufferStreamBased()
Whether the underlying buffer was written to using getOutputStream() (as opposed to getWriter(). If buffering was not enabled, false will be returned.


enableBuffering

protected void enableBuffering(String encoding)
Enable buffering for this request. Subsequent content will be written to the buffer instead of the original response.


disableBuffering

protected void disableBuffering()
Disable buffering for this request. Subsequent content will be written to the original response.


bufferingWasDisabled

public boolean bufferingWasDisabled()

preCommit

protected void preCommit()
Hook that is called just before the response is committed. Last chance to modify headers.


setContentType

public void setContentType(String type)
Enable/disable buffering for this request based on the result of Selector.shouldBufferForContentType(String, String, String).

Specified by:
setContentType in interface javax.servlet.ServletResponse
Overrides:
setContentType 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

flushBuffer

public void flushBuffer()
                 throws IOException
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)
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)
Specified by:
addHeader in interface javax.servlet.http.HttpServletResponse
Overrides:
addHeader in class javax.servlet.http.HttpServletResponseWrapper

setIntHeader

public void setIntHeader(String name,
                         int value)
Specified by:
setIntHeader in interface javax.servlet.http.HttpServletResponse
Overrides:
setIntHeader in class javax.servlet.http.HttpServletResponseWrapper

addIntHeader

public void addIntHeader(String name,
                         int value)
Specified by:
addIntHeader in interface javax.servlet.http.HttpServletResponse
Overrides:
addIntHeader in class javax.servlet.http.HttpServletResponseWrapper

setDateHeader

public void setDateHeader(String name,
                          long value)
Specified by:
setDateHeader in interface javax.servlet.http.HttpServletResponse
Overrides:
setDateHeader in class javax.servlet.http.HttpServletResponseWrapper

addDateHeader

public void addDateHeader(String name,
                          long value)
Specified by:
addDateHeader in interface javax.servlet.http.HttpServletResponse
Overrides:
addDateHeader in class javax.servlet.http.HttpServletResponseWrapper

setStatus

public void setStatus(int statusCode)
Specified by:
setStatus in interface javax.servlet.http.HttpServletResponse
Overrides:
setStatus in class javax.servlet.http.HttpServletResponseWrapper

setStatus

public void setStatus(int statusCode,
                      String reason)
Specified by:
setStatus in interface javax.servlet.http.HttpServletResponse
Overrides:
setStatus in class javax.servlet.http.HttpServletResponseWrapper

sendError

public void sendError(int statusCode)
               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 statusCode,
                      String reason)
               throws IOException
Specified by:
sendError in interface javax.servlet.http.HttpServletResponse
Overrides:
sendError in class javax.servlet.http.HttpServletResponseWrapper
Throws:
IOException

sendRedirect

public void sendRedirect(String location)
                  throws IOException
Specified by:
sendRedirect in interface javax.servlet.http.HttpServletResponse
Overrides:
sendRedirect in class javax.servlet.http.HttpServletResponseWrapper
Throws:
IOException

abortBufferingIfBadStatusCode

protected void abortBufferingIfBadStatusCode(int statusCode)


Copyright © 2011. All Rights Reserved.