org.glassfish.grizzly.http.util
Class MimeHeaders

java.lang.Object
  extended by org.glassfish.grizzly.http.util.MimeHeaders

public class MimeHeaders
extends Object

Memory-efficient repository for Mime Headers. When the object is recycled, it will keep the allocated headers[] and all the MimeHeaderField - no GC is generated. For input headers it is possible to use the DataChunk for Fields - so no GC will be generated. The only garbage is generated when using the String for header names/values - this can't be avoided when the servlet calls header methods, but is easy to avoid inside tomcat. The goal is to use _only_ DataChunk-based Fields, and reduce to 0 the memory overhead of tomcat. TODO: XXX one-buffer parsing - for HTTP ( other protocols don't need that ) XXX remove unused methods XXX External enumerations, with 0 GC. XXX use HeaderName ID

Author:
dac@eng.sun.com, James Todd [gonzo@eng.sun.com], Costin Manolache, kevin seguin

Nested Class Summary
 class MimeHeaders.MaxHeaderCountExceededException
           
 
Field Summary
static int DEFAULT_HEADER_SIZE
          Initial size - should be == average number of headers per request XXX make it configurable ( fine-tuning of web-apps )
static int MAX_NUM_HEADERS_DEFAULT
           
static int MAX_NUM_HEADERS_UNBOUNDED
           
 
Constructor Summary
MimeHeaders()
          Creates a new MimeHeaders object using a default buffer size.
 
Method Summary
 DataChunk addValue(Buffer buffer, int startN, int len)
          Create a new named header using un-translated byte[].
 DataChunk addValue(Header header)
          Create a new named header , return the MessageBytes container for the new value
 DataChunk addValue(String name)
          Create a new named header , return the MessageBytes container for the new value
 void clear()
          Clears all header fields.
 boolean contains(Header header)
           
 boolean contains(String header)
           
 boolean getAndSetSerialized(int n, boolean newValue)
          Set the header's "serialized" flag and return the prev.
 String getHeader(Header header)
           
 String getHeader(String name)
           
 int getMaxNumHeaders()
           
 DataChunk getName(int n)
          Returns the Nth header name, or null if there is no such header.
 DataChunk getValue(Header header)
          Finds and returns a header field with the given name.
 DataChunk getValue(int n)
          Returns the Nth header value, or null if there is no such header.
 DataChunk getValue(String name)
          Finds and returns a header field with the given name.
 int indexOf(Header header, int fromIndex)
          Find the index of a header with the given name.
 int indexOf(String name, int fromIndex)
          Find the index of a header with the given name.
 Iterable<String> names()
          Returns an enumeration of strings representing the header field names.
 void recycle()
          Clears all header fields.
 void removeHeader(Header header)
           
 void removeHeader(String name)
          Removes a header field with the specified name.
 void removeHeader(String name, String str)
          Removes the headers with the given name whose values contain the given string.
 void removeHeaderMatches(Header header, String regex)
          Removes the headers with the given name whose values contain the given string.
 void removeHeaderMatches(String name, String regex)
          Removes the headers with the given name whose values contain the given string.
 void setMaxNumHeaders(int maxNumHeaders)
           
 DataChunk setValue(Header header)
          Allow "set" operations - return a DataChunk container for the header value ( existing header or new if this .
 DataChunk setValue(String name)
          Allow "set" operations - return a DataChunk container for the header value ( existing header or new if this .
 int size()
          Returns the current number of header fields.
 String toString()
          EXPENSIVE!!! only for debugging.
 Iterable<String> values(Header name)
           
 Iterable<String> values(String name)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

MAX_NUM_HEADERS_UNBOUNDED

public static final int MAX_NUM_HEADERS_UNBOUNDED
See Also:
Constant Field Values

MAX_NUM_HEADERS_DEFAULT

public static final int MAX_NUM_HEADERS_DEFAULT
See Also:
Constant Field Values

DEFAULT_HEADER_SIZE

public static final int DEFAULT_HEADER_SIZE
Initial size - should be == average number of headers per request XXX make it configurable ( fine-tuning of web-apps )

See Also:
Constant Field Values
Constructor Detail

MimeHeaders

public MimeHeaders()
Creates a new MimeHeaders object using a default buffer size.

Method Detail

recycle

public void recycle()
Clears all header fields.


clear

public void clear()
Clears all header fields.


toString

public String toString()
EXPENSIVE!!! only for debugging.

Overrides:
toString in class Object

size

public int size()
Returns the current number of header fields.


getName

public DataChunk getName(int n)
Returns the Nth header name, or null if there is no such header. This may be used to iterate through all header fields.


getValue

public DataChunk getValue(int n)
Returns the Nth header value, or null if there is no such header. This may be used to iterate through all header fields.


getAndSetSerialized

public boolean getAndSetSerialized(int n,
                                   boolean newValue)
Set the header's "serialized" flag and return the prev. value.

Parameters:
n - the header index
newValue - the new value
Returns:
the old header "serialized" flag value.

indexOf

public int indexOf(String name,
                   int fromIndex)
Find the index of a header with the given name.


indexOf

public int indexOf(Header header,
                   int fromIndex)
Find the index of a header with the given name.


contains

public boolean contains(Header header)

contains

public boolean contains(String header)

names

public Iterable<String> names()
Returns an enumeration of strings representing the header field names. Field names may appear multiple times in this enumeration, indicating that multiple fields with that name exist in this header.


values

public Iterable<String> values(String name)

values

public Iterable<String> values(Header name)

addValue

public DataChunk addValue(String name)
Create a new named header , return the MessageBytes container for the new value


addValue

public DataChunk addValue(Header header)
Create a new named header , return the MessageBytes container for the new value


addValue

public DataChunk addValue(Buffer buffer,
                          int startN,
                          int len)
Create a new named header using un-translated byte[]. The conversion to chars can be delayed until encoding is known.


setValue

public DataChunk setValue(String name)
Allow "set" operations - return a DataChunk container for the header value ( existing header or new if this .


setValue

public DataChunk setValue(Header header)
Allow "set" operations - return a DataChunk container for the header value ( existing header or new if this .


getValue

public DataChunk getValue(String name)
Finds and returns a header field with the given name. If no such field exists, null is returned. If more than one such field is in the header, an arbitrary one is returned.


getValue

public DataChunk getValue(Header header)
Finds and returns a header field with the given name. If no such field exists, null is returned. If more than one such field is in the header, an arbitrary one is returned.


getHeader

public String getHeader(String name)

getHeader

public String getHeader(Header header)

removeHeader

public void removeHeader(String name)
Removes a header field with the specified name. Does nothing if such a field could not be found.

Parameters:
name - the name of the header field to be removed

removeHeader

public void removeHeader(Header header)

removeHeader

public void removeHeader(String name,
                         String str)
Removes the headers with the given name whose values contain the given string.

Parameters:
name - The name of the headers to be removed
str - The string to check the header values against

removeHeaderMatches

public void removeHeaderMatches(String name,
                                String regex)
Removes the headers with the given name whose values contain the given string.

Parameters:
name - The name of the headers to be removed
regex - The regex string to check the header values against

removeHeaderMatches

public void removeHeaderMatches(Header header,
                                String regex)
Removes the headers with the given name whose values contain the given string.

Parameters:
header - The name of the Headers to be removed
regex - The regex string to check the header values against

setMaxNumHeaders

public void setMaxNumHeaders(int maxNumHeaders)

getMaxNumHeaders

public int getMaxNumHeaders()


Copyright © 2012 Oracle Corporation. All Rights Reserved.