Package org.apache.tomcat.util.http
Class MimeHeaders
- java.lang.Object
-
- org.apache.tomcat.util.http.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 MessageByte 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_ MessageByte-based Fields, and reduce to 0 the memory overhead of tomcat.
TODO:
- one-buffer parsing - for http (other protocols don't need that)
- remove unused methods
- External enumerations, with 0 GC.
- use HeaderName ID
- Author:
- dac@eng.sun.com, James Todd [gonzo@eng.sun.com], Costin Manolache, kevin seguin
-
-
Field Summary
Fields Modifier and Type Field Description static intDEFAULT_HEADER_SIZEInitial size - should be == average number of headers per request XXX make it configurable ( fine-tuning of web-apps )
-
Constructor Summary
Constructors Constructor Description MimeHeaders()Creates a new MimeHeaders object using a default buffer size.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description MessageBytesaddValue(byte[] b, int startN, int len)Create a new named header using un-translated byte[].MessageBytesaddValue(String name)Create a new named header , return the MessageBytes container for the new valuevoidclear()Clears all header fields.voidduplicate(MimeHeaders source)intfindHeader(String name, int starting)Find the index of a header with the given name.StringgetHeader(String name)MessageBytesgetName(int n)MessageBytesgetUniqueValue(String name)Finds and returns a unique header field with the given name.MessageBytesgetValue(int n)MessageBytesgetValue(String name)Finds and returns a header field with the given name.Enumeration<String>names()Returns an enumeration of strings representing the header field names.voidrecycle()Clears all header fields.voidremoveHeader(int idx)Reset, move to the end and then reduce count by 1.voidremoveHeader(String name)Removes a header field with the specified name.voidsetLimit(int limit)Set limit on the number of header fields.MessageBytessetValue(String name)Allow "set" operations, which removes all current values for this header.intsize()StringtoString()EXPENSIVE!!!Enumeration<String>values(String name)
-
-
-
Field Detail
-
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
-
-
Method Detail
-
setLimit
public void setLimit(int limit)
Set limit on the number of header fields.- Parameters:
limit- The new limit
-
recycle
public void recycle()
Clears all header fields.
-
clear
public void clear()
Clears all header fields.
-
toString
public String toString()
EXPENSIVE!!! only for debugging.
-
duplicate
public void duplicate(MimeHeaders source) throws IOException
- Throws:
IOException
-
size
public int size()
- Returns:
- the current number of header fields.
-
getName
public MessageBytes getName(int n)
- Parameters:
n- The header index- 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(int n)
- Parameters:
n- The header index- Returns:
- the Nth header value, or null if there is no such header. This may be used to iterate through all header fields.
-
findHeader
public int findHeader(String name, int starting)
Find the index of a header with the given name.- Parameters:
name- The header namestarting- Index on which to start looking- Returns:
- the header index
-
names
public Enumeration<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.- Returns:
- the enumeration
-
values
public Enumeration<String> values(String name)
-
addValue
public MessageBytes addValue(String name)
Create a new named header , return the MessageBytes container for the new value- Parameters:
name- The header name- Returns:
- the message bytes container for the value
-
addValue
public MessageBytes addValue(byte[] 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.- Parameters:
b- The header name bytesstartN- Offsetlen- Length- Returns:
- the message bytes container for the value
-
setValue
public MessageBytes setValue(String name)
Allow "set" operations, which removes all current values for this header.- Parameters:
name- The header name- Returns:
- the message bytes container for the value
-
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.- Parameters:
name- The header name- Returns:
- the value
-
getUniqueValue
public MessageBytes getUniqueValue(String name)
Finds and returns a unique header field with the given name. If no such field exists, null is returned. If the specified header field is not unique then anIllegalArgumentExceptionis thrown.- Parameters:
name- The header name- Returns:
- the value if unique
- Throws:
IllegalArgumentException- if the header has multiple values
-
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(int idx)
Reset, move to the end and then reduce count by 1.- Parameters:
idx- the index of the header to remove.
-
-