## org.mortbay.http
Class HttpConnection

    java.lang.Object
      |
      +--org.mortbay.http.HttpConnection

All Implemented Interfaces:
  OutputObserver

Direct Known Subclasses:
  AJP13Connection

public class HttpConnection
extends java.lang.Object
implements OutputObserver

A HTTP Connection. This class provides the generic HTTP handling for a connection to a HTTP server. An instance of HttpConnection is normally created by a HttpListener and then given control in order to run the protocol handling before and after passing a request to the HttpServer of the HttpListener. This class is not synchronized as it should only ever be known to a single thread.

Version:
  $Id: HttpConnection.java,v 1.58.2.5 2004/04/07 09:05:25 gregwilkins Exp $
Author:
  Greg Wilkins (gregw)
See Also:
  `HttpListener`, `HttpServer`

Field Summary

Fields inherited from interface org.mortbay.util.OutputObserver
`__CLOSED, __CLOSING, __COMMITING, __FIRST_WRITE, __RESET_BUFFER`

Constructor Summary
`HttpConnection(HttpListener listener, java.net.InetAddress remoteAddr, java.io.InputStream in, java.io.OutputStream out, java.lang.Object connection)` Constructor.

Method Summary
`void` `close()` Close the connection.
`void` `forceClose()` Force the connection to not be persistent.
`java.lang.Object` `getConnection()` Get the underlying connection object.
`java.lang.String` `getDefaultScheme()` Get the listeners Default scheme.
`HttpServer` `getHttpServer()` Get the listeners HttpServer .
`HttpTunnel` `getHttpTunnel()`
`HttpInputStream` `getInputStream()` Get the connections InputStream.
`HttpListener` `getListener()` Get the connections listener.
`java.lang.Object` `getObject()` Get associated object.
`HttpOutputStream` `getOutputStream()` Get the connections OutputStream.
`java.lang.String` `getRemoteAddr()` Get the Remote address.
`java.lang.String` `getRemoteHost()` Get the Remote address.
`java.net.InetAddress` `getRemoteInetAddress()` Get the Remote address.
`HttpRequest` `getRequest()` Get the request.
`HttpResponse` `getResponse()` Get the response.
`java.lang.String` `getServerName()` Get the listeners HttpServer.
`int` `getServerPort()` Get the listeners Port .
`void` `handle()` Handle the connection.
`boolean` `handleNext()` Handle next request off the connection.
`boolean` `isThrottled()`
`void` `outputNotify(java.io.OutputStream out, int action, java.lang.Object ignoredData)` Output Notifications.
`void` `setHttpTunnel(HttpTunnel tunnel)` Set a HttpTunnel for the connection.
`void` `setObject(java.lang.Object o)` Set associated object.
`void` `setThrottled(boolean throttled)`

Methods inherited from class java.lang.Object
`equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### HttpConnection

    public HttpConnection(HttpListener listener,
                          java.net.InetAddress remoteAddr,
                          java.io.InputStream in,
                          java.io.OutputStream out,
                          java.lang.Object connection)

  Constructor.

Parameters:
  `listener` - The listener that created this connection.
  `remoteAddr` - The address of the remote end or null.
  `in` - InputStream to read request(s) from.
  `out` - OutputputStream to write response(s) to.
  `connection` - The underlying connection object, most likely a socket. This is not used by HttpConnection other than to make it available via getConnection().

Method Detail

### getRemoteInetAddress

    public java.net.InetAddress getRemoteInetAddress()

  Get the Remote address.

  Returns:
    the remote address

### getRemoteAddr

    public java.lang.String getRemoteAddr()

  Get the Remote address.

  Returns:
    the remote host name

### getRemoteHost

    public java.lang.String getRemoteHost()

  Get the Remote address.

  Returns:
    the remote host name

### getInputStream

    public HttpInputStream getInputStream()

  Get the connections InputStream.

  Returns:
    the connections InputStream

### getOutputStream

    public HttpOutputStream getOutputStream()

  Get the connections OutputStream.

  Returns:
    the connections OutputStream

### getConnection

    public java.lang.Object getConnection()

  Get the underlying connection object. This opaque object, most likely a socket. This is not used by HttpConnection other than to make it available via getConnection().

  Returns:
    Connection abject

### getRequest

    public HttpRequest getRequest()

  Get the request.

  Returns:
    the request

### getResponse

    public HttpResponse getResponse()

  Get the response.

  Returns:
    the response

### forceClose

    public void forceClose()

  Force the connection to not be persistent.

### close

    public void close()
               throws java.io.IOException

  Close the connection. This method calls close on the input and output streams and interrupts any thread in the handle method. may be specialized to close sockets etc.

  Throws:
    `java.io.IOException`

### getListener

    public HttpListener getListener()

  Get the connections listener.

  Returns:
    HttpListener that created this Connection.

### getHttpServer

    public HttpServer getHttpServer()

  Get the listeners HttpServer . Conveniance method equivalent to getListener().getHttpServer().

  Returns:
    HttpServer.

### getDefaultScheme

    public java.lang.String getDefaultScheme()

  Get the listeners Default scheme. Conveniance method equivalent to getListener().getDefaultProtocol().

  Returns:
    HttpServer.

### getServerName

    public java.lang.String getServerName()

  Get the listeners HttpServer. But if the name is 0.0.0.0, then the real interface address is used.

  Returns:
    HttpServer.

### getServerPort

    public int getServerPort()

  Get the listeners Port . Conveniance method equivalent to getListener().getPort().

  Returns:
    HttpServer.

### isThrottled

    public boolean isThrottled()

  Returns:
    True if this connections state has been altered due to low resources.

### setThrottled

    public void setThrottled(boolean throttled)

  Parameters:
    `throttled` - True if this connections state has been altered due to low resources.

### getObject

    public java.lang.Object getObject()

  Get associated object. Used by a particular HttpListener implementation to associate private datastructures with the connection.

  Returns:
    An object associated with the connecton by setObject.

### setObject

    public void setObject(java.lang.Object o)

  Set associated object. Used by a particular HttpListener implementation to associate private datastructures with the connection.

  Parameters:
    `o` - An object associated with the connecton.

### getHttpTunnel

    public HttpTunnel getHttpTunnel()

  Returns:
    The HttpTunnel set for the connection or null.

### setHttpTunnel

    public void setHttpTunnel(HttpTunnel tunnel)

  Set a HttpTunnel for the connection. A HTTP tunnel is used if the connection is to be taken over for non-HTTP communications. An example of this is the CONNECT method in proxy handling. If a HttpTunnel is set on a connection, then it's handle method is called bu the next call to handleNext().

  Parameters:
    `tunnel` - The HttpTunnel set for the connection or null.

### outputNotify

    public void outputNotify(java.io.OutputStream out,
                             int action,
                             java.lang.Object ignoredData)
                      throws java.io.IOException

  Output Notifications. Trigger header and/or filters from output stream observations. Also finalizes method of indicating response content length. Called as a result of the connection subscribing for notifications to the HttpOutputStream.

  Specified by:
    `outputNotify` in interface `OutputObserver`
  Parameters:
    `out` - The output stream observed.
    `action` - The action.
    `ignoredData` - Data associated with the event.
    `java.io.IOException`
  See Also:
    `HttpOutputStream`

### handle

    public final void handle()

  Handle the connection. Once the connection has been created, this method is called to handle one or more requests that may be received on the connection. The method only returns once all requests have been handled, an error has been returned to the requestor or the connection has been closed. The handleNext() is called in a loop until it returns false.

### handleNext

    public boolean handleNext()

  Handle next request off the connection. The service(request,response) method is called by handle to service each request received on the connection. If the thread is a PoolThread, the thread is set as inactive when waiting for a request.

  If a HttpTunnel has been set on this connection, it's handle method is called and when that completes, false is return from this method.

  The Connection is set as a ThreadLocal of the calling thread and is available via the getHttpConnection() method.

  Returns:
    true if the connection is still open and may provide more requests.

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