org.apache.jetspeed.resource
Class BufferedHttpServletResponse

java.lang.Object
  extended by javax.servlet.ServletResponseWrapper
      extended by javax.servlet.http.HttpServletResponseWrapper
          extended by org.apache.jetspeed.resource.BufferedHttpServletResponse
All Implemented Interfaces:
javax.servlet.http.HttpServletResponse, javax.servlet.ServletResponse

public class BufferedHttpServletResponse
extends javax.servlet.http.HttpServletResponseWrapper

BufferedHttpServletResponse fully captures all HttpServletResponse interactions to be flushed out later. This wrapper is specifically written to allow included servlets to set headers, cookies, encoding etc. which isn't allowed by the servlet specification on included responses.

Call flush(HttpServletResponse) after the include has returned to flush out the buffered data, headers and state.

Note: the only method not fully supported by this buffered version is getCharacterEncoding(). Setting characterEncoding through setContentType or setLocale on this class won't be reflected in the return value from getCharacterEncoding(), and calling getWriter() won't set it either although calling setLocale, setContentType or setCharacterEncoding (servlet api 2.4+) after that will be ignored. But, when this object is flused to a (real) response, the contentType, locale and/or characterEncoding recorded will be set on the target response then.

Version:
$Id: BufferedHttpServletResponse.java 544024 2007-06-04 00:59:09Z ate $
Author:
Ate Douma

Nested Class Summary
private static class BufferedHttpServletResponse.CharArrayWriterBuffer
           
 
Field Summary
private  ByteArrayOutputStream byteOutputBuffer
           
private  String characterEncoding
           
private  BufferedHttpServletResponse.CharArrayWriterBuffer charOutputBuffer
           
private  boolean closed
           
private  boolean committed
           
private  int contentLength
           
private  String contentType
           
private  ArrayList cookies
           
private  int errorCode
           
private  String errorMessage
           
private  boolean flushed
           
private  boolean hasError
           
private  boolean hasStatus
           
private  HashMap headers
           
private  Locale locale
           
private  javax.servlet.ServletOutputStream outputStream
           
private  PrintWriter printWriter
           
private  String redirectLocation
           
private  int statusCode
           
 
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
BufferedHttpServletResponse(javax.servlet.http.HttpServletResponse response)
           
 
Method Summary
 void addCookie(javax.servlet.http.Cookie cookie)
           
 void addDateHeader(String name, long date)
           
 void addHeader(String name, String value)
           
 void addIntHeader(String name, int value)
           
 boolean containsHeader(String name)
           
private  void failIfCommitted()
           
 void flush(javax.servlet.http.HttpServletResponse response)
           
 void flushBuffer()
           
 int getBufferSize()
           
 String getCharacterEncoding()
           
private  ArrayList getHeaderList(String name, boolean create)
           
 Locale getLocale()
           
 javax.servlet.ServletOutputStream getOutputStream()
           
 PrintWriter getWriter()
           
 boolean isCommitted()
           
 void reset()
           
 void resetBuffer()
           
 void sendError(int errorCode)
           
 void sendError(int errorCode, String errorMessage)
           
 void sendRedirect(String redirectLocation)
           
 void setBufferSize(int size)
           
 void setCharacterEncoding(String charset)
           
 void setContentLength(int len)
           
 void setContentType(String type)
           
 void setDateHeader(String name, long date)
           
 void setHeader(String name, String value)
           
 void setIntHeader(String name, int value)
           
 void setLocale(Locale locale)
           
 void setStatus(int statusCode)
           
 void setStatus(int statusCode, String message)
           
 
Methods inherited from class javax.servlet.http.HttpServletResponseWrapper
encodeRedirectUrl, encodeRedirectURL, encodeUrl, encodeURL
 
Methods inherited from class javax.servlet.ServletResponseWrapper
getResponse, setResponse
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

byteOutputBuffer

private ByteArrayOutputStream byteOutputBuffer

charOutputBuffer

private BufferedHttpServletResponse.CharArrayWriterBuffer charOutputBuffer

outputStream

private javax.servlet.ServletOutputStream outputStream

printWriter

private PrintWriter printWriter

headers

private HashMap headers

cookies

private ArrayList cookies

errorCode

private int errorCode

statusCode

private int statusCode

errorMessage

private String errorMessage

redirectLocation

private String redirectLocation

committed

private boolean committed

hasStatus

private boolean hasStatus

hasError

private boolean hasError

locale

private Locale locale

closed

private boolean closed

characterEncoding

private String characterEncoding

contentLength

private int contentLength

contentType

private String contentType

flushed

private boolean flushed
Constructor Detail

BufferedHttpServletResponse

public BufferedHttpServletResponse(javax.servlet.http.HttpServletResponse response)
Method Detail

flush

public void flush(javax.servlet.http.HttpServletResponse response)
           throws IOException
Throws:
IOException

getHeaderList

private ArrayList getHeaderList(String name,
                                boolean create)

failIfCommitted

private void failIfCommitted()

addCookie

public void addCookie(javax.servlet.http.Cookie cookie)
Specified by:
addCookie in interface javax.servlet.http.HttpServletResponse
Overrides:
addCookie in class javax.servlet.http.HttpServletResponseWrapper

addDateHeader

public void addDateHeader(String name,
                          long date)
Specified by:
addDateHeader in interface javax.servlet.http.HttpServletResponse
Overrides:
addDateHeader 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

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

containsHeader

public boolean containsHeader(String name)
Specified by:
containsHeader in interface javax.servlet.http.HttpServletResponse
Overrides:
containsHeader in class javax.servlet.http.HttpServletResponseWrapper

sendError

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

setDateHeader

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

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

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

setStatus

public void setStatus(int statusCode,
                      String message)
Specified by:
setStatus in interface javax.servlet.http.HttpServletResponse
Overrides:
setStatus 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

flushBuffer

public void flushBuffer()
                 throws IOException
Specified by:
flushBuffer in interface javax.servlet.ServletResponse
Overrides:
flushBuffer in class javax.servlet.ServletResponseWrapper
Throws:
IOException

getBufferSize

public int getBufferSize()
Specified by:
getBufferSize in interface javax.servlet.ServletResponse
Overrides:
getBufferSize in class javax.servlet.ServletResponseWrapper

getCharacterEncoding

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

getLocale

public Locale getLocale()
Specified by:
getLocale in interface javax.servlet.ServletResponse
Overrides:
getLocale in class javax.servlet.ServletResponseWrapper

getOutputStream

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

getWriter

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

isCommitted

public boolean isCommitted()
Specified by:
isCommitted in interface javax.servlet.ServletResponse
Overrides:
isCommitted in class javax.servlet.ServletResponseWrapper

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

setBufferSize

public void setBufferSize(int size)
Specified by:
setBufferSize in interface javax.servlet.ServletResponse
Overrides:
setBufferSize in class javax.servlet.ServletResponseWrapper

setCharacterEncoding

public void setCharacterEncoding(String charset)

setContentLength

public void setContentLength(int len)
Specified by:
setContentLength in interface javax.servlet.ServletResponse
Overrides:
setContentLength in class javax.servlet.ServletResponseWrapper

setContentType

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

setLocale

public void setLocale(Locale locale)
Specified by:
setLocale in interface javax.servlet.ServletResponse
Overrides:
setLocale in class javax.servlet.ServletResponseWrapper


Copyright © 1999-2007 Apache Software Foundation. All Rights Reserved.