Adding new options re Galler
This commit is contained in:
parent
555f85ac3a
commit
ae38ecc564
38
collects/tests/web-server/pr/galler2.rkt
Normal file
38
collects/tests/web-server/pr/galler2.rkt
Normal 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)))))
|
|
@ -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))
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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.
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue
Block a user