logo

abstract class

web::Weblet

sys::Obj
  web::Weblet
   1  //
   2  // Copyright (c) 2006, Brian Frank and Andy Frank
   3  // Licensed under the Academic Free License version 3.0
   4  //
   5  // History:
   6  //   21 Mar 06  Andy Frank  Creation
   7  //
   8  
   9  **
  10  ** Weblet services a web request.
  11  **
  12  abstract class Weblet
  13  {
  14  
  15  //////////////////////////////////////////////////////////////////////////
  16  // Constructor
  17  //////////////////////////////////////////////////////////////////////////
  18  
  19    **
  20    ** Default constructor.
  21    **
  22    new make()
  23    {
  24      req = (WebReq)Thread.locals["web.req"]
  25      res = (WebRes)Thread.locals["web.res"]
  26    }
  27  
  28  //////////////////////////////////////////////////////////////////////////
  29  // Request/Response
  30  //////////////////////////////////////////////////////////////////////////
  31  
  32    **
  33    ** The WebReq instance for this request.
  34    **
  35    readonly WebReq req
  36  
  37    **
  38    ** The WebRes instance for this request.
  39    **
  40    readonly WebRes res
  41  
  42    **
  43    ** Convenience for 'res.out'.
  44    **
  45    WebOutStream out() { return res.out }
  46  
  47  //////////////////////////////////////////////////////////////////////////
  48  // Service Methods
  49  //////////////////////////////////////////////////////////////////////////
  50  
  51    **
  52    ** Service a web request. The default implementation of this
  53    ** method calls the method that matches WebReq.method.
  54    **
  55    virtual Void service()
  56    {
  57      if (req.method == "GET") get
  58      else if (req.method == "HEAD") head
  59      else if (req.method == "POST") post
  60      else if (req.method == "PUT") put
  61      else if (req.method == "DELETE") delete
  62      else if (req.method == "OPTIONS") options
  63      else if (req.method == "TRACE") trace
  64      else throw UnsupportedErr.make("Unsupported method \"$req.method\".")
  65    }
  66  
  67    **
  68    ** Convenience method to respond to a GET request.
  69    ** Default implementation returns a 501 Not implemented error.
  70    **
  71    virtual Void get()
  72    {
  73      res.sendError(501)
  74    }
  75  
  76    **
  77    ** Convenience method to respond to a HEAD request.
  78    ** Default implementation returns a 501 Not implemented error.
  79    **
  80    // TODO - make work like servlets
  81    virtual Void head()
  82    {
  83      res.sendError(501)
  84    }
  85  
  86    **
  87    ** Convenience method to respond to a POST request.
  88    ** Default implementation returns a 501 Not implemented error.
  89    **
  90    virtual Void post()
  91    {
  92      res.sendError(501)
  93    }
  94  
  95    **
  96    ** Convenience method to respond to a PUT request.
  97    ** Default implementation returns a 501 Not implemented error.
  98    **
  99    virtual Void put()
 100    {
 101      res.sendError(501)
 102    }
 103  
 104    **
 105    ** Convenience method to respond to a DELETE request.
 106    ** Default implementation returns a 501 Not implemented error.
 107    **
 108    virtual Void delete()
 109    {
 110      res.sendError(501)
 111    }
 112  
 113    **
 114    ** Convenience method to respond to a OPTIONS request.
 115    ** Default implementation returns a 501 Not implemented error.
 116    **
 117    virtual Void options()
 118    {
 119      res.sendError(501)
 120    }
 121  
 122    **
 123    ** Convenience method to respond to a TRACE request.
 124    ** Default implementation returns a 501 Not implemented error.
 125    **
 126    virtual Void trace()
 127    {
 128      res.sendError(501)
 129    }
 130  
 131  }