Class CmsFlexResponse

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

    public class CmsFlexResponse
    extends javax.servlet.http.HttpServletResponseWrapper
    Wrapper class for a HttpServletResponse, required in order to process JSPs from the OpenCms VFS.

    This class wraps the standard HttpServletResponse so that it's output can be delivered to the CmsFlexCache.

    Since:
    6.0.0
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static char FLEX_CACHE_DELIMITER
      The cache delimiter char.
      protected static org.apache.commons.logging.Log LOG
      The log object for this class.
      static java.lang.String PREFIX_PERMANENT_REDIRECT
      Prefix for permanent redirect targets.
      static java.lang.String SET_HEADER
      Static string to indicate a header is "set" in the header maps.
      • 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
      CmsFlexResponse​(javax.servlet.http.HttpServletResponse res, CmsFlexController controller)
      Constructor for the CmsFlexResponse, this variation one is usually used to wrap responses for further include calls in OpenCms.
      CmsFlexResponse​(javax.servlet.http.HttpServletResponse res, CmsFlexController controller, boolean streaming, boolean isTopElement)
      Constructor for the CmsFlexResponse, this variation is usually used for the "top" response.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void addCookie​(javax.servlet.http.Cookie cookie)
      Method overloaded from the standard HttpServletRequest API.
      void addDateHeader​(java.lang.String name, long date)
      Method overload from the standard HttpServletRequest API.
      void addHeader​(java.lang.String name, java.lang.String value)
      Method overload from the standard HttpServletRequest API.
      void addIntHeader​(java.lang.String name, int value)
      Method overload from the standard HttpServletRequest API.
      void addToIncludeList​(java.lang.String target, java.util.Map<java.lang.String,​java.lang.String[]> parameterMap, java.util.Map<java.lang.String,​java.lang.Object> attributeMap)
      Adds an inclusion target to the list of include results.
      void flushBuffer()  
      java.lang.String getEncoding()
      Returns the value of the encoding used for this response.
      java.util.Map<java.lang.String,​java.util.List<java.lang.String>> getHeaders()
      Provides access to the header cache of the top wrapper.
      javax.servlet.ServletOutputStream getOutputStream()
      Method overload from the standard HttpServletRequest API.
      java.io.PrintWriter getWriter()
      Method overload from the standard HttpServletRequest API.
      byte[] getWriterBytes()
      Returns the bytes that have been written on the current writers output stream.
      boolean isSuspended()
      This flag indicates if the response is suspended or not.
      boolean isTopElement()
      Returns true if this response has been constructed for the top level element of this request, false if it was constructed for an included sub-element.
      static void processHeaders​(java.util.Map<java.lang.String,​java.util.List<java.lang.String>> headers, javax.servlet.http.HttpServletResponse res)
      Process the headers stored in the provided map and add them to the response.
      void sendRedirect​(java.lang.String location)
      Method overload from the standard HttpServletRequest API.
      void sendRedirect​(java.lang.String location, boolean permanent)
      Internal redirect method used to handle both temporary and permanent redirects.
      void setContentType​(java.lang.String type)
      Method overload from the standard HttpServletRequest API.
      void setDateHeader​(java.lang.String name, long date)
      Method overload from the standard HttpServletRequest API.
      void setHeader​(java.lang.String name, java.lang.String value)
      Method overload from the standard HttpServletRequest API.
      void setIntHeader​(java.lang.String name, int value)
      Method overload from the standard HttpServletRequest API.
      void setOnlyBuffering​(boolean value)
      Sets buffering status of the response.
      • Methods inherited from class javax.servlet.http.HttpServletResponseWrapper

        containsHeader, encodeRedirectUrl, encodeRedirectURL, encodeUrl, encodeURL, getHeader, getHeaderNames, getHeaders, getStatus, sendError, sendError, setStatus, setStatus
      • Methods inherited from class javax.servlet.ServletResponseWrapper

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

      • CmsFlexResponse

        public CmsFlexResponse​(javax.servlet.http.HttpServletResponse res,
                               CmsFlexController controller)
        Constructor for the CmsFlexResponse, this variation one is usually used to wrap responses for further include calls in OpenCms.

        Parameters:
        res - the CmsFlexResponse to wrap
        controller - the controller to use
      • CmsFlexResponse

        public CmsFlexResponse​(javax.servlet.http.HttpServletResponse res,
                               CmsFlexController controller,
                               boolean streaming,
                               boolean isTopElement)
        Constructor for the CmsFlexResponse, this variation is usually used for the "top" response.

        Parameters:
        res - the HttpServletResponse to wrap
        controller - the controller to use
        streaming - indicates if streaming should be enabled or not
        isTopElement - indicates if this is the top element of an include cascade
    • Method Detail

      • processHeaders

        public static void processHeaders​(java.util.Map<java.lang.String,​java.util.List<java.lang.String>> headers,
                                          javax.servlet.http.HttpServletResponse res)
        Process the headers stored in the provided map and add them to the response.

        Parameters:
        headers - the headers to add
        res - the response to add the headers to
      • addCookie

        public void addCookie​(javax.servlet.http.Cookie cookie)
        Method overloaded from the standard HttpServletRequest API.

        Cookies must be set directly as a header, otherwise they might not be set in the super class.

        Specified by:
        addCookie in interface javax.servlet.http.HttpServletResponse
        Overrides:
        addCookie in class javax.servlet.http.HttpServletResponseWrapper
        See Also:
        HttpServletResponseWrapper.addCookie(javax.servlet.http.Cookie)
      • addDateHeader

        public void addDateHeader​(java.lang.String name,
                                  long date)
        Method overload from the standard HttpServletRequest API.

        Specified by:
        addDateHeader in interface javax.servlet.http.HttpServletResponse
        Overrides:
        addDateHeader in class javax.servlet.http.HttpServletResponseWrapper
        See Also:
        HttpServletResponse.addDateHeader(java.lang.String, long)
      • addHeader

        public void addHeader​(java.lang.String name,
                              java.lang.String value)
        Method overload from the standard HttpServletRequest API.

        Specified by:
        addHeader in interface javax.servlet.http.HttpServletResponse
        Overrides:
        addHeader in class javax.servlet.http.HttpServletResponseWrapper
        See Also:
        HttpServletResponse.addHeader(java.lang.String, java.lang.String)
      • addIntHeader

        public void addIntHeader​(java.lang.String name,
                                 int value)
        Method overload from the standard HttpServletRequest API.

        Specified by:
        addIntHeader in interface javax.servlet.http.HttpServletResponse
        Overrides:
        addIntHeader in class javax.servlet.http.HttpServletResponseWrapper
        See Also:
        HttpServletResponse.addIntHeader(java.lang.String, int)
      • addToIncludeList

        public void addToIncludeList​(java.lang.String target,
                                     java.util.Map<java.lang.String,​java.lang.String[]> parameterMap,
                                     java.util.Map<java.lang.String,​java.lang.Object> attributeMap)
        Adds an inclusion target to the list of include results.

        Should be used only in inclusion-scenarios like the JSP cms:include tag processing.

        Parameters:
        target - the include target name to add
        parameterMap - the map of parameters given with the include command
        attributeMap - the map of attributes given with the include command
      • flushBuffer

        public void flushBuffer()
                         throws java.io.IOException
        Specified by:
        flushBuffer in interface javax.servlet.ServletResponse
        Overrides:
        flushBuffer in class javax.servlet.ServletResponseWrapper
        Throws:
        java.io.IOException
        See Also:
        ServletResponseWrapper.flushBuffer()
      • getEncoding

        public java.lang.String getEncoding()
        Returns the value of the encoding used for this response.

        Returns:
        the value of the encoding used for this response
      • getHeaders

        public java.util.Map<java.lang.String,​java.util.List<java.lang.String>> getHeaders()
        Provides access to the header cache of the top wrapper.

        Returns:
        the Map of cached headers
      • getOutputStream

        public javax.servlet.ServletOutputStream getOutputStream()
                                                          throws java.io.IOException
        Method overload from the standard HttpServletRequest API.

        Specified by:
        getOutputStream in interface javax.servlet.ServletResponse
        Overrides:
        getOutputStream in class javax.servlet.ServletResponseWrapper
        Throws:
        java.io.IOException
        See Also:
        ServletResponse.getOutputStream()
      • getWriter

        public java.io.PrintWriter getWriter()
                                      throws java.io.IOException
        Method overload from the standard HttpServletRequest API.

        Specified by:
        getWriter in interface javax.servlet.ServletResponse
        Overrides:
        getWriter in class javax.servlet.ServletResponseWrapper
        Throws:
        java.io.IOException
        See Also:
        ServletResponse.getWriter()
      • getWriterBytes

        public byte[] getWriterBytes()
        Returns the bytes that have been written on the current writers output stream.

        Returns:
        the bytes that have been written on the current writers output stream
      • isSuspended

        public boolean isSuspended()
        This flag indicates if the response is suspended or not.

        A suspended response must not write further output to any stream or process a cache entry for itself.

        Currently, a response is only suspended if it is redirected.

        Returns:
        true if the response is suspended, false otherwise
      • isTopElement

        public boolean isTopElement()
        Returns true if this response has been constructed for the top level element of this request, false if it was constructed for an included sub-element.

        Returns:
        true if this response has been constructed for the top level element of this request, false if it was constructed for an included sub-element.
      • sendRedirect

        public void sendRedirect​(java.lang.String location)
                          throws java.io.IOException
        Method overload from the standard HttpServletRequest API.

        Specified by:
        sendRedirect in interface javax.servlet.http.HttpServletResponse
        Overrides:
        sendRedirect in class javax.servlet.http.HttpServletResponseWrapper
        Throws:
        java.lang.IllegalArgumentException - In case of a malformed location string
        java.io.IOException
        See Also:
        HttpServletResponse.sendRedirect(java.lang.String)
      • sendRedirect

        public void sendRedirect​(java.lang.String location,
                                 boolean permanent)
                          throws java.io.IOException
        Internal redirect method used to handle both temporary and permanent redirects.

        Parameters:
        location - the redirect target
        permanent - true for a permanent redirect, false for a temporary one
        Throws:
        java.io.IOException - if IO operations on the response fail
      • setContentType

        public void setContentType​(java.lang.String type)
        Method overload from the standard HttpServletRequest API.

        Specified by:
        setContentType in interface javax.servlet.ServletResponse
        Overrides:
        setContentType in class javax.servlet.ServletResponseWrapper
        See Also:
        ServletResponse.setContentType(java.lang.String)
      • setDateHeader

        public void setDateHeader​(java.lang.String name,
                                  long date)
        Method overload from the standard HttpServletRequest API.

        Specified by:
        setDateHeader in interface javax.servlet.http.HttpServletResponse
        Overrides:
        setDateHeader in class javax.servlet.http.HttpServletResponseWrapper
        See Also:
        HttpServletResponse.setDateHeader(java.lang.String, long)
      • setHeader

        public void setHeader​(java.lang.String name,
                              java.lang.String value)
        Method overload from the standard HttpServletRequest API.

        Specified by:
        setHeader in interface javax.servlet.http.HttpServletResponse
        Overrides:
        setHeader in class javax.servlet.http.HttpServletResponseWrapper
        See Also:
        HttpServletResponse.setHeader(java.lang.String, java.lang.String)
      • setIntHeader

        public void setIntHeader​(java.lang.String name,
                                 int value)
        Method overload from the standard HttpServletRequest API.

        Specified by:
        setIntHeader in interface javax.servlet.http.HttpServletResponse
        Overrides:
        setIntHeader in class javax.servlet.http.HttpServletResponseWrapper
        See Also:
        HttpServletResponse.setIntHeader(java.lang.String, int)
      • setOnlyBuffering

        public void setOnlyBuffering​(boolean value)
        Sets buffering status of the response.

        This must be done before the first output is written. Buffering is needed to process elements that can not be written directly to the output stream because their sub - elements have to be processed separately. Which is so far true only for JSP pages.

        If buffering is on, nothing is written to the output stream even if streaming for this response is enabled.

        Parameters:
        value - the value to set