
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 }