Class PageResponseWrapper

java.lang.Object
jakarta.servlet.ServletResponseWrapper
jakarta.servlet.http.HttpServletResponseWrapper
com.opensymphony.module.sitemesh.filter.PageResponseWrapper
All Implemented Interfaces:
jakarta.servlet.http.HttpServletResponse, jakarta.servlet.ServletResponse

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

In order to capture the response, getWriter() returns an instance of PageWriter.

Version:
$Revision: 1.8 $
Author:
Joe Walnes, Scott Farquhar
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private boolean
     
    private Config
     
    private String
     
    private boolean
     
    private String
     
    private Page
     
     
    private PageWriter
     
    private boolean
     
    private jakarta.servlet.http.HttpServletResponse
     
    private boolean
     
    private boolean
     
    private boolean
     

    Fields inherited from interface jakarta.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_MISDIRECTED_REQUEST, 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_PERMANENT_REDIRECT, 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_UNPROCESSABLE_CONTENT, SC_UNSUPPORTED_MEDIA_TYPE, SC_UPGRADE_REQUIRED, SC_USE_PROXY
  • Constructor Summary

    Constructors
    Constructor
    Description
    PageResponseWrapper(jakarta.servlet.http.HttpServletResponse response, Config config)
    Create PageResponse wrapped around an existing HttpServletResponse.
    PageResponseWrapper(jakarta.servlet.http.HttpServletResponse response, Config config, boolean debug)
    Create PageResponse wrapped around an existing HttpServletResponse.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    Flush and close output stream of wrapped response.
    private String
    extractContentTypeValue(String type, int startIndex)
     
    private OutputBuffer
     
    jakarta.servlet.ServletOutputStream
    If the page is parseable, return a wrapped ServletOutputStream, else return the default ServletOutputStream.
    Send data written to PageWriter to PageParser and return a Page instance.
     
    private PageWriter
    Return instance of PageWriter allowing all data written to stream to be stored in temporary buffer.
    If the page is parseable we return an instance of PageWriter allowing all data written to stream to be stored in temporary buffer.
    boolean
     
    boolean
     
    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
    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)
    Prevent 'not modified' (304) HTTP status from being sent if page is parseable (so web-server/browser doesn't cache contents).

    Methods inherited from class jakarta.servlet.http.HttpServletResponseWrapper

    addCookie, addDateHeader, addHeader, addIntHeader, containsHeader, encodeRedirectURL, encodeURL, getHeader, getHeaderNames, getHeaders, getStatus, getTrailerFields, sendRedirect, sendRedirect, sendRedirect, setDateHeader, setIntHeader, setTrailerFields

    Methods inherited from class jakarta.servlet.ServletResponseWrapper

    flushBuffer, getBufferSize, getCharacterEncoding, getContentType, getLocale, getResponse, isCommitted, isWrapperFor, isWrapperFor, reset, resetBuffer, setBufferSize, setCharacterEncoding, 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 jakarta.servlet.ServletResponse

    flushBuffer, getBufferSize, getCharacterEncoding, getContentType, getLocale, isCommitted, reset, resetBuffer, setBufferSize, setCharacterEncoding, setCharacterEncoding, setContentLengthLong, setLocale
  • Field Details

    • pageWriter

      private PageWriter pageWriter
    • pageOutputStream

      private PageOutputStream pageOutputStream
    • usingStream

      private boolean usingStream
    • usingWriter

      private boolean usingWriter
    • config

      private Config config
    • page

      private Page page
    • contentType

      private String contentType
    • encoding

      private String encoding
    • aborted

      private boolean aborted
    • parseablePage

      private boolean parseablePage
    • setContentTypeCalled

      private boolean setContentTypeCalled
    • debug

      private boolean debug
    • response

      private jakarta.servlet.http.HttpServletResponse response
  • Constructor Details

    • PageResponseWrapper

      public PageResponseWrapper(jakarta.servlet.http.HttpServletResponse response, Config config) throws IOException
      Create PageResponse wrapped around an existing HttpServletResponse.
      Throws:
      IOException
    • PageResponseWrapper

      public PageResponseWrapper(jakarta.servlet.http.HttpServletResponse response, Config config, boolean debug) throws IOException
      Create PageResponse wrapped around an existing HttpServletResponse.
      Throws:
      IOException
  • 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 jakarta.servlet.ServletResponse
      Overrides:
      setContentType in class jakarta.servlet.ServletResponseWrapper
    • extractContentTypeValue

      private String extractContentTypeValue(String type, int startIndex)
    • setContentLength

      public void setContentLength(int contentLength)
      Prevent content-length being set if page is parseable.
      Specified by:
      setContentLength in interface jakarta.servlet.ServletResponse
      Overrides:
      setContentLength in class jakarta.servlet.ServletResponseWrapper
    • setHeader

      public void setHeader(String name, String value)
      Prevent content-length being set if page is parseable.
      Specified by:
      setHeader in interface jakarta.servlet.http.HttpServletResponse
      Overrides:
      setHeader in class jakarta.servlet.http.HttpServletResponseWrapper
    • setStatus

      public void setStatus(int sc)
      Prevent 'not modified' (304) HTTP status from being sent if page is parseable (so web-server/browser doesn't cache contents).
      Specified by:
      setStatus in interface jakarta.servlet.http.HttpServletResponse
      Overrides:
      setStatus in class jakarta.servlet.http.HttpServletResponseWrapper
    • getOutputStream

      public jakarta.servlet.ServletOutputStream getOutputStream() throws IOException

      If the page is parseable, return a wrapped ServletOutputStream, else return the default ServletOutputStream.

      This is called internally by Orion 1.5.4, Resin 2.1.0, Tomcat 4.1.12 - naughty!

      Specified by:
      getOutputStream in interface jakarta.servlet.ServletResponse
      Overrides:
      getOutputStream in class jakarta.servlet.ServletResponseWrapper
      Throws:
      IOException
    • getPageOutputStream

      private PageOutputStream getPageOutputStream()
    • getWriter

      public PrintWriter getWriter() throws IOException

      If the page is parseable we return an instance of PageWriter allowing all data written to stream to be stored in temporary buffer.

      Specified by:
      getWriter in interface jakarta.servlet.ServletResponse
      Overrides:
      getWriter in class jakarta.servlet.ServletResponseWrapper
      Throws:
      IOException
    • getPageWriter

      private PageWriter getPageWriter() throws IOException
      Return instance of PageWriter allowing all data written to stream to be stored in temporary buffer.
      Throws:
      IOException
    • closeWriter

      public void closeWriter()
      Flush and close output stream of wrapped response.
    • getBufferStream

      private OutputBuffer getBufferStream()
    • isUsingStream

      public boolean isUsingStream()
    • isUsingWriter

      public boolean isUsingWriter()
    • getPage

      public Page getPage() throws IOException
      Send data written to PageWriter to PageParser and return a Page instance. If the Page is not parseable, null will be returned.
      Throws:
      IOException
    • sendError

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

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

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