Package org.apache.catalina.ssi

## Class ResponseIncludeWrapper

- java.lang.Object
- - javax.servlet.ServletResponseWrapper
  - - javax.servlet.http.HttpServletResponseWrapper
    - - org.apache.catalina.ssi.ResponseIncludeWrapper

- All Implemented Interfaces:
    `HttpServletResponse`, `ServletResponse`

      public class ResponseIncludeWrapper
      extends HttpServletResponseWrapper

  An HttpServletResponseWrapper, used from `SSIServletExternalResolver`
  Author:
    Bip Thelin, David Becker

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `protected ServletOutputStream` | `captureServletOutputStream` | Our ServletOutputStream
    `protected long` | `lastModified` |
    `protected java.io.PrintWriter` | `printWriter` |
    `protected ServletOutputStream` | `servletOutputStream` |

    - ### 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

    Constructors
    Constructor | Description
    --- | ---
    `ResponseIncludeWrapper​(HttpServletResponse response, ServletOutputStream captureServletOutputStream)` | Initialize our wrapper with the current HttpServletResponse and ServletOutputStream.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `addDateHeader​(java.lang.String name, long value)` | The default behavior of this method is to call addDateHeader(String name, long date) on the wrapped response object.
    `void` | `addHeader​(java.lang.String name, java.lang.String value)` | The default behavior of this method is to return addHeader(String name, String value) on the wrapped response object.
    `void` | `flushOutputStreamOrWriter()` | Flush the servletOutputStream or printWriter ( only one will be non-null ) This must be called after a requestDispatcher.include, since we can't assume that the included servlet flushed its stream.
    `long` | `getLastModified()` | Returns the value of the `last-modified` header field.
    `ServletOutputStream` | `getOutputStream()` | Return a OutputStream, throws and exception if a printwriter already been returned.
    `java.io.PrintWriter` | `getWriter()` | Return a printwriter, throws and exception if a OutputStream already been returned.
    `void` | `setDateHeader​(java.lang.String name, long value)` | The default behavior of this method is to call setDateHeader(String name, long date) on the wrapped response object.
    `void` | `setHeader​(java.lang.String name, java.lang.String value)` | The default behavior of this method is to return setHeader(String name, String value) on the wrapped response object.

    - ### Methods inherited from class javax.servlet.http.HttpServletResponseWrapper

      `addCookie, addIntHeader, containsHeader, encodeRedirectUrl, encodeRedirectURL, encodeUrl, encodeURL, getHeader, getHeaderNames, getHeaders, getStatus, sendError, sendError, sendRedirect, setIntHeader, setStatus, setStatus`

    - ### Methods inherited from class javax.servlet.ServletResponseWrapper

      `flushBuffer, getBufferSize, getCharacterEncoding, getContentType, getLocale, getResponse, isCommitted, isWrapperFor, isWrapperFor, reset, resetBuffer, setBufferSize, setCharacterEncoding, setContentLength, setContentLengthLong, setContentType, 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

      `flushBuffer, getBufferSize, getCharacterEncoding, getContentType, getLocale, isCommitted, reset, resetBuffer, setBufferSize, setCharacterEncoding, setContentLength, setContentLengthLong, setContentType, setLocale`

- - ### Field Detail

    - #### lastModified

          protected long lastModified

    - #### captureServletOutputStream

          protected final ServletOutputStream captureServletOutputStream

      Our ServletOutputStream

    - #### servletOutputStream

          protected ServletOutputStream servletOutputStream

    - #### printWriter

          protected java.io.PrintWriter printWriter

  - ### Constructor Detail

    - #### ResponseIncludeWrapper

          public ResponseIncludeWrapper​(HttpServletResponse response,
                                        ServletOutputStream captureServletOutputStream)

      Initialize our wrapper with the current HttpServletResponse and ServletOutputStream.
      Parameters:
        `response` - The response to use
        `captureServletOutputStream` - The ServletOutputStream to use

  - ### Method Detail

    - #### flushOutputStreamOrWriter

          public void flushOutputStreamOrWriter()
                                         throws java.io.IOException

      Flush the servletOutputStream or printWriter ( only one will be non-null ) This must be called after a requestDispatcher.include, since we can't assume that the included servlet flushed its stream.
      Throws:
        `java.io.IOException` - an IO error occurred

    - #### getWriter

          public java.io.PrintWriter getWriter()
                                        throws java.io.IOException

      Return a printwriter, throws and exception if a OutputStream already been returned.
      Specified by:
        `getWriter` in interface `ServletResponse`
      Overrides:
        `getWriter` in class `ServletResponseWrapper`
      Returns:
        a PrintWriter object
      Throws:
        `java.io.IOException` - if the outputstream already been called
      See Also:
        `ServletResponse.getOutputStream()`, `ServletResponse.setCharacterEncoding(java.lang.String)`

    - #### getOutputStream

          public ServletOutputStream getOutputStream()
                                              throws java.io.IOException

      Return a OutputStream, throws and exception if a printwriter already been returned.
      Specified by:
        `getOutputStream` in interface `ServletResponse`
      Overrides:
        `getOutputStream` in class `ServletResponseWrapper`
      Returns:
        a OutputStream object
      Throws:
        `java.io.IOException` - if the printwriter already been called
      See Also:
        `ServletResponse.getWriter()`

    - #### getLastModified

          public long getLastModified()

      Returns the value of the `last-modified` header field. The result is the number of milliseconds since January 1, 1970 GMT.
      Returns:
        the date the resource referenced by this `ResponseIncludeWrapper` was last modified, or -1 if not known.

    - #### addDateHeader

          public void addDateHeader​(java.lang.String name,
                                    long value)

      Description copied from class: `javax.servlet.http.HttpServletResponseWrapper`
      The default behavior of this method is to call addDateHeader(String name, long date) on the wrapped response object.
      Specified by:
        `addDateHeader` in interface `HttpServletResponse`
      Overrides:
        `addDateHeader` in class `HttpServletResponseWrapper`
      Parameters:
        `name` - the name of the header to set
        `value` - the additional date value
      See Also:
        `HttpServletResponse.setDateHeader(java.lang.String, long)`

    - #### addHeader

          public void addHeader​(java.lang.String name,
                                java.lang.String value)

      Description copied from class: `javax.servlet.http.HttpServletResponseWrapper`
      The default behavior of this method is to return addHeader(String name, String value) on the wrapped response object.
      Specified by:
        `addHeader` in interface `HttpServletResponse`
      Overrides:
        `addHeader` in class `HttpServletResponseWrapper`
      Parameters:
        `name` - the name of the header
        `value` - the additional header value If it contains octet string, it should be encoded according to RFC 2047 (http://www.ietf.org/rfc/rfc2047.txt)
      See Also:
        `HttpServletResponse.setHeader(java.lang.String, java.lang.String)`

    - #### setDateHeader

          public void setDateHeader​(java.lang.String name,
                                    long value)

      Description copied from class: `javax.servlet.http.HttpServletResponseWrapper`
      The default behavior of this method is to call setDateHeader(String name, long date) on the wrapped response object.
      Specified by:
        `setDateHeader` in interface `HttpServletResponse`
      Overrides:
        `setDateHeader` in class `HttpServletResponseWrapper`
      Parameters:
        `name` - the name of the header to set
        `value` - the assigned date value
      See Also:
        `HttpServletResponse.containsHeader(java.lang.String)`, `HttpServletResponse.addDateHeader(java.lang.String, long)`

    - #### setHeader

          public void setHeader​(java.lang.String name,
                                java.lang.String value)

      Description copied from class: `javax.servlet.http.HttpServletResponseWrapper`
      The default behavior of this method is to return setHeader(String name, String value) on the wrapped response object.
      Specified by:
        `setHeader` in interface `HttpServletResponse`
      Overrides:
        `setHeader` in class `HttpServletResponseWrapper`
      Parameters:
        `name` - the name of the header
        `value` - the header value If it contains octet string, it should be encoded according to RFC 2047 (http://www.ietf.org/rfc/rfc2047.txt)
      See Also:
        `HttpServletResponse.containsHeader(java.lang.String)`, `HttpServletResponse.addHeader(java.lang.String, java.lang.String)`