At the bottom of this email is a code that I did not think would work but it did. (The code is a combination of get-number and count-dot-com tutorial. I first ask the user to type in a number. If it's 42, then count-dot-com is evaluated. If not 42, it keeps asking for a number. (To run it, you might have to change the path to htdocs.))
Steps: 1) URL /secret presents a form. 2) The above step does recur until 42 is submitted. 3) Then it evaluates the code from count-dot-com example with 42 as initial value. 4) + and - works as in the solo tutorial: At this point, URL looks something like http://localhost:8080/secret;((%22k%22%20.%20%22(3%20105%2097509303)%22)) At step 4, I expected the dispatch rule to intercept it and go into get-number routine (i.e. Step 1) but it does not. QUESTION: Is the dispatch rule called and it's smart enough to hand it off? Or because of K-URL, dispatch rule is bypassed entirely by the server? Thanks in advance. jGc The code: #lang racket (require web-server/servlet web-server/servlet-env web-server/dispatch) (define-values (handle-if-url-match hanlder->url) (dispatch-rules [("") say-hello] [("secret") (make-guarded-dispatcher reveal-secret)])) (define (say-hello req) (response/xexpr `(html (head (title "Hello world!")) (body (p "Hey out there!"))))) (define (reveal-secret req) (count-dot-com 42)) (define (count-dot-com i) (count-dot-com (send/suspend/dispatch (λ (embed/url) (response/xexpr `(html (head (title "Count!")) (body (h2 (a ([href ,(embed/url (λ (req) (sub1 i)))]) "-") (form ([action ,(embed/url (λ (req) (count-dot-com (sub1 i))))] [method "POST"]) (input ([type "submit"] [value "-"])))) (h1 ,(number->string i)) (h2 (a ([href ,(embed/url (λ (req) (add1 i)))]) "+") (form ([action ,(embed/url (λ (req) (count-dot-com (add1 i))))] [method "POST"]) (input ([type "submit"] [value "+"]))))))))))) (define (make-guarded-dispatcher next-dispatcher) (define (guarded-dispatcher req) (define (get-number label) (define query (send/suspend (λ (k-url) (response/xexpr `(html (head (title "Enter a number")) (body (form ([action ,k-url]) ,label (input ([name "number"])) (input ([type "submit"]))))))))) (string->number (extract-binding/single 'number (request-bindings query)))) (define n (get-number "secret number")) (if (= 42 n) (next-dispatcher req) (guarded-dispatcher req))) guarded-dispatcher) (define (start request) (handle-if-url-match request)) (serve/servlet start #:command-line? #t #:launch-browser? #t #:quit? #t #:listen-ip #f #:port 8080 #:log-file "log" #:extra-files-paths (list (build-path "/Users/..../addhoc" "htdocs")) #:servlet-regexp #rx"") _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users