org.apache.commons.messagelet.impl
Class RequestUtil

java.lang.Object
  extended by org.apache.commons.messagelet.impl.RequestUtil

public final class RequestUtil
extends java.lang.Object

General purpose request parsing and encoding utility methods.

Version:
$Revision: 155459 $ $Date: 2005-02-26 14:24:44 +0100(sab, 26 feb 2005) $
Author:
Craig R. McClanahan, Tim Tye

Field Summary
private static java.text.SimpleDateFormat format
          The DateFormat to use for generating readable dates in cookies.
 
Constructor Summary
RequestUtil()
           
 
Method Summary
private static byte convertHexDigit(byte b)
          Convert a byte character value to hexidecimal digit value.
static java.lang.String encodeCookie(javax.servlet.http.Cookie cookie)
          Encode a cookie as per RFC 2109.
static java.lang.String filter(java.lang.String message)
          Filter the specified message string for characters that are sensitive in HTML.
static java.lang.String normalize(java.lang.String path)
          Normalize a relative URI path that may have relative values ("/./", "/../", and so on ) it it.
static java.lang.String parseCharacterEncoding(java.lang.String contentType)
          Parse the character encoding from the specified content type header.
static javax.servlet.http.Cookie[] parseCookieHeader(java.lang.String header)
          Parse a cookie header into an array of cookies according to RFC 2109.
static void parseParameters(java.util.Map map, byte[] data, java.lang.String encoding)
          Append request parameters from the specified String to the specified Map.
static void parseParameters(java.util.Map map, java.lang.String data, java.lang.String encoding)
          Append request parameters from the specified String to the specified Map.
private static void putMapEntry(java.util.Map map, java.lang.String name, java.lang.String value)
          Put name value pair in map.
static java.lang.String URLDecode(byte[] bytes)
          Decode and return the specified URL-encoded byte array.
static java.lang.String URLDecode(byte[] bytes, java.lang.String enc)
          Decode and return the specified URL-encoded byte array.
static java.lang.String URLDecode(java.lang.String str)
          Decode and return the specified URL-encoded String.
static java.lang.String URLDecode(java.lang.String str, java.lang.String enc)
          Decode and return the specified URL-encoded String.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

format

private static java.text.SimpleDateFormat format
The DateFormat to use for generating readable dates in cookies.

Constructor Detail

RequestUtil

public RequestUtil()
Method Detail

encodeCookie

public static java.lang.String encodeCookie(javax.servlet.http.Cookie cookie)
Encode a cookie as per RFC 2109. The resulting string can be used as the value for a Set-Cookie header.

Parameters:
cookie - The cookie to encode.
Returns:
A string following RFC 2109.

filter

public static java.lang.String filter(java.lang.String message)
Filter the specified message string for characters that are sensitive in HTML. This avoids potential attacks caused by including JavaScript codes in the request URL that is often reported in error messages.

Parameters:
message - The message string to be filtered

normalize

public static java.lang.String normalize(java.lang.String path)
Normalize a relative URI path that may have relative values ("/./", "/../", and so on ) it it. WARNING - This method is useful only for normalizing application-generated paths. It does not try to perform security checks for malicious input.

Parameters:
path - Relative path to be normalized

parseCharacterEncoding

public static java.lang.String parseCharacterEncoding(java.lang.String contentType)
Parse the character encoding from the specified content type header. If the content type is null, or there is no explicit character encoding, null is returned.

Parameters:
contentType - a content type header

parseCookieHeader

public static javax.servlet.http.Cookie[] parseCookieHeader(java.lang.String header)
Parse a cookie header into an array of cookies according to RFC 2109.

Parameters:
header - Value of an HTTP "Cookie" header

parseParameters

public static void parseParameters(java.util.Map map,
                                   java.lang.String data,
                                   java.lang.String encoding)
                            throws java.io.UnsupportedEncodingException
Append request parameters from the specified String to the specified Map. It is presumed that the specified Map is not accessed from any other thread, so no synchronization is performed.

IMPLEMENTATION NOTE: URL decoding is performed individually on the parsed name and value elements, rather than on the entire query string ahead of time, to properly deal with the case where the name or value includes an encoded "=" or "&" character that would otherwise be interpreted as a delimiter.

Parameters:
map - Map that accumulates the resulting parameters
data - Input string containing request parameters
urlParameters - true if we're parsing parameters on the URL
Throws:
java.lang.IllegalArgumentException - if the data is malformed
java.io.UnsupportedEncodingException

URLDecode

public static java.lang.String URLDecode(java.lang.String str)
Decode and return the specified URL-encoded String. When the byte array is converted to a string, the system default character encoding is used... This may be different than some other servers.

Parameters:
str - The url-encoded string
Throws:
java.lang.IllegalArgumentException - if a '%' character is not followed by a valid 2-digit hexadecimal number

URLDecode

public static java.lang.String URLDecode(java.lang.String str,
                                         java.lang.String enc)
Decode and return the specified URL-encoded String.

Parameters:
str - The url-encoded string
enc - The encoding to use; if null, the default encoding is used
Throws:
java.lang.IllegalArgumentException - if a '%' character is not followed by a valid 2-digit hexadecimal number

URLDecode

public static java.lang.String URLDecode(byte[] bytes)
Decode and return the specified URL-encoded byte array.

Parameters:
bytes - The url-encoded byte array
Throws:
java.lang.IllegalArgumentException - if a '%' character is not followed by a valid 2-digit hexadecimal number

URLDecode

public static java.lang.String URLDecode(byte[] bytes,
                                         java.lang.String enc)
Decode and return the specified URL-encoded byte array.

Parameters:
bytes - The url-encoded byte array
enc - The encoding to use; if null, the default encoding is used
Throws:
java.lang.IllegalArgumentException - if a '%' character is not followed by a valid 2-digit hexadecimal number

convertHexDigit

private static byte convertHexDigit(byte b)
Convert a byte character value to hexidecimal digit value.

Parameters:
b - the character value byte

putMapEntry

private static void putMapEntry(java.util.Map map,
                                java.lang.String name,
                                java.lang.String value)
Put name value pair in map.

Parameters:
b - the character value byte Put name and value pair in map. When name already exist, add value to array of values.

parseParameters

public static void parseParameters(java.util.Map map,
                                   byte[] data,
                                   java.lang.String encoding)
                            throws java.io.UnsupportedEncodingException
Append request parameters from the specified String to the specified Map. It is presumed that the specified Map is not accessed from any other thread, so no synchronization is performed.

IMPLEMENTATION NOTE: URL decoding is performed individually on the parsed name and value elements, rather than on the entire query string ahead of time, to properly deal with the case where the name or value includes an encoded "=" or "&" character that would otherwise be interpreted as a delimiter. NOTE: byte array data is modified by this method. Caller beware.

Parameters:
map - Map that accumulates the resulting parameters
data - Input string containing request parameters
encoding - Encoding to use for converting hex
Throws:
java.io.UnsupportedEncodingException - if the data is malformed