org.apache.tomcat.util.http

Class MimeHeaders


public class MimeHeaders
extends java.lang.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 MessageByte for Fileds - 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_ MessageByte-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

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

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 )

Constructor Summary

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

Method Summary

MessageBytes
addValue(String name)
Create a new named header , return the MessageBytes container for the new value
MessageBytes
addValue(b[] , int startN, int len)
Create a new named header using un-translated byte[].
MessageBytes
addValue(c[] , int startN, int len)
Create a new named header using translated char[].
void
clear()
Clears all header fields.
int
findHeader(String name, int starting)
Find the index of a header with the given name.
String
getHeader(String name)
MessageBytes
getName(int n)
Returns the Nth header name, or null if there is no such header.
MessageBytes
getValue(String name)
Finds and returns a header field with the given name.
MessageBytes
getValue(int n)
Returns the Nth header value, or null if there is no such header.
Enumeration
names()
Returns an enumeration of strings representing the header field names.
void
recycle()
Clears all header fields.
void
removeHeader(String name)
Removes a header field with the specified name.
MessageBytes
setValue(String name)
Allow "set" operations - return a MessageBytes 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.
Enumeration
values(String name)

Field Details

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 )

Field Value:
8

Constructor Details

MimeHeaders

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

Method Details

addValue

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


addValue

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


addValue

public MessageBytes addValue(c[] ,
                             int startN,
                             int len)
Create a new named header using translated char[].


clear

public void clear()
Clears all header fields.


findHeader

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


getHeader

public String getHeader(String name)


getName

public MessageBytes 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 MessageBytes 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 MessageBytes 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.


names

public Enumeration 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.


recycle

public void recycle()
Clears all header fields.


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


setValue

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


size

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


toString

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


values

public Enumeration values(String name)


Copyright B) 2000-2003 Apache Software Foundation. All Rights Reserved.