[racket] Web-Server: dispatch-rules and web-cells

From: Jay McCarthy (jay.mccarthy at gmail.com)
Date: Tue Nov 27 09:38:32 EST 2012

Web cells are stored on the server associated with the continuation
tree. When you use 'dispatch-rules', you are relying only on the
information in the URL to give context, so it is totally disconnected
from the continuation tree.

When I first made Web cells, I wrote something that would insert their
values into all URLs that were generated, so that if you made the URL
"/foobar" then it would be transformed to "/foobar;cell1=value1" and
then when it came back these pieces would be re-introduced to the Web
cells of the new continuation root.

The code has probably rotted:


But if this sounds useful, I'm willing to revive it for you.


On Tue, Nov 27, 2012 at 7:00 AM, Helmut Dobretzberger
<h.dobretzberger at gmx.at> wrote:
> Hey,
> I'd like to have pretty urls in my web-application, but I ran into a problem
> when using web-cells.
> I use a web-cell, and I shadow the content within the response/xexpr.
> I link to a second function, which only shows the content of the web-cell.
> If I generate this link using embed/url, everything is fine.
> But if I use a pretty url, the content of the web-cell is lost.
> I understand the reason, I think - within the send/suspend/dispatch, the
> continuation is saved, so the generated link restores the continuation,
> including the web-cell content.
> And that doesn't happen with pretty urls, right?
> But is there a way to use a pretty url, so that the content of the web-cell
> is not lost?
> A running, not really useful example, which demonstrates the problem:
> #lang racket
> (require web-server/servlet)
> (require xml)
> (define my-cell (make-web-cell 0))
> (define (start initial-request)
>   (send/suspend/dispatch
>    (lambda (embed/url)
>      (response/xexpr
>       `(html
>         ,(begin (web-cell-shadow my-cell 1)
>                 (number->string (web-cell-ref my-cell)))
>         (br)
>         (a ([href "/foobar"]) "Foo") ;;pretty url
>         (br)
>         (a ([href ,(embed/url start2)]) "Start")))))) ;; generated url
> (define (start2 request)
>   (response/xexpr
>    `(html ,(number->string (web-cell-ref my-cell)))))
>    ;; returns 0 if called via "foobar" and 1 if called with (embed/url
> start2)
> (require web-server/servlet-env)
> (define-values (start-dispatch simple-app-url)
>   [dispatch-rules
>    [("") start]
>    [("foobar") start2]])
> ;; Startet das Servlet.
> (serve/servlet start-dispatch
>                #:port 8080
>                #:listen-ip #f
>                #:launch-browser? #t
>                #:servlet-path "/"
>                #:servlet-regexp #rx"")
> --
> Helmut
> ____________________
>   Racket Users list:
>   http://lists.racket-lang.org/users

Jay McCarthy <jay at cs.byu.edu>
Assistant Professor / Brigham Young University

"The glory of God is Intelligence" - D&C 93

Posted on the users mailing list.