URLs generated by send/suspend (and friends) are totally intercepted by the server and your app doesn't have a change to stand in between them. I consider this a feature, because you don't need to coordinate different parts of the app. If you wanted to do that, you'd have to write a dispatcher to sit outside the servlet dispatcher.
Jay 2011/4/23 J G Cho <g...@fundingmatters.com>: > 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 -- Jay McCarthy <j...@cs.byu.edu> Assistant Professor / Brigham Young University http://faculty.cs.byu.edu/~jay "The glory of God is Intelligence" - D&C 93 _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users