2010-05-21 20 views
6

Tôi đang cố gắng kết nối công văn URL với Racket (trước đây là PLT Scheme). Tôi đã xem hướng dẫn và tài liệu máy chủ. Tôi không thể tìm ra cách để định tuyến các yêu cầu tới cùng một servlet.Gửi URL bằng vợt

Ví dụ cụ thể:

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

Giả sử các mã trên, localhost:8080/ đi vào một trang nói rằng "list-viết". Đi tới localhost:8080/posts/test chuyển đến trang Racket "không tìm thấy tệp" (tôi hy vọng nó sẽ chuyển đến trang có nội dung "kiểm tra bài đăng").

Có vẻ như tôi thiếu một thứ gì đó nhỏ và rõ ràng. Bất cứ ai có thể cho tôi một gợi ý?

Trả lời

11

Nội dung bạn đã viết không phải là toàn bộ chương trình, vì vậy tôi không thể gỡ lỗi chương trình.

Đây là một chương trình với chú thích rằng những gì bạn muốn, có thể là:

#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 

Bởi vì các chức năng list-posts, review-post, và review-archive không gửi lại mã hóa xexpr hợp lý về HTML, bạn sẽ phải xem nguồn để xem chúng đúng.

Vui lòng gửi email trực tiếp cho tôi hoặc gửi email cho danh sách gửi thư PLT Scheme. (Lưu ý: Chúng tôi đang đổi tên PLT Scheme thành "Racket" để bạn có thể thấy khi bạn đăng bài.)

Jay McCarthy

+0

Yup. Tôi đã thiếu tham số servlet-regexp. Như tôi nghi ngờ; một cái gì đó nhỏ và rõ ràng. Cảm ơn vì đã giúp tôi. – Inaimathi

+0

Đã đăng chương trình không hoạt động hoàn chỉnh trong OP. – Inaimathi