//
// Copyright (c) 2006, Brian Frank and Andy Frank
// Licensed under the Academic Free License version 3.0
//
// History:
// 21 Mar 06 Andy Frank Creation
//
using concurrent
**
** Weblet services a web request.
**
** See [pod doc]`pod-doc#weblet`.
**
mixin Weblet
{
//////////////////////////////////////////////////////////////////////////
// Request/Response
//////////////////////////////////////////////////////////////////////////
**
** The WebReq instance for this current web request. Raise an exception
** if the current actor thread is not serving a web request.
**
virtual WebReq req()
{
try
return Actor.locals["web.req"]
catch (NullErr e)
throw Err("No web request active in thread")
}
**
** The WebRes instance for this current web request. Raise an exception
** if the current actor thread is not serving a web request.
**
virtual WebRes res()
{
try
return Actor.locals["web.res"]
catch (NullErr e)
throw Err("No web request active in thread")
}
//////////////////////////////////////////////////////////////////////////
// Service Methods
//////////////////////////////////////////////////////////////////////////
**
** Service a web request. The default implementation routes
** to `onGet`, `onPost`, etc based on the request's method.
**
virtual Void onService()
{
switch (req.method)
{
case "GET": onGet
case "HEAD": onHead
case "POST": onPost
case "PUT": onPut
case "DELETE": onDelete
case "OPTIONS": onOptions
case "TRACE": onTrace
default: res.sendErr(501)
}
}
**
** Convenience method to respond to a GET request.
** Default implementation returns a 501 Not implemented error.
**
virtual Void onGet()
{
res.sendErr(501)
}
**
** Convenience method to respond to a HEAD request.
** Default implementation returns a 501 Not implemented error.
**
// TODO - make work like servlets
virtual Void onHead()
{
res.sendErr(501)
}
**
** Convenience method to respond to a POST request.
** Default implementation returns a 501 Not implemented error.
**
virtual Void onPost()
{
res.sendErr(501)
}
**
** Convenience method to respond to a PUT request.
** Default implementation returns a 501 Not implemented error.
**
virtual Void onPut()
{
res.sendErr(501)
}
**
** Convenience method to respond to a DELETE request.
** Default implementation returns a 501 Not implemented error.
**
virtual Void onDelete()
{
res.sendErr(501)
}
**
** Convenience method to respond to a OPTIONS request.
** Default implementation returns a 501 Not implemented error.
**
virtual Void onOptions()
{
res.sendErr(501)
}
**
** Convenience method to respond to a TRACE request.
** Default implementation returns a 501 Not implemented error.
**
virtual Void onTrace()
{
res.sendErr(501)
}
}