我正在尝试将 URL 调度与 Racket(以前称为 PLT 方案)连接起来。我已经查看了教程和服务器文档。我不知道如何将请求路由到相同的 servlet。
具体例子:
#lang scheme
(require web-server/servlet)
(require web-server/dispatch)
(provide/contract (start (request? . -> . response/c)))
(define (start request)
(blog-dispatch request))
(define-values (blog-dispatch blog-url)
(dispatch-rules
(("") list-posts)
(("posts" (string-arg)) review-post)
(("archive" (integer-arg) (integer-arg)) review-archive)
(else list-posts)))
(define (list-posts req) `(list-posts))
(define (review-post req p) `(review-post ,p))
(define (review-archive req y m) `(review-archive ,y ,m))
(require web-server/servlet-env)
(serve/servlet start
#:launch-browser? #t
#:quit? #f
#:listen-ip #f
#:port 8080
#:extra-files-paths (list (build-path "js")
(build-path "css"))
#:servlet-path "")
假设上面的代码,localhost:8080/
转到显示“list-posts”的页面。即将localhost:8080/posts/test
进入 Racket“未找到文件”页面(我希望它进入显示“审查后测试”的页面)。
感觉就像我错过了一些小而明显的东西。谁能给我提示吗?
你写的不是一个完整的程序,所以我无法调试它。
这是一个带有注释的程序,可以执行您想要的操作,可能是:
#lang scheme ; specify the right language
; include the correct libraries
(require web-server/servlet
; this one gets "serve/servlet"
web-server/servlet-env)
(define (start request)
(blog-dispatch request))
(define-values (blog-dispatch blog-url)
(dispatch-rules
(("") list-posts)
(("posts" (string-arg)) review-post)
(("archive" (integer-arg) (integer-arg)) review-archive)
(else list-posts)))
(define (list-posts req) `(list-posts))
(define (review-post req p) `(review-post ,p))
(define (review-archive req y m) `(review-archive ,y ,m))
; starts a web server where...
(serve/servlet start ; answers requests
#:servlet-path "" ; is the default URL
#:port 8080 ; is the port
#:servlet-regexp #rx"") ; is a regexp decide
; if 'start' should
; handle the request
因为功能list-posts
, review-post
, and review-archive
不返回 HTML 的合理 xexpr 编码,您必须查看源代码才能正确看到它们。
请随时直接给我发电子邮件或向 PLT 方案邮件列表发送电子邮件。 (注意:我们将 PLT 方案重命名为“Racket”,以便您在发帖时可以看到它。)
杰·麦卡锡
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)