logo

abstract class

web::Weblet

sys::Obj
  web::Weblet
//
// Copyright (c) 2006, Brian Frank and Andy Frank
// Licensed under the Academic Free License version 3.0
//
// History:
//   21 Mar 06  Andy Frank  Creation
//

**
** Weblet services a web request.
**
** See [docLib::Web]`docLib::Web#weblet`
**
abstract class Weblet
{

//////////////////////////////////////////////////////////////////////////
// Constructor
//////////////////////////////////////////////////////////////////////////

  **
  ** Default constructor.
  **
  new make()
  {
    req = (WebReq)Thread.locals["web.req"]
    res = (WebRes)Thread.locals["web.res"]
  }

//////////////////////////////////////////////////////////////////////////
// Request/Response
//////////////////////////////////////////////////////////////////////////

  **
  ** The WebReq instance for this request.
  **
  @transient readonly WebReq req

  **
  ** The WebRes instance for this request.
  **
  @transient readonly WebRes res

//////////////////////////////////////////////////////////////////////////
// Service Methods
//////////////////////////////////////////////////////////////////////////

  **
  ** Service a web request. The default implementation of this
  ** method calls the method that matches WebReq.method.
  **
  virtual Void service()
  {
    if (req.method == "GET") doGet
    else if (req.method == "HEAD") doHead
    else if (req.method == "POST") doPost
    else if (req.method == "PUT") doPut
    else if (req.method == "DELETE") doDelete
    else if (req.method == "OPTIONS") doOptions
    else if (req.method == "TRACE") doTrace
    else throw UnsupportedErr.make("Unsupported method \"$req.method\".")
  }

  **
  ** Convenience method to respond to a GET request.
  ** Default implementation returns a 501 Not implemented error.
  **
  virtual Void doGet()
  {
    res.sendError(501)
  }

  **
  ** Convenience method to respond to a HEAD request.
  ** Default implementation returns a 501 Not implemented error.
  **
  // TODO - make work like servlets
  virtual Void doHead()
  {
    res.sendError(501)
  }

  **
  ** Convenience method to respond to a POST request.
  ** Default implementation returns a 501 Not implemented error.
  **
  virtual Void doPost()
  {
    res.sendError(501)
  }

  **
  ** Convenience method to respond to a PUT request.
  ** Default implementation returns a 501 Not implemented error.
  **
  virtual Void doPut()
  {
    res.sendError(501)
  }

  **
  ** Convenience method to respond to a DELETE request.
  ** Default implementation returns a 501 Not implemented error.
  **
  virtual Void doDelete()
  {
    res.sendError(501)
  }

  **
  ** Convenience method to respond to a OPTIONS request.
  ** Default implementation returns a 501 Not implemented error.
  **
  virtual Void doOptions()
  {
    res.sendError(501)
  }

  **
  ** Convenience method to respond to a TRACE request.
  ** Default implementation returns a 501 Not implemented error.
  **
  virtual Void doTrace()
  {
    res.sendError(501)
  }

}