2010-05-21 11 views
6

Ich versuche, den URL-Versand mit Racket (früher PLT-Schema) zu verbinden. Ich habe mir das Tutorial und die Serverdokumentation angesehen. Ich kann nicht herausfinden, wie Anfragen an dieselben Servlets weitergeleitet werden.Racket-URL-Versand

Konkretes Beispiel:

 
#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 "")

den obigen Code Unter der Annahme, geht localhost:8080/ auf einer Seite, die "Liste-Beiträge" sagt. Gehe zu localhost:8080/posts/test geht zu einer Racket "Datei nicht gefunden" -Seite (ich würde erwarten, dass es auf eine Seite geht, die sagt "Review-Post-Test").

Es fühlt sich an, als ob ich etwas Kleines und Offensichtliches vermisse. Kann mir jemand einen Hinweis geben?

Antwort

11

Was Sie geschrieben haben, ist kein ganzes Programm, deshalb kann ich es nicht debuggen. Hier

ist ein Programm, mit Anmerkungen, das tut, was Sie wollen, wahrscheinlich:

#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 

Da die Funktionen list-posts, review-post und review-archive nicht zurück vernünftige xexpr Codierungen von HTML, Sie müssen sehen Quelle, um sie richtig zu sehen.

Bitte zögern Sie nicht mir eine E-Mail direkt oder per E-Mail der PLT Scheme Mailingliste. (Anmerkung: Wir sind die Umbenennung PLT Scheme "Racket" so können Sie sehen, dass, wenn Sie Beiträge verfassen.)

Jay McCarthy

+0

Yup. Mir fehlte der Servlet-Regexp-Parameter. Wie ich vermutete; etwas Kleines und Offensichtliches. Danke, dass du mir geholfen hast. – Inaimathi

+0

Gepostetes vollständiges nicht arbeitendes Programm in OP. – Inaimathi