diff --git a/collects/tests/web-server/dispatchers/dispatch-lang-test.rkt b/collects/tests/web-server/dispatchers/dispatch-lang-test.rkt index e829efbeb9..dc29c916fc 100644 --- a/collects/tests/web-server/dispatchers/dispatch-lang-test.rkt +++ b/collects/tests/web-server/dispatchers/dispatch-lang-test.rkt @@ -88,6 +88,12 @@ mkd "add02.rkt - s/s/u, uri" (build-path example-servlets "add02.rkt")) + + (test-add-two-numbers + mkd + "add02-base.rkt - s/s/u, uri" + (build-path example-servlets "add02-base.rkt")) + ; XXX Use kont #;(test-add-two-numbers diff --git a/collects/web-server/base/lang/reader.rkt b/collects/web-server/base/lang/reader.rkt new file mode 100644 index 0000000000..7781fe91ca --- /dev/null +++ b/collects/web-server/base/lang/reader.rkt @@ -0,0 +1,2 @@ +#lang s-exp syntax/module-reader +web-server/lang/base diff --git a/collects/web-server/default-web-root/htdocs/lang-servlets/add02-base.rkt b/collects/web-server/default-web-root/htdocs/lang-servlets/add02-base.rkt new file mode 100644 index 0000000000..fd279a6cf1 --- /dev/null +++ b/collects/web-server/default-web-root/htdocs/lang-servlets/add02-base.rkt @@ -0,0 +1,32 @@ +#lang web-server/base +(require web-server/http + web-server/lang/web + net/url) +(define interface-version 'stateless) +(provide start interface-version) + +;; get-number-from-user: string -> number +;; ask the user for a number +(define (gn msg) + (let ([req + (send/suspend/url + (lambda (k-url) + (response/xexpr + `(html (head (title ,(format "Get ~a number" msg))) + (body + (form ([action ,(url->string k-url)] + [method "get"] + [enctype "application/x-www-form-urlencoded"]) + ,(format "Enter the ~a number to add: " msg) + (input ([type "text"] [name "number"] [value ""])) + (input ([type "submit"]))))))))]) + (string->number + (cdr (assoc 'number (url-query (request-uri req))))))) + +(define (start initial-request) + (response/xexpr + `(html (head (title "Final Page")) + (body + (h1 "Final Page") + (p ,(format "The answer is ~a" + (+ (gn "first") (gn "second")))))))) diff --git a/collects/web-server/lang.rkt b/collects/web-server/lang.rkt index 2ca38169e2..83dd654628 100644 --- a/collects/web-server/lang.rkt +++ b/collects/web-server/lang.rkt @@ -1,26 +1,19 @@ -#lang racket/base -(require (for-syntax racket/base) - (for-syntax racket/list) - (for-syntax "lang/labels.rkt") - (for-syntax "lang/util.rkt") - (for-syntax "lang/elim-letrec.rkt") - (for-syntax "lang/anormal.rkt") - (for-syntax "lang/elim-callcc.rkt") - (for-syntax "lang/defun.rkt") - "lang/lang-api.rkt") +#lang racket +(define-syntax-rule (reqpro m ...) + (begin (require m ...) + (provide (all-from-out m ...)))) +(provide (all-from-out racket)) +(reqpro web-server/lang/base + net/url + web-server/http + web-server/http/bindings + web-server/dispatch + web-server/stuffers + web-server/lang/abort-resume + web-server/lang/web + web-server/lang/native + web-server/lang/web-cells + web-server/lang/web-param + web-server/lang/file-box + web-server/lang/soft) -(provide (rename-out [lang-module-begin #%module-begin]) - (all-from-out "lang/lang-api.rkt")) - -(define-for-syntax anormalize (make-anormal-term elim-letrec-term)) - -(define-syntax lang-module-begin - (make-lang-module-begin - make-labeling - (make-module-case - (make-define-case - (lambda (stx) - (define anf-stx (anormalize stx)) - (define no-callcc-stx (elim-callcc anf-stx)) - (define defun-stx (defun no-callcc-stx)) - defun-stx))))) diff --git a/collects/web-server/lang/base.rkt b/collects/web-server/lang/base.rkt new file mode 100644 index 0000000000..a944520efa --- /dev/null +++ b/collects/web-server/lang/base.rkt @@ -0,0 +1,26 @@ +#lang racket/base +(require (for-syntax racket/base) + (for-syntax racket/list) + (for-syntax "labels.rkt") + (for-syntax "util.rkt") + (for-syntax "elim-letrec.rkt") + (for-syntax "anormal.rkt") + (for-syntax "elim-callcc.rkt") + (for-syntax "defun.rkt") + "lang-api.rkt") + +(provide (rename-out [lang-module-begin #%module-begin]) + (all-from-out "lang-api.rkt")) + +(define-for-syntax anormalize (make-anormal-term elim-letrec-term)) + +(define-syntax lang-module-begin + (make-lang-module-begin + make-labeling + (make-module-case + (make-define-case + (lambda (stx) + (define anf-stx (anormalize stx)) + (define no-callcc-stx (elim-callcc anf-stx)) + (define defun-stx (defun no-callcc-stx)) + defun-stx))))) diff --git a/collects/web-server/lang/lang-api.rkt b/collects/web-server/lang/lang-api.rkt index 83216bb526..d6a3496f3f 100644 --- a/collects/web-server/lang/lang-api.rkt +++ b/collects/web-server/lang/lang-api.rkt @@ -1,26 +1,2 @@ -#lang racket -(require net/url - web-server/http - web-server/http/bindings - web-server/dispatch - web-server/stuffers - web-server/lang/abort-resume - web-server/lang/web - web-server/lang/native - web-server/lang/web-cells - web-server/lang/web-param - web-server/lang/file-box - web-server/lang/soft) -(provide (except-out (all-from-out racket) #%module-begin) - (all-from-out net/url - web-server/http - web-server/http/bindings - web-server/dispatch - web-server/stuffers - web-server/lang/abort-resume - web-server/lang/web - web-server/lang/native - web-server/lang/web-cells - web-server/lang/web-param - web-server/lang/file-box - web-server/lang/soft)) +#lang racket/base +(provide (except-out (all-from-out racket/base) #%module-begin)) diff --git a/collects/web-server/scribblings/lang-api.scrbl b/collects/web-server/scribblings/lang-api.scrbl index 28fd9a35a8..0e9378830f 100644 --- a/collects/web-server/scribblings/lang-api.scrbl +++ b/collects/web-server/scribblings/lang-api.scrbl @@ -3,7 +3,7 @@ @title[#:tag "stateless"]{Stateless Servlets} -@defmodulelang[web-server] +@defmodulelang*[(web-server/base web-server)] @section[#:style 'hidden #:tag "stateless-example"]{Example} @@ -54,14 +54,23 @@ An example @racket['stateless] servlet module: `(html (body (h2 "Look ma, no state!"))))) ] +The @racketmodname[web-server/base] language exports all of the functions +and syntax from @racketmodname[racket/base] and nothing else. -These servlets have an extensive API available to them: @racketmodname[racket], @racketmodname[net/url], @racketmodname[web-server/http], +The @racketmodname[web-server] language exports all of the functions +and syntax from the following libraries: @racketmodname[racket], +@racketmodname[net/url], @racketmodname[web-server/http], @racketmodname[web-server/http/bindings], -@racketmodname[web-server/lang/abort-resume], @racketmodname[web-server/lang/web], @racketmodname[web-server/lang/native], +@racketmodname[web-server/lang/abort-resume], +@racketmodname[web-server/lang/web], +@racketmodname[web-server/lang/native], @racketmodname[web-server/lang/web-param], -@racketmodname[web-server/lang/web-cells], @racketmodname[web-server/lang/file-box], @racketmodname[web-server/lang/soft], @racketmodname[web-server/dispatch], and -@racketmodname[web-server/stuffers]. - Some of these are documented in the subsections that follow. +@racketmodname[web-server/lang/web-cells], +@racketmodname[web-server/lang/file-box], +@racketmodname[web-server/lang/soft], +@racketmodname[web-server/dispatch], and +@racketmodname[web-server/stuffers]. Some of these are documented in +the subsections that follow. @include-section["stateless-usage.scrbl"] @include-section["serial.scrbl"]