org.opencms.util
Class CmsRequestUtil

java.lang.Object
  extended by org.opencms.util.CmsRequestUtil

public final class CmsRequestUtil
extends java.lang.Object

Provides utility functions for dealing with values a HttpServletRequest.

Since:
6.0.0
Version:
$Revision: 1.31 $
Author:
Alexander Kandzior

Field Summary
static java.lang.String ATTRIBUTE_ERRORCODE
          Request attribute that contains the original error code.
static java.lang.String HEADER_ACCEPT_CHARSET
          HTTP Accept-Charset Header for internal requests used during static export.
static java.lang.String HEADER_ACCEPT_LANGUAGE
          HTTP Accept-Language Header for internal requests used during static export.
static java.lang.String HEADER_CACHE_CONTROL
          HTTP Header "Cache-Control".
static java.lang.String HEADER_CONNECTION
          HTTP Header "Connection".
static java.lang.String HEADER_CONTENT_DISPOSITION
          The "Content-Disposition" http header.
static java.lang.String HEADER_CONTENT_TYPE
          The "Content-Type" http header.
static java.lang.String HEADER_EXPIRES
          HTTP Header "Expires".
static java.lang.String HEADER_IF_MODIFIED_SINCE
          HTTP Header "If-Modified-Since".
static java.lang.String HEADER_JSESSIONID
          The Header that stores the session id (used by OpenCms upload applet).
static java.lang.String HEADER_LAST_MODIFIED
          HTTP Header "Last-Modified".
static java.lang.String HEADER_LOCATION
          HTTP Header "Location".
static java.lang.String HEADER_OPENCMS_EXPORT
          HTTP Header for internal requests used during static export.
static java.lang.String HEADER_PRAGMA
          HTTP Header "Pragma".
static java.lang.String HEADER_SERVER
          HTTP Header "Server".
static java.lang.String HEADER_USER_AGENT
          HTTP Header "user-agent".
static java.lang.String HEADER_VALUE_MAX_AGE
          HTTP Header value "max-age=" (for "Cache-Control").
static java.lang.String HEADER_VALUE_MUST_REVALIDATE
          HTTP Header value "must-revalidate" (for "Cache-Control").
static java.lang.String HEADER_VALUE_NO_CACHE
          HTTP Header value "no-cache" (for "Cache-Control").
static java.lang.String HEADER_WWW_AUTHENTICATE
          HTTP Header "WWW-Authenticate".
static java.lang.String HEADER_X_FORWARDED_FOR
          Identifier for x-forwarded-for (i.e. proxied) request headers.
static java.lang.String PARAMETER_ASSIGNMENT
          Assignment char between parameter name and values.
static java.lang.String PARAMETER_DELIMITER
          Delimiter char between parameters.
static java.lang.String URL_DELIMITER
          Delimiter char between url and query.
 
Method Summary
static java.lang.String appendParameter(java.lang.String url, java.lang.String paramName, java.lang.String paramValue)
          Appends a request parameter to the given URL.
static java.lang.String appendParameters(java.lang.String url, java.util.Map params, boolean encode)
          Appends a map of request parameters to the given URL.
static java.util.Map createParameterMap(java.util.Map params)
          Creates a valid request parameter map from the given map, most notably changing the values form String to String[] if required.
static java.util.Map createParameterMap(java.lang.String query)
          Parses the parameters of the given request query part and creates a parameter map out of them.
static java.lang.String encodeParams(javax.servlet.http.HttpServletRequest req)
          Returns all parameters of the given request as a request parameter URL String, that is in the form key1=value1&key2=value2 etc.
static java.lang.String encodeParamsWithUri(java.lang.String uri, javax.servlet.http.HttpServletRequest req)
          Encodes the given URI, with all parameters from the given request appended.
static void forwardRequest(java.lang.String target, javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse res)
          Forwards the response to the given target, which may contain parameters appended like for example ?
static void forwardRequest(java.lang.String target, java.util.Map params, javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse res)
          Forwards the response to the given target, with the provided parameter map.
static java.lang.String getCookieValue(CmsJspActionElement jsp, java.lang.String name)
          Returns the value of the cookie with the given name.
static java.lang.String getNotEmptyDecodedParameter(javax.servlet.http.HttpServletRequest request, java.lang.String paramName)
          Reads value from the request parameters, will return null if the value is not available or only white space.
static java.lang.String getNotEmptyParameter(javax.servlet.http.HttpServletRequest request, java.lang.String paramName)
          Reads value from the request parameters, will return null if the value is not available or only white space.
static java.lang.String getRequestLink(java.lang.String url)
          Returns the link without parameters from a String that is formatted for a GET request.
static java.lang.Object getSessionValue(javax.servlet.http.HttpServletRequest request, java.lang.String key)
          Reads an object from the session of the given HTTP request.
static java.util.List readMultipartFileItems(javax.servlet.http.HttpServletRequest request)
          Parses a request of the form multipart/form-data.
static java.util.Map readParameterMapFromMultiPart(java.lang.String encoding, java.util.List multiPartFileItems)
          Creates a "standard" request parameter map from the values of a multipart/form-data request.
static void redirectPermanently(CmsJspActionElement jsp, java.lang.String target)
          Redirects the response to the target link using a "301 - Moved Permanently" header.
static void redirectRequestSecure(CmsJspActionElement jsp, java.lang.String target)
          Redirects the response to the target link.
static void removeSessionValue(javax.servlet.http.HttpServletRequest request, java.lang.String key)
          Removes an object from the session of the given http request.
static void setCookieValue(CmsJspActionElement jsp, java.lang.String name, java.lang.String value)
          Sets the value of a specific cookie.
static void setNoCacheHeaders(javax.servlet.http.HttpServletResponse res)
          Sets headers to the given response to prevent client side caching.
static void setSessionValue(javax.servlet.http.HttpServletRequest request, java.lang.String key, java.lang.Object value)
          Adds an object to the session of the given HTTP request.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

ATTRIBUTE_ERRORCODE

public static final java.lang.String ATTRIBUTE_ERRORCODE
Request attribute that contains the original error code.

See Also:
Constant Field Values

HEADER_ACCEPT_CHARSET

public static final java.lang.String HEADER_ACCEPT_CHARSET
HTTP Accept-Charset Header for internal requests used during static export.

See Also:
Constant Field Values

HEADER_ACCEPT_LANGUAGE

public static final java.lang.String HEADER_ACCEPT_LANGUAGE
HTTP Accept-Language Header for internal requests used during static export.

See Also:
Constant Field Values

HEADER_CACHE_CONTROL

public static final java.lang.String HEADER_CACHE_CONTROL
HTTP Header "Cache-Control".

See Also:
Constant Field Values

HEADER_CONNECTION

public static final java.lang.String HEADER_CONNECTION
HTTP Header "Connection".

See Also:
Constant Field Values

HEADER_CONTENT_DISPOSITION

public static final java.lang.String HEADER_CONTENT_DISPOSITION
The "Content-Disposition" http header.

See Also:
Constant Field Values

HEADER_CONTENT_TYPE

public static final java.lang.String HEADER_CONTENT_TYPE
The "Content-Type" http header.

See Also:
Constant Field Values

HEADER_EXPIRES

public static final java.lang.String HEADER_EXPIRES
HTTP Header "Expires".

See Also:
Constant Field Values

HEADER_IF_MODIFIED_SINCE

public static final java.lang.String HEADER_IF_MODIFIED_SINCE
HTTP Header "If-Modified-Since".

See Also:
Constant Field Values

HEADER_JSESSIONID

public static final java.lang.String HEADER_JSESSIONID
The Header that stores the session id (used by OpenCms upload applet).

See Also:
Constant Field Values

HEADER_LAST_MODIFIED

public static final java.lang.String HEADER_LAST_MODIFIED
HTTP Header "Last-Modified".

See Also:
Constant Field Values

HEADER_LOCATION

public static final java.lang.String HEADER_LOCATION
HTTP Header "Location".

See Also:
Constant Field Values

HEADER_OPENCMS_EXPORT

public static final java.lang.String HEADER_OPENCMS_EXPORT
HTTP Header for internal requests used during static export.

See Also:
Constant Field Values

HEADER_PRAGMA

public static final java.lang.String HEADER_PRAGMA
HTTP Header "Pragma".

See Also:
Constant Field Values

HEADER_SERVER

public static final java.lang.String HEADER_SERVER
HTTP Header "Server".

See Also:
Constant Field Values

HEADER_USER_AGENT

public static final java.lang.String HEADER_USER_AGENT
HTTP Header "user-agent".

See Also:
Constant Field Values

HEADER_VALUE_MAX_AGE

public static final java.lang.String HEADER_VALUE_MAX_AGE
HTTP Header value "max-age=" (for "Cache-Control").

See Also:
Constant Field Values

HEADER_VALUE_MUST_REVALIDATE

public static final java.lang.String HEADER_VALUE_MUST_REVALIDATE
HTTP Header value "must-revalidate" (for "Cache-Control").

See Also:
Constant Field Values

HEADER_VALUE_NO_CACHE

public static final java.lang.String HEADER_VALUE_NO_CACHE
HTTP Header value "no-cache" (for "Cache-Control").

See Also:
Constant Field Values

HEADER_WWW_AUTHENTICATE

public static final java.lang.String HEADER_WWW_AUTHENTICATE
HTTP Header "WWW-Authenticate".

See Also:
Constant Field Values

HEADER_X_FORWARDED_FOR

public static final java.lang.String HEADER_X_FORWARDED_FOR
Identifier for x-forwarded-for (i.e. proxied) request headers.

See Also:
Constant Field Values

PARAMETER_ASSIGNMENT

public static final java.lang.String PARAMETER_ASSIGNMENT
Assignment char between parameter name and values.

See Also:
Constant Field Values

PARAMETER_DELIMITER

public static final java.lang.String PARAMETER_DELIMITER
Delimiter char between parameters.

See Also:
Constant Field Values

URL_DELIMITER

public static final java.lang.String URL_DELIMITER
Delimiter char between url and query.

See Also:
Constant Field Values
Method Detail

appendParameter

public static java.lang.String appendParameter(java.lang.String url,
                                               java.lang.String paramName,
                                               java.lang.String paramValue)
Appends a request parameter to the given URL.

This method takes care about the adding the parameter as an additional parameter (appending ¶m=value) or as the first parameter (appending ?param=value).

Parameters:
url - the URL where to append the parameter to
paramName - the paramter name to append
paramValue - the parameter value to append
Returns:
the URL with the given parameter appended

appendParameters

public static java.lang.String appendParameters(java.lang.String url,
                                                java.util.Map params,
                                                boolean encode)
Appends a map of request parameters to the given URL.

The map can contains values of String[] or simple String values.

This method takes care about the adding the parameter as an additional parameter (appending ¶m=value) or as the first parameter (appending ?param=value).

Parameters:
url - the URL where to append the parameter to
params - the parameters to append
encode - if true, the parameter values are encoded before they are appended
Returns:
the URL with the given parameter appended

createParameterMap

public static java.util.Map createParameterMap(java.util.Map params)
Creates a valid request parameter map from the given map, most notably changing the values form String to String[] if required.

If the given parameter map is null, then null is returned.

Parameters:
params - the map of parameters to create a parameter map from
Returns:
the created parameter map, all values will be instances of String[]

createParameterMap

public static java.util.Map createParameterMap(java.lang.String query)
Parses the parameters of the given request query part and creates a parameter map out of them.

Please note: This does not parse a full request URI/URL, only the query part that starts after the "?". For example, in the URI /system/index.html?a=b&c=d, the query part is a=b&c=d.

If the given String is empty, an empty map is returned.

Parameters:
query - the query to parse
Returns:
the parameter map created from the query

encodeParams

public static java.lang.String encodeParams(javax.servlet.http.HttpServletRequest req)
Returns all parameters of the given request as a request parameter URL String, that is in the form key1=value1&key2=value2 etc. The result will be encoded using the CmsEncoder.encode(String) function.

Parameters:
req - the request to read the parameters from
Returns:
all initialized parameters of the given request as request parameter URL String

encodeParamsWithUri

public static java.lang.String encodeParamsWithUri(java.lang.String uri,
                                                   javax.servlet.http.HttpServletRequest req)
Encodes the given URI, with all parameters from the given request appended.

The result will be encoded using the CmsEncoder.encode(String) function.

Parameters:
req - the request where to read the parameters from
uri - the URI to encode
Returns:
the encoded URI, with all parameters from the given request appended

forwardRequest

public static void forwardRequest(java.lang.String target,
                                  javax.servlet.http.HttpServletRequest req,
                                  javax.servlet.http.HttpServletResponse res)
                           throws java.io.IOException,
                                  javax.servlet.ServletException
Forwards the response to the given target, which may contain parameters appended like for example ?a=b&c=d.

Please note: If possible, use forwardRequest(String, Map, HttpServletRequest, HttpServletResponse) where the parameters are passed as a map, since the parsing of the parameters may introduce issues with encoding and is in general much less effective.

The parsing of parameters will likely fail for "large values" (e.g. full blown web forms with <textarea> elements etc. Use this method only if you know that the target will just contain up to 3 parameters which are relatively short and have no encoding or line break issues.

Parameters:
target - the target to forward to (may contain parameters like ?a=b&c=d)
req - the request to forward
res - the response to forward
Throws:
java.io.IOException - in case the forwarding fails
javax.servlet.ServletException - in case the forwarding fails

forwardRequest

public static void forwardRequest(java.lang.String target,
                                  java.util.Map params,
                                  javax.servlet.http.HttpServletRequest req,
                                  javax.servlet.http.HttpServletResponse res)
                           throws java.io.IOException,
                                  javax.servlet.ServletException
Forwards the response to the given target, with the provided parameter map.

The target URI must NOT have parameters appended like for example ?a=b&c=d. The values in the provided map must be of type String[]. If required, use createParameterMap(Map) before calling this method to make sure all values are actually of the required array type.

Parameters:
target - the target to forward to (may NOT contain parameters like ?a=b&c=d)
params - the parameter map (the values must be of type String[]
req - the request to forward
res - the response to forward
Throws:
java.io.IOException - in case the forwarding fails
javax.servlet.ServletException - in case the forwarding fails

getCookieValue

public static java.lang.String getCookieValue(CmsJspActionElement jsp,
                                              java.lang.String name)
Returns the value of the cookie with the given name.

Parameters:
jsp - the CmsJspActionElement to use
name - the name of the cookie
Returns:
the value of the cookie with the given name or null, if no cookie exists with the name

getNotEmptyDecodedParameter

public static java.lang.String getNotEmptyDecodedParameter(javax.servlet.http.HttpServletRequest request,
                                                           java.lang.String paramName)
Reads value from the request parameters, will return null if the value is not available or only white space.

The value of the request will also be decoded using CmsEncoder.decode(String) and also trimmed using String.trim().

Parameters:
request - the request to read the parameter from
paramName - the parameter name to read
Returns:
the request parameter value for the given parameter

getNotEmptyParameter

public static java.lang.String getNotEmptyParameter(javax.servlet.http.HttpServletRequest request,
                                                    java.lang.String paramName)
Reads value from the request parameters, will return null if the value is not available or only white space.

Parameters:
request - the request to read the parameter from
paramName - the parameter name to read
Returns:
the request parameter value for the given parameter

getRequestLink

public static java.lang.String getRequestLink(java.lang.String url)
Returns the link without parameters from a String that is formatted for a GET request.

Parameters:
url - the URL to remove the parameters from
Returns:
the URL without any parameters

getSessionValue

public static java.lang.Object getSessionValue(javax.servlet.http.HttpServletRequest request,
                                               java.lang.String key)
Reads an object from the session of the given HTTP request.

A session will be initialized if the request does not currently have a session. As a result, the request will always have a session after this method has been called.

Will return null if no corresponding object is found in the session.

Parameters:
request - the request to get the session from
key - the key of the object to read from the session
Returns:
the object received form the session, or null

readMultipartFileItems

public static java.util.List readMultipartFileItems(javax.servlet.http.HttpServletRequest request)
Parses a request of the form multipart/form-data. The result list will contain items of type FileItem. If the request is not of type multipart/form-data, then null is returned.

Parameters:
request - the HTTP servlet request to parse
Returns:
the list of FileItem extracted from the multipart request, or null if the request was not of type multipart/form-data

readParameterMapFromMultiPart

public static java.util.Map readParameterMapFromMultiPart(java.lang.String encoding,
                                                          java.util.List multiPartFileItems)
Creates a "standard" request parameter map from the values of a multipart/form-data request.

Parameters:
encoding - the encoding to use when creating the values
multiPartFileItems - the list of parsed multi part file items
Returns:
a map containing all non-file request parameters
See Also:
readMultipartFileItems(HttpServletRequest)

redirectPermanently

public static void redirectPermanently(CmsJspActionElement jsp,
                                       java.lang.String target)
Redirects the response to the target link using a "301 - Moved Permanently" header.

This implementation will work only on JSP pages in OpenCms that use the default JSP loader implementation.

Parameters:
jsp - the OpenCms JSP context
target - the target link

redirectRequestSecure

public static void redirectRequestSecure(CmsJspActionElement jsp,
                                         java.lang.String target)
                                  throws java.io.IOException
Redirects the response to the target link.

Use this method instead of HttpServletResponse.sendRedirect(java.lang.String) to avoid relative links with secure sites (and issues with apache).

Parameters:
jsp - the OpenCms JSP context
target - the target link
Throws:
java.io.IOException - if something goes wrong during redirection

removeSessionValue

public static void removeSessionValue(javax.servlet.http.HttpServletRequest request,
                                      java.lang.String key)
Removes an object from the session of the given http request.

A session will be initialized if the request does not currently have a session. As a result, the request will always have a session after this method has been called.

Parameters:
request - the request to get the session from
key - the key of the object to be removed from the session

setCookieValue

public static void setCookieValue(CmsJspActionElement jsp,
                                  java.lang.String name,
                                  java.lang.String value)
Sets the value of a specific cookie.

If no cookie exists with the value, a new cookie will be created.

Parameters:
jsp - the CmsJspActionElement to use
name - the name of the cookie
value - the value of the cookie

setNoCacheHeaders

public static void setNoCacheHeaders(javax.servlet.http.HttpServletResponse res)
Sets headers to the given response to prevent client side caching.

The following headers are set:

Cache-Control: max-age=0
Cache-Control: must-revalidate
Pragma: no-cache

Parameters:
res - the request where to set the no-cache headers

setSessionValue

public static void setSessionValue(javax.servlet.http.HttpServletRequest request,
                                   java.lang.String key,
                                   java.lang.Object value)
Adds an object to the session of the given HTTP request.

A session will be initialized if the request does not currently have a session. As a result, the request will always have a session after this method has been called.

Parameters:
request - the request to get the session from
key - the key of the object to be stored in the session
value - the object to be stored in the session