Class PageResponseWrapper

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

    public final 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.

    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 aborted  
      private Config config  
      private java.lang.String contentType  
      private boolean debug  
      private java.lang.String encoding  
      private Page page  
      private PageOutputStream pageOutputStream  
      private PageWriter pageWriter  
      private boolean parseablePage  
      private javax.servlet.http.HttpServletResponse response  
      private boolean setContentTypeCalled  
      private boolean usingStream  
      private boolean usingWriter  
      • 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

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

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void closeWriter()
      Flush and close output stream of wrapped response.
      private java.lang.String extractContentTypeValue​(java.lang.String type, int startIndex)  
      private OutputBuffer getBufferStream()  
      javax.servlet.ServletOutputStream getOutputStream()
      If the page is parseable, return a wrapped ServletOutputStream, else return the default ServletOutputStream.
      Page getPage()
      Send data written to PageWriter to PageParser and return a Page instance.
      private PageOutputStream getPageOutputStream()  
      private PageWriter getPageWriter()
      Return instance of PageWriter allowing all data written to stream to be stored in temporary buffer.
      java.io.PrintWriter getWriter()
      If the page is parseable we return an instance of PageWriter allowing all data written to stream to be stored in temporary buffer.
      boolean isUsingStream()  
      boolean isUsingWriter()  
      void sendError​(int sc)  
      void sendError​(int sc, java.lang.String msg)  
      void sendRedirect​(java.lang.String location)  
      void setContentLength​(int contentLength)
      Prevent content-length being set if page is parseable.
      void setContentType​(java.lang.String type)
      Set the content-type of the request and store it so it can be passed to the PageParser.
      void setHeader​(java.lang.String name, java.lang.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 javax.servlet.http.HttpServletResponseWrapper

        addCookie, addDateHeader, addHeader, addIntHeader, containsHeader, encodeRedirectUrl, encodeRedirectURL, encodeUrl, encodeURL, setDateHeader, setIntHeader, setStatus
      • Methods inherited from class javax.servlet.ServletResponseWrapper

        flushBuffer, getBufferSize, getCharacterEncoding, getLocale, getResponse, isCommitted, reset, resetBuffer, setBufferSize, 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, getLocale, isCommitted, reset, resetBuffer, setBufferSize, setLocale
    • Field Detail

      • usingStream

        private boolean usingStream
      • usingWriter

        private boolean usingWriter
      • config

        private Config config
      • page

        private Page page
      • contentType

        private java.lang.String contentType
      • encoding

        private java.lang.String encoding
      • aborted

        private boolean aborted
      • parseablePage

        private boolean parseablePage
      • setContentTypeCalled

        private boolean setContentTypeCalled
      • debug

        private boolean debug
      • response

        private javax.servlet.http.HttpServletResponse response
    • Constructor Detail

      • PageResponseWrapper

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

        public PageResponseWrapper​(javax.servlet.http.HttpServletResponse response,
                                   Config config,
                                   boolean debug)
                            throws java.io.IOException
        Create PageResponse wrapped around an existing HttpServletResponse.
        Throws:
        java.io.IOException
    • Method Detail

      • setContentType

        public void setContentType​(java.lang.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
      • extractContentTypeValue

        private java.lang.String extractContentTypeValue​(java.lang.String type,
                                                         int startIndex)
      • 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
      • setHeader

        public void setHeader​(java.lang.String name,
                              java.lang.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
      • 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 javax.servlet.http.HttpServletResponse
        Overrides:
        setStatus in class javax.servlet.http.HttpServletResponseWrapper
      • getOutputStream

        public javax.servlet.ServletOutputStream getOutputStream()
                                                          throws java.io.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 javax.servlet.ServletResponse
        Overrides:
        getOutputStream in class javax.servlet.ServletResponseWrapper
        Throws:
        java.io.IOException
      • getWriter

        public java.io.PrintWriter getWriter()
                                      throws java.io.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 javax.servlet.ServletResponse
        Overrides:
        getWriter in class javax.servlet.ServletResponseWrapper
        Throws:
        java.io.IOException
      • getPageWriter

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

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

        public boolean isUsingStream()
      • isUsingWriter

        public boolean isUsingWriter()
      • getPage

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

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

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

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