我正在尝试按照简单网络应用程序的 Racket 指南上的教程进行操作,但无法获得一个基本的基本内容。
如何让 servlet 根据请求 URL 提供不同的内容?尽管经过我的努力,即使是巨大的博客示例也是一个大文件,并且在我背后使用巨大的 get 查询字符串处理所有内容。如何根据 URL 做任何事情? Clojure 的 Noir 框架将这个基本功能放在首页(defpage
)的前面,但是如何使用 Racket 做到这一点?
最佳答案
URL 是 request
的一部分servlet 作为参数接收的结构。您可以通过调用 request-uri
获取 URL , 然后你可以看它做任何你想做的事情。该请求还包括 HTTP 方法、 header 等。
但这是相当低级的。更好的解决方案是使用 dispatch-rules
定义从 URL 模式到处理函数的映射。这是文档中的一个示例:
(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]))
制作您的主 servlet 处理程序
blog-dispatch
.网址 http://yoursite.com/
将通过调用 (list-posts req)
处理, 其中 req
是请求结构。网址 http://yoursite.com/posts/a-funny-story
将通过调用 (review-post req "a-funny-story")
处理.等等。
关于servlets - 如何根据 Racket Web servlet 中的路径显示不同的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18025366/