2010-05-21 77 views
6

我正在嘗試與球拍(原PLT方案)掛鉤URL調度。我看了一下教程和服務器文檔。我無法弄清楚如何將請求路由到相同的servlet。球拍URL調度

具體例子:

 
#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/進入一個網頁,上面寫着「列表的帖子」。去localhost:8080/posts/test去一個球拍「文件未找到」頁面(我希望它去到一個頁面,說「審查後測試」)。

感覺就像我錯過了一些小而明顯的東西。任何人都可以給我一個提示嗎?

回答

11

你寫的不是一個完整的程序,所以我不能調試它。

這裏是註釋的程序,你想要做什麼,大概是:

#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-postsreview-postreview-archive不返回HTML的明智xexpr編碼,你必須查看來源看他們是正確的。

請隨時給我發電子郵件或直接發郵件給PLT計劃郵寄名單。 (注:我們重命名PLT計劃,「拍」,所以你可以看到,當您發佈。)

傑伊·麥卡錫

+0

是啊。我錯過了servlet-regexp參數。正如我所懷疑的;一些小而明顯的東西。謝謝你幫助我。 – Inaimathi 2010-05-21 14:08:43

+0

在OP中發佈完整的非工作程序。 – Inaimathi 2010-05-21 14:49:04