org.mortbay.http
Class HttpMessage

java.lang.Object
  extended by org.mortbay.http.HttpMessage
Direct Known Subclasses:
HttpRequest, HttpResponse

public abstract class HttpMessage
extends java.lang.Object

HTTP Message base. This class forms the basis of HTTP requests and replies. It provides header fields, content and optional trailer fields, while managing the state of the message.

Version:
$Id: HttpMessage.java,v 1.41 2006/04/04 22:28:02 gregwilkins Exp $
Author:
Greg Wilkins (gregw)

Nested Class Summary
static interface HttpMessage.HeaderWriter
           
 
Field Summary
static java.lang.String __HTTP_0_9
           
static java.lang.String __HTTP_1_0
           
static java.lang.String __HTTP_1_1
           
static java.lang.String __HTTP_1_X
           
static int __MSG_BAD
          Message States.
static int __MSG_EDITABLE
          Message States.
static int __MSG_RECEIVED
          Message States.
static int __MSG_SENDING
          Message States.
static int __MSG_SENT
          Message States.
static java.lang.String __SCHEME
           
static java.lang.String __SSL_SCHEME
           
static java.lang.String[] __state
           
protected  java.util.Map _attributes
           
protected  java.lang.String _characterEncoding
           
protected  HttpConnection _connection
           
protected  int _dotVersion
           
protected  HttpFields _header
           
protected  java.lang.String _mimeType
           
protected  int _state
           
protected  java.lang.String _version
           
protected  java.lang.Object _wrapper
           
 
Constructor Summary
protected HttpMessage()
          Constructor.
protected HttpMessage(HttpConnection connection)
          Constructor.
 
Method Summary
 void addDateField(java.lang.String name, java.util.Date date)
          Adds the value of a date field.
 void addDateField(java.lang.String name, long date)
          Add the value of a date field.
 void addField(java.lang.String name, java.lang.String value)
          Add to a multi-value field value.
 void addIntField(java.lang.String name, int value)
          Adds the value of an integer field.
 boolean containsField(java.lang.String name)
          Does the header or trailer contain a field?
 void destroy()
          Destroy the message.
 java.lang.Object getAttribute(java.lang.String name)
          Get a request attribute.
 java.util.Enumeration getAttributeNames()
          Get Attribute names.
 java.lang.String getCharacterEncoding()
          Character Encoding.
 int getContentLength()
           
 java.lang.String getContentType()
           
 long getDateField(java.lang.String name)
          Get a header as a date value.
 int getDotVersion()
          Get the protocol version.
 java.lang.String getField(java.lang.String name)
          Get a message field.
 java.util.Enumeration getFieldNames()
          Get field names.
 java.util.Enumeration getFieldValues(java.lang.String name)
          Get a multi valued message field.
 java.util.Enumeration getFieldValues(java.lang.String name, java.lang.String separators)
          Get a multi valued message field.
 HttpFields getHeader()
          Get the HTTP header fields.
 HttpConnection getHttpConnection()
           
 java.io.InputStream getInputStream()
           
 int getIntField(java.lang.String name)
          Get a field as an integer value.
 java.lang.String getMimeType()
          Mime Type.
 java.io.OutputStream getOutputStream()
           
 int getState()
          Get the message state.
 java.lang.String getVersion()
          Get the protocol version.
 java.lang.Object getWrapper()
          Get an associated wrapper object.
 boolean isCommitted()
           
 boolean isDirty()
           
 void removeAttribute(java.lang.String name)
          Remove a request attribute.
 java.lang.String removeField(java.lang.String name)
          Remove a field.
protected  void reset()
           
 java.lang.Object setAttribute(java.lang.String name, java.lang.Object attribute)
          Set a request attribute.
 void setCharacterEncoding(java.lang.String encoding, boolean setField)
          Set Character Encoding.
 void setContentLength(int len)
           
 void setContentType(java.lang.String contentType)
           
 void setDateField(java.lang.String name, java.util.Date date)
          Sets the value of a date field.
 void setDateField(java.lang.String name, long date)
          Sets the value of a date field.
 void setField(java.lang.String name, java.util.List value)
          Set a multi-value field value.
 java.lang.String setField(java.lang.String name, java.lang.String value)
          Set a field value.
 void setIntField(java.lang.String name, int value)
          Sets the value of an integer field.
 int setState(int state)
          Set the message state.
 void setVersion(java.lang.String version)
          Set the request version
 void setWrapper(java.lang.Object wrapper)
          Set a wrapper object.
 java.lang.String toString()
          Convert to String.
 void updateMimeType()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

__SCHEME

public static final java.lang.String __SCHEME
See Also:
Constant Field Values

__SSL_SCHEME

public static final java.lang.String __SSL_SCHEME
See Also:
Constant Field Values

__HTTP_0_9

public static final java.lang.String __HTTP_0_9
See Also:
Constant Field Values

__HTTP_1_0

public static final java.lang.String __HTTP_1_0
See Also:
Constant Field Values

__HTTP_1_1

public static final java.lang.String __HTTP_1_1
See Also:
Constant Field Values

__HTTP_1_X

public static final java.lang.String __HTTP_1_X
See Also:
Constant Field Values

__MSG_EDITABLE

public static final int __MSG_EDITABLE
Message States.

See Also:
Constant Field Values

__MSG_BAD

public static final int __MSG_BAD
Message States.

See Also:
Constant Field Values

__MSG_RECEIVED

public static final int __MSG_RECEIVED
Message States.

See Also:
Constant Field Values

__MSG_SENDING

public static final int __MSG_SENDING
Message States.

See Also:
Constant Field Values

__MSG_SENT

public static final int __MSG_SENT
Message States.

See Also:
Constant Field Values

__state

public static final java.lang.String[] __state

_state

protected int _state

_version

protected java.lang.String _version

_dotVersion

protected int _dotVersion

_header

protected HttpFields _header

_connection

protected HttpConnection _connection

_characterEncoding

protected java.lang.String _characterEncoding

_mimeType

protected java.lang.String _mimeType

_wrapper

protected java.lang.Object _wrapper

_attributes

protected java.util.Map _attributes
Constructor Detail

HttpMessage

protected HttpMessage()
Constructor.


HttpMessage

protected HttpMessage(HttpConnection connection)
Constructor.

Method Detail

setWrapper

public void setWrapper(java.lang.Object wrapper)
Set a wrapper object. A wrapper object is an object associated with this message and presents it with an different interface. The primary example of a HttpRequest facade is ServletHttpRequest. A single facade object may be associated with the message with this call and retrieved with the getFacade method.


getWrapper

public java.lang.Object getWrapper()
Get an associated wrapper object.

Returns:
Wrapper message or null.

reset

protected void reset()

getHttpConnection

public HttpConnection getHttpConnection()

getInputStream

public java.io.InputStream getInputStream()

getOutputStream

public java.io.OutputStream getOutputStream()

getState

public int getState()
Get the message state.
 __MSG_EDITABLE = 0 - Created locally, all set methods enabled
 __MSG_BAD      = 1 - Bad message or send failure.
 __MSG_RECEIVED = 2 - Received from connection.
 __MSG_SENDING  = 3 - Headers sent.
 __MSG_SENT     = 4 - Entity and trailers sent.
 

Returns:
the state.

setState

public int setState(int state)
Set the message state. This method should be used by experts only as it can prevent normal handling of a request/response.

Parameters:
state - The new state
Returns:
the last state.

getVersion

public java.lang.String getVersion()
Get the protocol version.

Returns:
return the version.

getDotVersion

public int getDotVersion()
Get the protocol version.

Returns:
return the version dot (0.9=-1 1.0=0 1.1=1)

getFieldNames

public java.util.Enumeration getFieldNames()
Get field names.

Returns:
Enumeration of Field Names

containsField

public boolean containsField(java.lang.String name)
Does the header or trailer contain a field?

Parameters:
name - Name of the field
Returns:
True if contained in header or trailer.

getField

public java.lang.String getField(java.lang.String name)
Get a message field. Get a field from a message header. If no header field is found, trailer fields are searched.

Parameters:
name - The field name
Returns:
field value or null

getFieldValues

public java.util.Enumeration getFieldValues(java.lang.String name)
Get a multi valued message field. Get a field from a message header.

Parameters:
name - The field name
Returns:
Enumeration of field values or null

getFieldValues

public java.util.Enumeration getFieldValues(java.lang.String name,
                                            java.lang.String separators)
Get a multi valued message field. Get a field from a message header.

Parameters:
name - The field name
separators - String of separators.
Returns:
Enumeration of field values or null

setField

public java.lang.String setField(java.lang.String name,
                                 java.lang.String value)
Set a field value. If the message is editable, then a header field is set. Otherwise if the message is sending and a HTTP/1.1 version, then a trailer field is set.

Parameters:
name - Name of field
value - New value of field
Returns:
Old value of field

setField

public void setField(java.lang.String name,
                     java.util.List value)
Set a multi-value field value. If the message is editable, then a header field is set. Otherwise if the meesage is sending and a HTTP/1.1 version, then a trailer field is set.

Parameters:
name - Name of field
value - New values of field

addField

public void addField(java.lang.String name,
                     java.lang.String value)
              throws java.lang.IllegalStateException
Add to a multi-value field value. If the message is editable, then a header field is set. Otherwise if the meesage is sending and a HTTP/1.1 version, then a trailer field is set.

Parameters:
name - Name of field
value - New value to add to the field
Throws:
java.lang.IllegalStateException - Not editable or sending 1.1 with trailers

getIntField

public int getIntField(java.lang.String name)
Get a field as an integer value. Look in header and trailer fields. Returns the value of an integer field, or -1 if not found. The case of the field name is ignored.

Parameters:
name - the case-insensitive field name

setIntField

public void setIntField(java.lang.String name,
                        int value)
Sets the value of an integer field. Header or Trailer fields are set depending on message state.

Parameters:
name - the field name
value - the field integer value

addIntField

public void addIntField(java.lang.String name,
                        int value)
Adds the value of an integer field. Header or Trailer fields are set depending on message state.

Parameters:
name - the field name
value - the field integer value

getDateField

public long getDateField(java.lang.String name)
Get a header as a date value. Look in header and trailer fields. Returns the value of a date field, or -1 if not found. The case of the field name is ignored.

Parameters:
name - the case-insensitive field name

setDateField

public void setDateField(java.lang.String name,
                         java.util.Date date)
Sets the value of a date field. Header or Trailer fields are set depending on message state.

Parameters:
name - the field name
date - the field date value

addDateField

public void addDateField(java.lang.String name,
                         java.util.Date date)
Adds the value of a date field. Header or Trailer fields are set depending on message state.

Parameters:
name - the field name
date - the field date value

setDateField

public void setDateField(java.lang.String name,
                         long date)
Sets the value of a date field. Header or Trailer fields are set depending on message state.

Parameters:
name - the field name
date - the field date value

addDateField

public void addDateField(java.lang.String name,
                         long date)
Add the value of a date field. Header or Trailer fields are set depending on message state.

Parameters:
name - the field name
date - the field date value
Throws:
java.lang.IllegalStateException - Not editable or sending 1.1 with trailers

removeField

public java.lang.String removeField(java.lang.String name)
                             throws java.lang.IllegalStateException
Remove a field. If the message is editable, then a header field is removed. Otherwise if the message is sending and a HTTP/1.1 version, then a trailer field is removed.

Parameters:
name - Name of field
Returns:
Old value of field
Throws:
java.lang.IllegalStateException

setVersion

public void setVersion(java.lang.String version)
Set the request version

Parameters:
version - the HTTP version string (eg HTTP/1.1)
Throws:
java.lang.IllegalStateException - message is not EDITABLE

getHeader

public HttpFields getHeader()
Get the HTTP header fields.

Returns:
Header or null

getContentLength

public int getContentLength()

setContentLength

public void setContentLength(int len)

getCharacterEncoding

public java.lang.String getCharacterEncoding()
Character Encoding. The character encoding is extracted from the ContentType field when set.

Returns:
Character Encoding or null

setCharacterEncoding

public void setCharacterEncoding(java.lang.String encoding,
                                 boolean setField)
Set Character Encoding.

Parameters:
encoding - An encoding that can override the encoding set from the ContentType field.

getContentType

public java.lang.String getContentType()

setContentType

public void setContentType(java.lang.String contentType)

updateMimeType

public void updateMimeType()

getMimeType

public java.lang.String getMimeType()
Mime Type. The mime type is extracted from the contenttype field when set.

Returns:
Content type without parameters

destroy

public void destroy()
Destroy the message. Help the garbage collector by nulling everything that we can.


toString

public java.lang.String toString()
Convert to String. The message header is converted to a String.

Overrides:
toString in class java.lang.Object
Returns:
String

isCommitted

public boolean isCommitted()

isDirty

public boolean isDirty()
Returns:
true if the message has been modified.

getAttribute

public java.lang.Object getAttribute(java.lang.String name)
Get a request attribute.

Parameters:
name - Attribute name
Returns:
Attribute value

setAttribute

public java.lang.Object setAttribute(java.lang.String name,
                                     java.lang.Object attribute)
Set a request attribute.

Parameters:
name - Attribute name
attribute - Attribute value
Returns:
Previous Attribute value

getAttributeNames

public java.util.Enumeration getAttributeNames()
Get Attribute names.

Returns:
Enumeration of Strings

removeAttribute

public void removeAttribute(java.lang.String name)
Remove a request attribute.

Parameters:
name - Attribute name


Copyright © 2004 Mortbay Consulting Pty. Ltd. All Rights Reserved.