gnu.kawa.servlet
Class HttpRequestContext

java.lang.Object
  extended by gnu.kawa.servlet.HttpRequestContext
Direct Known Subclasses:
KawaHttpHandler.Context, KawaServlet.Context

public abstract class HttpRequestContext
extends java.lang.Object

A representation of an http request as it is being handled. It abstracts over different http server's API - specially, there are are concrete implementations on top of JDK6's com.sun.net.httpserver, javax.servlet.http, and CGI (on top of servlets).


Field Summary
static int HTTP_NOT_FOUND
           
static int HTTP_OK
           
static int importServletDefinitions
          This is a bit of a kludge, to import servlet functions into Scheme.
protected static java.lang.ThreadLocal<HttpRequestContext> instance
           
 int statusCode
           
 java.lang.String statusReasonPhrase
           
 
Constructor Summary
HttpRequestContext()
           
 
Method Summary
abstract  java.lang.Object getAttribute(java.lang.String name)
          Get attribute from the server context.
 ServletPrinter getConsumer()
           
abstract  java.lang.String getContextPath()
          Returns the context path, relative to the server root.
static HttpRequestContext getInstance()
           
static HttpRequestContext getInstance(java.lang.String command)
           
 java.net.InetAddress getLocalHost()
           
 java.lang.String getLocalIPAddress()
           
 java.lang.String getLocalPath()
          Returns the remainder of the request path, relative to the script.
abstract  int getLocalPort()
           
 java.net.InetSocketAddress getLocalSocketAddress()
           
abstract  java.lang.String getPathTranslated()
           
abstract  java.lang.String getQueryString()
           
abstract  java.net.InetAddress getRemoteHost()
           
abstract  java.lang.String getRemoteIPAddress()
           
abstract  int getRemotePort()
           
 java.net.InetSocketAddress getRemoteSocketAddress()
           
 java.lang.String getRequestBodyChars()
           
abstract  java.lang.String getRequestHeader(java.lang.String name)
           
abstract  java.util.Map<java.lang.String,java.util.List<java.lang.String>> getRequestHeaders()
           
abstract  java.util.List<java.lang.String> getRequestHeaders(java.lang.String name)
           
abstract  java.lang.String getRequestMethod()
           
 java.lang.String getRequestParameter(java.lang.String name)
           
abstract  java.util.Map<java.lang.String,java.util.List<java.lang.String>> getRequestParameters()
           
 java.lang.String getRequestPath()
           
 InPort getRequestPort()
           
 java.lang.String getRequestScheme()
           
abstract  java.io.InputStream getRequestStream()
           
abstract  java.net.URI getRequestURI()
           
 java.lang.StringBuffer getRequestURLBuffer()
           
abstract  java.net.URL getResourceURL(java.lang.String path)
          Returns the URL of a resource.
abstract  java.io.OutputStream getResponseStream()
          Return an OutputStream for the result body.
 java.lang.String getScriptPath()
          Returns the path of the script, relative to the context.
abstract  void log(java.lang.String message)
           
abstract  void log(java.lang.String message, java.lang.Throwable ex)
           
protected  java.lang.String normalizeToContext(java.lang.String path)
           
abstract  boolean reset(boolean headersAlso)
          Try to reset (delete) any response generated so far.
 void sendNotFound(java.lang.String path)
           
abstract  void sendResponseHeaders(int reasonCode, java.lang.String reasonPhrase, long responseLength)
          Send headers.
abstract  void setAttribute(java.lang.String name, java.lang.Object value)
          Set attribute in the server context.
 void setContentType(java.lang.String type)
           
static void setInstance(HttpRequestContext ctx)
           
abstract  void setResponseHeader(java.lang.String name, java.lang.String value)
           
 void setScriptAndLocalPath(java.lang.String scriptPath, java.lang.String localPath)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

HTTP_OK

public static final int HTTP_OK
See Also:
Constant Field Values

HTTP_NOT_FOUND

public static final int HTTP_NOT_FOUND
See Also:
Constant Field Values

statusCode

public int statusCode

statusReasonPhrase

public java.lang.String statusReasonPhrase

importServletDefinitions

public static int importServletDefinitions
This is a bit of a kludge, to import servlet functions into Scheme. (The kludge is that we really shouldn't be using a static.) If importServletDefinitions == 1, then we're running in (or compiling for) a web server context; if it is 2 we specifically support servlets.


instance

protected static final java.lang.ThreadLocal<HttpRequestContext> instance
Constructor Detail

HttpRequestContext

public HttpRequestContext()
Method Detail

getInstance

public static HttpRequestContext getInstance()

getInstance

public static HttpRequestContext getInstance(java.lang.String command)

setInstance

public static void setInstance(HttpRequestContext ctx)

getRequestStream

public abstract java.io.InputStream getRequestStream()

getRequestPort

public InPort getRequestPort()

getRequestBodyChars

public java.lang.String getRequestBodyChars()
                                     throws java.io.IOException
Throws:
java.io.IOException

getResponseStream

public abstract java.io.OutputStream getResponseStream()
Return an OutputStream for the result body. Multiple calls will return the same OutputStream.


getConsumer

public ServletPrinter getConsumer()
                           throws java.io.IOException
Throws:
java.io.IOException

reset

public abstract boolean reset(boolean headersAlso)
Try to reset (delete) any response generated so far.

Parameters:
headersAlso - if response headers should also be reset.
Returns:
true on success, false if it's too late.

getRequestParameter

public java.lang.String getRequestParameter(java.lang.String name)

getRequestParameters

public abstract java.util.Map<java.lang.String,java.util.List<java.lang.String>> getRequestParameters()

getRequestURI

public abstract java.net.URI getRequestURI()

getContextPath

public abstract java.lang.String getContextPath()
Returns the context path, relative to the server root. This is an initial substring of the getRequestPath(). Like ServletContext#getContextPath, but ends with a '/'. The string getRequestURI() is the same as the concatenation of getContextPath(), getScriptPath(), and {code getLocationPath()}.


getScriptPath

public java.lang.String getScriptPath()
Returns the path of the script, relative to the context. Like ServletRequestt#getServletPath, but ends with a '/', and does not start with one. (The reason for this is to produce URIs that work better with operations like resolve-uri.)


getLocalPath

public java.lang.String getLocalPath()
Returns the remainder of the request path, relative to the script.


setScriptAndLocalPath

public void setScriptAndLocalPath(java.lang.String scriptPath,
                                  java.lang.String localPath)

getPathTranslated

public abstract java.lang.String getPathTranslated()

getRequestPath

public java.lang.String getRequestPath()

getRequestScheme

public java.lang.String getRequestScheme()

getLocalSocketAddress

public java.net.InetSocketAddress getLocalSocketAddress()

getLocalIPAddress

public java.lang.String getLocalIPAddress()

getLocalHost

public java.net.InetAddress getLocalHost()

getLocalPort

public abstract int getLocalPort()

getRemoteSocketAddress

public java.net.InetSocketAddress getRemoteSocketAddress()

getRemoteHost

public abstract java.net.InetAddress getRemoteHost()

getRemoteIPAddress

public abstract java.lang.String getRemoteIPAddress()

getRemotePort

public abstract int getRemotePort()

getRequestURLBuffer

public java.lang.StringBuffer getRequestURLBuffer()

getQueryString

public abstract java.lang.String getQueryString()

getRequestMethod

public abstract java.lang.String getRequestMethod()

getRequestHeader

public abstract java.lang.String getRequestHeader(java.lang.String name)

getRequestHeaders

public abstract java.util.List<java.lang.String> getRequestHeaders(java.lang.String name)

getRequestHeaders

public abstract java.util.Map<java.lang.String,java.util.List<java.lang.String>> getRequestHeaders()

setResponseHeader

public abstract void setResponseHeader(java.lang.String name,
                                       java.lang.String value)

setContentType

public void setContentType(java.lang.String type)

normalizeToContext

protected java.lang.String normalizeToContext(java.lang.String path)

getResourceURL

public abstract java.net.URL getResourceURL(java.lang.String path)
Returns the URL of a resource. The resource is relative to the script path, if the path is relative; otherwise (if it starts with a '/' it is relative to the context path.


getAttribute

public abstract java.lang.Object getAttribute(java.lang.String name)
Get attribute from the server context.


setAttribute

public abstract void setAttribute(java.lang.String name,
                                  java.lang.Object value)
Set attribute in the server context.


sendResponseHeaders

public abstract void sendResponseHeaders(int reasonCode,
                                         java.lang.String reasonPhrase,
                                         long responseLength)
                                  throws java.io.IOException
Send headers.

Parameters:
reasonCode - response code - e.g. 200 for OK.
reasonPhrase - response string - e.g. "OK" or "Not Found".
responseLength - response length in bytes, or -1 (unspecified). Note this is different from HttpExchange.sendResponseHeaders. This method must be called before getResponseStream. Implementations should set statusCode to STATUS_SENT.
Throws:
java.io.IOException

sendNotFound

public void sendNotFound(java.lang.String path)
                  throws java.io.IOException
Throws:
java.io.IOException

log

public abstract void log(java.lang.String message)

log

public abstract void log(java.lang.String message,
                         java.lang.Throwable ex)