我正在尝试按照关于简单网络应用程序的Racket指南中的教程,但无法获得一个基本的,基本的东西。
如何让servlet根据请求URL提供不同的内容?尽管我的搜索量很大,但即使是巨大的博客示例也只是一个大文件,所有内容都在我背后的巨大获取查询字符串处理。如何根据网址执行任何操作? Clojure的Noir框架在主页(defpage
)上提出了这个基本功能,但是如何使用Racket做到这一点?
答案 0 :(得分:3)
URL是servlet作为参数接收的request
结构的一部分。您可以通过调用request-uri
来获取URL,然后您可以查看它以执行您想要的任何操作。该请求还包括HTTP方法,标题等。
但那是相当低级别的。更好的解决方案是使用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")
来处理。等等。