Adding new options re Galler

This commit is contained in:
Jay McCarthy 2012-04-24 14:49:12 -06:00
parent 555f85ac3a
commit ae38ecc564
6 changed files with 88 additions and 8 deletions

View File

@ -0,0 +1,38 @@
#lang racket
(require net/url
web-server/http
web-server/http/request
web-server/servlet-env
rackunit)
(define (start req)
(error "Bad"))
(define-values (pipe-read-p pipe-write-p)
(make-pipe))
(define server-t
(thread
(λ ()
(parameterize ([current-output-port pipe-write-p])
(serve/servlet start
#:launch-browser? #f
#:quit? #f
#:listen-ip #f
#:port 0
#:servlet-responder
(λ (url exn)
(response/xexpr
"Good!"))
#:servlet-path "/")))))
;; Wait for server to start
(define port-embedded-line (read-line pipe-read-p))
(match-define (regexp #rx"Your Web application is running at http://localhost:([0-9]+)\\."
(list _ port-string))
port-embedded-line)
(define port (string->number port-string))
(void (read-line pipe-read-p))
(check-equal? "Good!"
(port->string (get-pure-port (string->url (format "http://localhost:~a/" port)))))

View File

@ -53,8 +53,8 @@
dispatcher/c)]) dispatcher/c)])
(define (make url->servlet (define (make url->servlet
#:responders-servlet-loading [responders-servlet-loading servlet-loading-responder] #:responders-servlet-loading [responders-servlet-loading servlet-loading-responder]
#:responders-servlet [responders-servlet servlet-error-responder]) #:responders-servlet [responders-servlet servlet-error-responder])
(lambda (conn req) (lambda (conn req)
(define uri (request-uri req)) (define uri (request-uri req))
(define instance-custodian (make-servlet-custodian)) (define instance-custodian (make-servlet-custodian))

View File

@ -12,6 +12,7 @@
web-server/configuration/configuration-table web-server/configuration/configuration-table
web-server/configuration/responders web-server/configuration/responders
web-server/dispatchers/dispatch-log web-server/dispatchers/dispatch-log
net/url
racket/serialize racket/serialize
web-server/stuffers web-server/stuffers
racket/list)) racket/list))
@ -26,7 +27,15 @@ These functions optimize the construction of dispatchers and launching of server
[#:stateless? stateless? boolean? #f] [#:stateless? stateless? boolean? #f]
[#:stuffer stuffer (stuffer/c serializable? bytes?) default-stuffer] [#:stuffer stuffer (stuffer/c serializable? bytes?) default-stuffer]
[#:manager manager manager? (make-threshold-LRU-manager #f (* 1024 1024 64))] [#:manager manager manager? (make-threshold-LRU-manager #f (* 1024 1024 64))]
[#:current-directory servlet-current-directory path-string? (current-directory)]) [#:current-directory servlet-current-directory path-string? (current-directory)]
[#:responders-servlet-loading
responders-servlet-loading
(url? any/c . -> . can-be-response?)
servlet-loading-responder]
[#:responders-servlet
responders-servlet
(url? any/c . -> . can-be-response?)
servlet-error-responder])
dispatcher/c]{ dispatcher/c]{
@racket[serve/servlet] starts a server and uses a particular dispatching sequence. For some applications, this @racket[serve/servlet] starts a server and uses a particular dispatching sequence. For some applications, this
nails down too much, but users are conflicted, because the interface is so convenient. For those users, @racket[dispatch/servlet] nails down too much, but users are conflicted, because the interface is so convenient. For those users, @racket[dispatch/servlet]
@ -42,6 +51,8 @@ These functions optimize the construction of dispatchers and launching of server
deals with memory pressure as discussed in the @racket[make-threshold-LRU-manager] documentation.) deals with memory pressure as discussed in the @racket[make-threshold-LRU-manager] documentation.)
The servlet is run in the @racket[(current-namespace)]. The servlet is run in the @racket[(current-namespace)].
If a servlet fails to load, @racket[responders-servlet-loading] is used. If a servlet errors during its operation, @racket[responders-servlet] is used.
} }
@defproc[(serve/launch/wait @defproc[(serve/launch/wait

View File

@ -12,6 +12,7 @@
web-server/configuration/configuration-table web-server/configuration/configuration-table
web-server/configuration/responders web-server/configuration/responders
web-server/dispatchers/dispatch-log web-server/dispatchers/dispatch-log
net/url
racket/serialize racket/serialize
web-server/stuffers web-server/stuffers
web-server/servlet/servlet-structs web-server/servlet/servlet-structs
@ -159,6 +160,14 @@ Like always, you don't even need to save the file.
server-root-path server-root-path
"conf" "conf"
"not-found.html"))] "not-found.html"))]
[#:servlet-loading-responder
responders-servlet-loading
(url? any/c . -> . can-be-response?)
servlet-loading-responder]
[#:servlet-responder
responders-servlet
(url? any/c . -> . can-be-response?)
servlet-error-responder]
[#:mime-types-path mime-types-path path-string? [#:mime-types-path mime-types-path path-string?
....] ....]
[#:ssl? ssl? boolean? #f] [#:ssl? ssl? boolean? #f]
@ -201,8 +210,8 @@ Like always, you don't even need to save the file.
The modules specified by @racket[servlet-namespace] are shared between servlets found in @racket[servlets-root] and the current namespace (and therefore The modules specified by @racket[servlet-namespace] are shared between servlets found in @racket[servlets-root] and the current namespace (and therefore
the @racket[start] procedure.) the @racket[start] procedure.)
If a file cannot be found, @racket[file-not-found-responder] is used to generate an error response. If a file cannot be found, @racket[file-not-found-responder] is used to generate an error response. If a servlet fails to load, @racket[responders-servlet-loading] is used. If a servlet errors during its operation, @racket[responders-servlet] is used.
If @racket[banner?] is true, then an informative banner is printed. You may want to use this when If @racket[banner?] is true, then an informative banner is printed. You may want to use this when
running from the command line, in which case the @racket[command-line?] option controls similar options. running from the command line, in which case the @racket[command-line?] option controls similar options.

View File

@ -9,12 +9,14 @@
racket/serialize racket/serialize
net/tcp-unit net/tcp-unit
net/tcp-sig net/tcp-sig
net/url
unstable/contract unstable/contract
net/ssl-tcp-unit) net/ssl-tcp-unit)
(require web-server/web-server (require web-server/web-server
web-server/managers/lru web-server/managers/lru
web-server/managers/manager web-server/managers/manager
web-server/configuration/namespace web-server/configuration/namespace
web-server/configuration/responders
web-server/http web-server/http
web-server/stuffers web-server/stuffers
web-server/servlet/setup web-server/servlet/setup
@ -31,7 +33,9 @@
#:current-directory path-string? #:current-directory path-string?
#:stateless? boolean? #:stateless? boolean?
#:stuffer (stuffer/c serializable? bytes?) #:stuffer (stuffer/c serializable? bytes?)
#:manager manager?) #:manager manager?
#:responders-servlet-loading (url? any/c . -> . can-be-response?)
#:responders-servlet (url? any/c . -> . can-be-response?))
. ->* . . ->* .
dispatcher/c)] dispatcher/c)]
[serve/launch/wait (((semaphore? . -> . dispatcher/c)) [serve/launch/wait (((semaphore? . -> . dispatcher/c))
@ -55,6 +59,10 @@
[stateless? #f] [stateless? #f]
#:stuffer #:stuffer
[stuffer default-stuffer] [stuffer default-stuffer]
#:responders-servlet-loading
[responders-servlet-loading servlet-loading-responder]
#:responders-servlet
[responders-servlet servlet-error-responder]
#:manager #:manager
[manager [manager
(make-threshold-LRU-manager (make-threshold-LRU-manager
@ -67,6 +75,8 @@
(filter:make (filter:make
servlet-regexp servlet-regexp
(servlets:make (servlets:make
#:responders-servlet-loading responders-servlet-loading
#:responders-servlet responders-servlet
(lambda (url) (lambda (url)
(or (unbox servlet-box) (or (unbox servlet-box)
(let ([servlet (let ([servlet

View File

@ -5,7 +5,8 @@
racket/list racket/list
racket/serialize racket/serialize
racket/runtime-path) racket/runtime-path)
(require web-server/managers/lru (require net/url
web-server/managers/lru
web-server/managers/manager web-server/managers/manager
web-server/configuration/namespace web-server/configuration/namespace
web-server/http web-server/http
@ -60,6 +61,8 @@
#:servlets-root path-string? #:servlets-root path-string?
#:servlet-current-directory path-string? #:servlet-current-directory path-string?
#:file-not-found-responder (request? . -> . can-be-response?) #:file-not-found-responder (request? . -> . can-be-response?)
#:servlet-loading-responder (url? any/c . -> . can-be-response?)
#:servlet-responder (url? any/c . -> . can-be-response?)
#:mime-types-path path-string? #:mime-types-path path-string?
#:servlet-path string? #:servlet-path string?
#:servlet-regexp regexp? #:servlet-regexp regexp?
@ -126,6 +129,11 @@
[file-not-found-responder [file-not-found-responder
(gen-file-not-found-responder (gen-file-not-found-responder
(build-path server-root-path "conf" "not-found.html"))] (build-path server-root-path "conf" "not-found.html"))]
#:servlet-loading-responder
[responders-servlet-loading servlet-loading-responder]
#:servlet-responder
[responders-servlet servlet-error-responder]
#:mime-types-path #:mime-types-path
[mime-types-path (let ([p (build-path server-root-path "mime.types")]) [mime-types-path (let ([p (build-path server-root-path "mime.types")])
(if (file-exists? p) (if (file-exists? p)
@ -157,7 +165,11 @@
#:stateless? stateless? #:stateless? stateless?
#:stuffer stuffer #:stuffer stuffer
#:current-directory servlet-current-directory #:current-directory servlet-current-directory
#:manager manager) #:manager manager
#:responders-servlet-loading
responders-servlet-loading
#:responders-servlet
responders-servlet)
(let-values ([(clear-cache! url->servlet) (let-values ([(clear-cache! url->servlet)
(servlets:make-cached-url->servlet (servlets:make-cached-url->servlet
(fsmap:filter-url->path (fsmap:filter-url->path