Class CmsFlexRequest

java.lang.Object
javax.servlet.ServletRequestWrapper
javax.servlet.http.HttpServletRequestWrapper
org.opencms.flex.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 final String
    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

    Modifier and Type
    Method
    Description
    Adds the specified Map to the attributes of the request, added attributes will not overwrite existing attributes in the request.
    Adds the specified Map to the parameters of the request, added parameters will not overwrite existing parameters in the request.
    void
    Enables escaping for all parameters which are not in the list of exceptions.
    Return the value of the specified request attribute, if any; otherwise, return null.
    Returns a Map of the attributes of this request.
    Return the names of all defined request attributes for this request.
    protected List<String>
    Returns the List of include calls which will be passed to the next wrapping layer.
    Gets the set of dynamic parameters.
    Returns the full element URI site root path to the resource currently processed.
    Returns the element URI of the resource currently processed, relative to the current site root.
    protected CmsJspLoader
    Returns the jsp loader instance.
    Return the value of the specified request parameter, if any; otherwise, return null.
    Gets the parameter escaper.
    Returns a Map of the parameters of this request.
    Return the names of all defined request parameters for this request.
    Returns the defined values for the specified request parameter, if any; otherwise, return null.
    javax.servlet.RequestDispatcher
    Allows requests to be dispatched to internal VFS resources or external JSP pages, overloads the standard servlet API getRequestDispatcher() method.
    getRequestDispatcherToExternal(String vfs_target, String ext_target)
    Replacement for the standard servlet API getRequestDispatcher() method.
    Wraps the request URI, overloading the standard API.
    Wraps the request URL, overloading the standard API, the wrapped URL will always point to the currently included VFS resource.
    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
    Checks if JSPs should always be recompiled.
    boolean
    Indicates that this request belongs to an online project.
    void
     
    void
    setAttribute(String name, Object value)
     
    void
    Sets the specified Map as attribute map of the request.
    void
    Sets the set of dynamic parameters.
    void
    Sets the specified Map as parameter map of the request.
     

    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
  • Field Details

  • Constructor Details

    • 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 Details

    • addAttributeMap

      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

      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 Object getAttribute(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

      Returns a Map of the attributes of this request.

      Returns:
      a Map containing attribute names as keys and attribute values as map values
    • 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

      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

      Returns the full element URI site root path to the resource currently processed.

      Returns:
      the name of the resource currently processed
    • 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 String getParameter(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)
    • getParameterEscaper

      Gets the parameter escaper.

      Returns:
      the parameter escaper
    • 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

      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 String[] getParameterValues(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(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

      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

      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

      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

      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(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(String name, 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(Map<String,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(Set<String> dynamicParams)
      Sets the set of dynamic parameters.

      Parameters:
      dynamicParams - the set of dynamic parameters
    • setParameterMap

      public void setParameterMap(Map<String,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 String toString()
      Overrides:
      toString in class Object
      See Also:
    • 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

      Returns the jsp loader instance.

      Returns:
      the jsp loader instance