如何根据Racket Web servlet中的路径显示不同的内容?

时间:2013-08-02 20:09:16

标签: servlets web scheme racket

我正在尝试按照关于简单网络应用程序的Racket指南中的教程,但无法获得一个基本的,基本的东西。

如何让servlet根据请求URL提供不同的内容?尽管我的搜索量很大,但即使是巨大的博客示例也只是一个大文件,所有内容都在我背后的巨大获取查询字符串处理。如何根据网址执行任何操作? Clojure的Noir框架在主页(defpage)上提出了这个基本功能,但是如何使用Racket做到这一点?

1 个答案:

答案 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")来处理。等等。