Package com.opensymphony.module.sitemesh.filter

# Class PageResponseWrapper

java.lang.Object
javax.servlet.ServletResponseWrapper
javax.servlet.http.HttpServletResponseWrapper
com.opensymphony.module.sitemesh.filter.PageResponseWrapper

All Implemented Interfaces:
  `javax.servlet.http.HttpServletResponse`, `javax.servlet.ServletResponse`

public class PageResponseWrapper 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.

Version:
  $Revision: 1.17 $
Author:
  Joe Walnes, Scott Farquhar

## Field Summary

Fields
Modifier and Type
Field
Description
`private boolean`
`aborted`
`private Buffer`
`buffer`
`private boolean`
`parseablePage`
`private final PageParserSelector`
`parserSelector`
`private final RoutablePrintWriter`
`routablePrintWriter`
`private final RoutableServletOutputStream`
`routableServletOutputStream`

### 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
`PageResponseWrapper(javax.servlet.http.HttpServletResponse response, PageParserSelector parserSelector)`

## Method Summary

Modifier and Type
Method
Description
`void`
`activateSiteMesh(String contentType, String encoding)`
`void`
`addHeader(String name, String value)`
Prevent content-length being set if page is parseable.
`private void`
`deactivateSiteMesh()`
`void`
`flushBuffer()`
Prevent buffer from being flushed if this is a page being parsed.
`char[]`
`getContents()`
`javax.servlet.ServletOutputStream`
`getOutputStream()`
`Page`
`getPage()`
`PrintWriter`
`getWriter()`
`boolean`
`isUsingStream()`
`void`
`sendError(int sc)`
`void`
`sendError(int sc, String msg)`
`void`
`sendRedirect(String location)`
`void`
`setContentLength(int contentLength)`
Prevent content-length being set if page is parseable.
`void`
`setContentType(String type)`
Set the content-type of the request and store it so it can be passed to the `PageParser`.
`void`
`setHeader(String name, String value)`
Prevent content-length being set if page is parseable.
`void`
`setStatus(int sc)`
If 'not modified' (304) HTTP status is being sent - then abort parsing, as there shouldn't be any body

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

`addCookie, addDateHeader, addIntHeader, containsHeader, encodeRedirectUrl, encodeRedirectURL, encodeUrl, encodeURL, getHeader, getHeaderNames, getHeaders, getStatus, getTrailerFields, setDateHeader, setIntHeader, setStatus, setTrailerFields`

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

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

## Field Details

### routablePrintWriter

private final RoutablePrintWriter routablePrintWriter

### routableServletOutputStream

private final RoutableServletOutputStream routableServletOutputStream

### parserSelector

private final PageParserSelector parserSelector

### buffer

private Buffer buffer

### aborted

private boolean aborted

### parseablePage

private boolean parseablePage

## Constructor Details

### PageResponseWrapper

public PageResponseWrapper(javax.servlet.http.HttpServletResponse response, PageParserSelector parserSelector)

## Method Details

### setContentType

public void setContentType(String type)
Set the content-type of the request and store it so it can be passed to the `PageParser`.

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

### activateSiteMesh

public void activateSiteMesh(String contentType, String encoding)

### deactivateSiteMesh

private void deactivateSiteMesh()

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

### setStatus

public void setStatus(int sc)
If 'not modified' (304) HTTP status is being sent - then abort parsing, as there shouldn't be any body

Specified by:
  `setStatus` in interface `javax.servlet.http.HttpServletResponse`
Overrides:
  `setStatus` 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`

### getPage

public Page getPage() throws IOException

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`

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

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

### isUsingStream

public boolean isUsingStream()

### getContents

public char[] getContents() throws IOException

Throws:
  `IOException`