diff --git a/collects/web-server/dispatchers/dispatch-filter.ss b/collects/web-server/dispatchers/dispatch-filter.ss new file mode 100644 index 0000000000..ed0d224b58 --- /dev/null +++ b/collects/web-server/dispatchers/dispatch-filter.ss @@ -0,0 +1,14 @@ +(module dispatch-filter mzscheme + (require (lib "contract.ss")) + (require "dispatch.ss" + "../private/util.ss") + (provide/contract + [interface-version dispatcher-interface-version?] + [make (regexp? dispatcher? . -> . dispatcher?)]) + + (define interface-version 'v1) + (define ((make regex inner) conn req) + (define-values (uri method path) (decompose-request req)) + (if (regexp-match regex path) + (inner conn req) + (next-dispatcher)))) \ No newline at end of file diff --git a/collects/web-server/prototype-web-server/dispatch-servlets2.ss b/collects/web-server/prototype-web-server/dispatch-servlets2.ss index 007d40daa9..82acacf692 100644 --- a/collects/web-server/prototype-web-server/dispatch-servlets2.ss +++ b/collects/web-server/prototype-web-server/dispatch-servlets2.ss @@ -65,19 +65,10 @@ [responders-file-not-found (gen-file-not-found-responder "not-found.html")]) - ;; dispatch: connection request -> void + ;; dispatch : connection request -> void (define (dispatch conn req) - (define-values (uri method path) (decompose-request req)) - (myprint "dispatch~n") - (if (regexp-match #rx"^/servlets" path) - (begin - (adjust-connection-timeout! conn timeouts-servlet-connection) - ;; more here - make timeouts proportional to size of bindings - (servlet-content-producer conn req)) - (next-dispatcher))) - - ;; servlet-content-producer: connection request -> void - (define (servlet-content-producer conn req) + (adjust-connection-timeout! conn timeouts-servlet-connection) + ;; more here - make timeouts proportional to size of bindings (myprint "servlet-content-producer~n") (let ([meth (request-method req)]) (if (eq? meth 'head) diff --git a/collects/web-server/prototype-web-server/run.ss b/collects/web-server/prototype-web-server/run.ss index 2e105f3b8d..ac07ece1e3 100644 --- a/collects/web-server/prototype-web-server/run.ss +++ b/collects/web-server/prototype-web-server/run.ss @@ -6,6 +6,7 @@ (prefix http: (lib "request.ss" "web-server" "private")) (lib "configuration-structures.ss" "web-server" "private") (prefix files: (lib "dispatch-files.ss" "web-server" "dispatchers")) + (prefix filter: (lib "dispatch-filter.ss" "web-server" "dispatchers")) (prefix sequencer: (lib "dispatch-sequencer.ss" "web-server" "dispatchers"))) (require "hardcoded-configuration.ss" (prefix servlets2: "dispatch-servlets2.ss")) @@ -18,11 +19,13 @@ (define read-request http:read-request) (define dispatch (sequencer:make - (servlets2:make #:servlet-root (paths-servlet (host-paths host-info)) - #:timeouts-servlet-connection (timeouts-servlet-connection (host-timeouts host-info)) - #:responders-servlet-loading (responders-servlet-loading (host-responders host-info)) - #:responders-servlet (responders-servlet (host-responders host-info)) - #:responders-file-not-found (responders-file-not-found (host-responders host-info))) + (filter:make + #rx"^/servlets" + (servlets2:make #:servlet-root (paths-servlet (host-paths host-info)) + #:timeouts-servlet-connection (timeouts-servlet-connection (host-timeouts host-info)) + #:responders-servlet-loading (responders-servlet-loading (host-responders host-info)) + #:responders-servlet (responders-servlet (host-responders host-info)) + #:responders-file-not-found (responders-file-not-found (host-responders host-info)))) (files:make #:htdocs-path (paths-htdocs (host-paths host-info)) #:mime-types-path (paths-mime-types (host-paths host-info)) #:indices (host-indices host-info)