Class CmsFlexRequest

  • All Implemented Interfaces:
    javax.servlet.http.HttpServletRequest, javax.servlet.ServletRequest

    public class CmsFlexRequest
    extends javax.servlet.http.HttpServletRequestWrapper
    Wrapper class for a HttpServletRequest.

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

    Since:
    6.0.0
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static java.lang.String PARAMETER_FLEX
      Request parameter for FlexCache commands.
      • Fields inherited from interface javax.servlet.http.HttpServletRequest

        BASIC_AUTH, CLIENT_CERT_AUTH, DIGEST_AUTH, FORM_AUTH
    • Constructor Summary

      Constructors 
      Constructor Description
      CmsFlexRequest​(javax.servlet.http.HttpServletRequest req, CmsFlexController controller)
      Creates a new CmsFlexRequest wrapper which is most likely the "Top" request wrapper, i.e.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      java.util.Map<java.lang.String,​java.lang.Object> addAttributeMap​(java.util.Map<java.lang.String,​java.lang.Object> map)
      Adds the specified Map to the attributes of the request, added attributes will not overwrite existing attributes in the request.
      java.util.Map<java.lang.String,​java.lang.String[]> addParameterMap​(java.util.Map<java.lang.String,​java.lang.String[]> map)
      Adds the specified Map to the parameters of the request, added parameters will not overwrite existing parameters in the request.
      void enableParameterEscaping()
      Enables escaping for all parameters which are not in the list of exceptions.
      java.lang.Object getAttribute​(java.lang.String name)
      Return the value of the specified request attribute, if any; otherwise, return null.
      java.util.Map<java.lang.String,​java.lang.Object> getAttributeMap()
      Returns a Map of the attributes of this request.
      java.util.Enumeration<java.lang.String> getAttributeNames()
      Return the names of all defined request attributes for this request.
      protected java.util.List<java.lang.String> getCmsIncludeCalls()
      Returns the List of include calls which will be passed to the next wrapping layer.
      java.util.Set<java.lang.String> getDynamicParameters()
      Gets the set of dynamic parameters.
      java.lang.String getElementRootPath()
      Returns the full element URI site root path to the resource currently processed.
      java.lang.String getElementUri()
      Returns the element URI of the resource currently processed, relative to the current site root.
      protected CmsJspLoader getJspLoader()
      Returns the jsp loader instance.
      java.lang.String getParameter​(java.lang.String name)
      Return the value of the specified request parameter, if any; otherwise, return null.
      CmsParameterEscaper getParameterEscaper()
      Gets the parameter escaper.
      java.util.Map<java.lang.String,​java.lang.String[]> getParameterMap()
      Returns a Map of the parameters of this request.
      java.util.Enumeration<java.lang.String> getParameterNames()
      Return the names of all defined request parameters for this request.
      java.lang.String[] getParameterValues​(java.lang.String name)
      Returns the defined values for the specified request parameter, if any; otherwise, return null.
      javax.servlet.RequestDispatcher getRequestDispatcher​(java.lang.String target)
      Allows requests to be dispatched to internal VFS resources or external JSP pages, overloads the standard servlet API getRequestDispatcher() method.
      CmsFlexRequestDispatcher getRequestDispatcherToExternal​(java.lang.String vfs_target, java.lang.String ext_target)
      Replacement for the standard servlet API getRequestDispatcher() method.
      java.lang.String getRequestURI()
      Wraps the request URI, overloading the standard API.
      java.lang.StringBuffer getRequestURL()
      Wraps the request URL, overloading the standard API, the wrapped URL will always point to the currently included VFS resource.
      java.lang.String getServletPath()
      This is a work around for servlet containers creating a new application dispatcher instead of using our request dispatcher, so missing RFS JSP pages are not requested to OpenCms and the dispatcher is unable to load the included/forwarded JSP file.
      boolean isDoRecompile()
      Checks if JSPs should always be recompiled.
      boolean isOnline()
      Indicates that this request belongs to an online project.
      void removeAttribute​(java.lang.String name)  
      void setAttribute​(java.lang.String name, java.lang.Object value)  
      void setAttributeMap​(java.util.Map<java.lang.String,​java.lang.Object> map)
      Sets the specified Map as attribute map of the request.
      void setDynamicParameters​(java.util.Set<java.lang.String> dynamicParams)
      Sets the set of dynamic parameters.
      void setParameterMap​(java.util.Map<java.lang.String,​java.lang.String[]> map)
      Sets the specified Map as parameter map of the request.
      java.lang.String toString()  
      • Methods inherited from class javax.servlet.http.HttpServletRequestWrapper

        authenticate, changeSessionId, getAuthType, getContextPath, getCookies, getDateHeader, getHeader, getHeaderNames, getHeaders, getIntHeader, getMethod, getPart, getParts, getPathInfo, getPathTranslated, getQueryString, getRemoteUser, getRequestedSessionId, getSession, getSession, getUserPrincipal, isRequestedSessionIdFromCookie, isRequestedSessionIdFromUrl, isRequestedSessionIdFromURL, isRequestedSessionIdValid, isUserInRole, login, logout, upgrade
      • Methods inherited from class javax.servlet.ServletRequestWrapper

        getAsyncContext, getCharacterEncoding, getContentLength, getContentLengthLong, getContentType, getDispatcherType, getInputStream, getLocalAddr, getLocale, getLocales, getLocalName, getLocalPort, getProtocol, getReader, getRealPath, getRemoteAddr, getRemoteHost, getRemotePort, getRequest, getScheme, getServerName, getServerPort, getServletContext, isAsyncStarted, isAsyncSupported, isSecure, isWrapperFor, isWrapperFor, setCharacterEncoding, setRequest, startAsync, startAsync
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • Methods inherited from interface javax.servlet.ServletRequest

        getAsyncContext, getCharacterEncoding, getContentLength, getContentLengthLong, getContentType, getDispatcherType, getInputStream, getLocalAddr, getLocale, getLocales, getLocalName, getLocalPort, getProtocol, getReader, getRealPath, getRemoteAddr, getRemoteHost, getRemotePort, getScheme, getServerName, getServerPort, getServletContext, isAsyncStarted, isAsyncSupported, isSecure, setCharacterEncoding, startAsync, startAsync
    • Constructor Detail

      • CmsFlexRequest

        public CmsFlexRequest​(javax.servlet.http.HttpServletRequest req,
                              CmsFlexController controller)
        Creates a new CmsFlexRequest wrapper which is most likely the "Top" request wrapper, i.e. the wrapper that is constructed around the first "real" (not wrapped) request.

        Parameters:
        req - the request to wrap
        controller - the controller to use
    • Method Detail

      • addAttributeMap

        public java.util.Map<java.lang.String,​java.lang.Object> addAttributeMap​(java.util.Map<java.lang.String,​java.lang.Object> map)
        Adds the specified Map to the attributes of the request, added attributes will not overwrite existing attributes in the request.

        Parameters:
        map - the map to add
        Returns:
        the merged map of attributes
      • addParameterMap

        public java.util.Map<java.lang.String,​java.lang.String[]> addParameterMap​(java.util.Map<java.lang.String,​java.lang.String[]> map)
        Adds the specified Map to the parameters of the request, added parameters will not overwrite existing parameters in the request.

        Remember that the value for a parameter name in a HttpRequest is a String array. If a parameter name already exists in the HttpRequest, the values will be added to the existing value array. Multiple occurrences of the same value for one parameter are also possible.

        Parameters:
        map - the map to add
        Returns:
        the merged map of parameters
      • enableParameterEscaping

        public void enableParameterEscaping()
        Enables escaping for all parameters which are not in the list of exceptions.

      • getAttribute

        public java.lang.Object getAttribute​(java.lang.String name)
        Return the value of the specified request attribute, if any; otherwise, return null.

        Specified by:
        getAttribute in interface javax.servlet.ServletRequest
        Overrides:
        getAttribute in class javax.servlet.ServletRequestWrapper
        Parameters:
        name - the name of the desired request attribute
        Returns:
        the value of the specified request attribute
        See Also:
        ServletRequest.getAttribute(java.lang.String)
      • getAttributeMap

        public java.util.Map<java.lang.String,​java.lang.Object> getAttributeMap()
        Returns a Map of the attributes of this request.

        Returns:
        a Map containing attribute names as keys and attribute values as map values
      • getAttributeNames

        public java.util.Enumeration<java.lang.String> getAttributeNames()
        Return the names of all defined request attributes for this request.

        Specified by:
        getAttributeNames in interface javax.servlet.ServletRequest
        Overrides:
        getAttributeNames in class javax.servlet.ServletRequestWrapper
        Returns:
        the names of all defined request attributes for this request
        See Also:
        ServletRequest.getAttributeNames()
      • getDynamicParameters

        public java.util.Set<java.lang.String> getDynamicParameters()
        Gets the set of dynamic parameters.

        Normally, when caching a JSP which includes another JSP, only the parameters given directly to the include call will be cached in the new flex cache entry's include list. But when the include call happens implicitly (e.g. for elements rendered in a cms:container tag), we can't pass it any parameters. In this case, we have to modify the parameter map of the current flex request in the JSP, and the keys for the modified parameters need to be stored in this set for the Flex cache to work correctly.

        Returns:
        the set of keys for the dynamic parameters
      • getElementRootPath

        public java.lang.String getElementRootPath()
        Returns the full element URI site root path to the resource currently processed.

        Returns:
        the name of the resource currently processed
      • getElementUri

        public java.lang.String getElementUri()
        Returns the element URI of the resource currently processed, relative to the current site root.

        This might be the name of an included resource, not necessarily the name the resource requested by the user.

        Returns:
        the name of the resource currently processed
      • getParameter

        public java.lang.String getParameter​(java.lang.String name)
        Return the value of the specified request parameter, if any; otherwise, return null.

        If there is more than one value defined, return only the first one.

        Specified by:
        getParameter in interface javax.servlet.ServletRequest
        Overrides:
        getParameter in class javax.servlet.ServletRequestWrapper
        Parameters:
        name - the name of the desired request parameter
        Returns:
        the value of the specified request parameter
        See Also:
        ServletRequest.getParameter(java.lang.String)
      • getParameterMap

        public java.util.Map<java.lang.String,​java.lang.String[]> getParameterMap()
        Returns a Map of the parameters of this request.

        Request parameters are extra information sent with the request. For HTTP servlets, parameters are contained in the query string or posted form data.

        Specified by:
        getParameterMap in interface javax.servlet.ServletRequest
        Overrides:
        getParameterMap in class javax.servlet.ServletRequestWrapper
        Returns:
        a Map containing parameter names as keys and parameter values as map values
        See Also:
        ServletRequest.getParameterMap()
      • getParameterNames

        public java.util.Enumeration<java.lang.String> getParameterNames()
        Return the names of all defined request parameters for this request.

        Specified by:
        getParameterNames in interface javax.servlet.ServletRequest
        Overrides:
        getParameterNames in class javax.servlet.ServletRequestWrapper
        Returns:
        the names of all defined request parameters for this request
        See Also:
        ServletRequest.getParameterNames()
      • getParameterValues

        public java.lang.String[] getParameterValues​(java.lang.String name)
        Returns the defined values for the specified request parameter, if any; otherwise, return null.

        Specified by:
        getParameterValues in interface javax.servlet.ServletRequest
        Overrides:
        getParameterValues in class javax.servlet.ServletRequestWrapper
        Parameters:
        name - Name of the desired request parameter
        Returns:
        the defined values for the specified request parameter, if any; null otherwise
        See Also:
        ServletRequest.getParameterValues(java.lang.String)
      • getRequestDispatcher

        public javax.servlet.RequestDispatcher getRequestDispatcher​(java.lang.String target)
        Allows requests to be dispatched to internal VFS resources or external JSP pages, overloads the standard servlet API getRequestDispatcher() method.

        Specified by:
        getRequestDispatcher in interface javax.servlet.ServletRequest
        Overrides:
        getRequestDispatcher in class javax.servlet.ServletRequestWrapper
        Parameters:
        target - the target for the request dispatcher
        Returns:
        a special RequestDispatcher that allows access to VFS resources
      • getRequestDispatcherToExternal

        public CmsFlexRequestDispatcher getRequestDispatcherToExternal​(java.lang.String vfs_target,
                                                                       java.lang.String ext_target)
        Replacement for the standard servlet API getRequestDispatcher() method.

        This variation is used if an external file (probably JSP) is dispatched to. This external file must have a "mirror" version, i.e. a file in the OpenCms VFS that represents the external file.

        Parameters:
        vfs_target - the OpenCms file that is a "mirror" version of the external file
        ext_target - the external file (outside the OpenCms VFS)
        Returns:
        the constructed CmsFlexRequestDispatcher
      • getRequestURI

        public java.lang.String getRequestURI()
        Wraps the request URI, overloading the standard API.

        This ensures that any wrapped request will use the "faked" target parameters. Remember that for the real request, a mixture of PathInfo and other request information is used to identify the target.

        Specified by:
        getRequestURI in interface javax.servlet.http.HttpServletRequest
        Overrides:
        getRequestURI in class javax.servlet.http.HttpServletRequestWrapper
        Returns:
        a faked URI that will point to the wrapped target in the VFS
        See Also:
        HttpServletRequest.getRequestURI()
      • getRequestURL

        public java.lang.StringBuffer getRequestURL()
        Wraps the request URL, overloading the standard API, the wrapped URL will always point to the currently included VFS resource.

        Specified by:
        getRequestURL in interface javax.servlet.http.HttpServletRequest
        Overrides:
        getRequestURL in class javax.servlet.http.HttpServletRequestWrapper
        Returns:
        a faked URL that will point to the included target in the VFS
        See Also:
        HttpServletRequest.getRequestURL()
      • getServletPath

        public java.lang.String getServletPath()
        This is a work around for servlet containers creating a new application dispatcher instead of using our request dispatcher, so missing RFS JSP pages are not requested to OpenCms and the dispatcher is unable to load the included/forwarded JSP file.

        Specified by:
        getServletPath in interface javax.servlet.http.HttpServletRequest
        Overrides:
        getServletPath in class javax.servlet.http.HttpServletRequestWrapper
        See Also:
        HttpServletRequestWrapper.getServletPath()
      • isDoRecompile

        public boolean isDoRecompile()
        Checks if JSPs should always be recompiled.

        This is useful in case directive based includes are used with <%@ include file="..." %> on a JSP. Note that this also forces the request not to be cached.

        Returns:
        true if JSPs should be recompiled, false otherwise
      • isOnline

        public boolean isOnline()
        Indicates that this request belongs to an online project.

        This is required to distinguish between online and offline resources in the cache. Since the resources have the same name, a suffix [online] or [offline] is added to distinguish the strings when building cache keys. Any resource from a request that isOnline() will be saved with the [online] suffix and vice versa.

        Resources in the OpenCms workplace are not distinguished between online and offline but have their own suffix [workplace]. The assumption is that if you do change the workplace, this is only on true development machines so you can do the cache clearing manually if required.

        The suffixes are used so that we have a simple String name for the resources in the cache. This makes it easy to use a standard HashMap for storage of the resources.

        Returns:
        true if an online resource was requested, false otherwise
      • removeAttribute

        public void removeAttribute​(java.lang.String name)
        Specified by:
        removeAttribute in interface javax.servlet.ServletRequest
        Overrides:
        removeAttribute in class javax.servlet.ServletRequestWrapper
        See Also:
        ServletRequestWrapper.removeAttribute(java.lang.String)
      • setAttribute

        public void setAttribute​(java.lang.String name,
                                 java.lang.Object value)
        Specified by:
        setAttribute in interface javax.servlet.ServletRequest
        Overrides:
        setAttribute in class javax.servlet.ServletRequestWrapper
        See Also:
        ServletRequestWrapper.setAttribute(java.lang.String, java.lang.Object)
      • setAttributeMap

        public void setAttributeMap​(java.util.Map<java.lang.String,​java.lang.Object> map)
        Sets the specified Map as attribute map of the request.

        The map should be immutable. This will completely replace the attribute map. Use this in combination with getAttributeMap() and addAttributeMap(Map) in case you want to set the old status of the attribute map after you have modified it for a specific operation.

        Parameters:
        map - the map to set
      • setDynamicParameters

        public void setDynamicParameters​(java.util.Set<java.lang.String> dynamicParams)
        Sets the set of dynamic parameters.

        Parameters:
        dynamicParams - the set of dynamic parameters
      • setParameterMap

        public void setParameterMap​(java.util.Map<java.lang.String,​java.lang.String[]> map)
        Sets the specified Map as parameter map of the request.

        The map should be immutable. This will completely replace the parameter map. Use this in combination with getParameterMap() and addParameterMap(Map) in case you want to set the old status of the parameter map after you have modified it for a specific operation.

        Parameters:
        map - the map to set
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
        See Also:
        Object.toString()
      • getCmsIncludeCalls

        protected java.util.List<java.lang.String> getCmsIncludeCalls()
        Returns the List of include calls which will be passed to the next wrapping layer.

        The set of include calls is maintained to detect an endless inclusion loop.

        Returns:
        the List of include calls
      • getJspLoader

        protected CmsJspLoader getJspLoader()
        Returns the jsp loader instance.

        Returns:
        the jsp loader instance