Я пытаюсь поднять трубку отправку URL с Ракеткой (раньше Схема PLT). Я смотрел на учебное руководство и документацию сервера. Я не могу выяснить как к запросам маршрута к тем же сервлетам.
Определенный пример:
#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
переходит к Ракетке "файл, не найденный" страница (я ожидал бы, что это перейдет к странице, которая говорит "тест сообщения обзора").
Такое чувство, что я пропускаю что-то маленькое и очевидное. Кто-либо может дать мне подсказку?
То, что вы написали, не является целой программой, поэтому я не могу ее отлаживать.
Вот программа с аннотациями, которая, вероятно, делает то, что вы хотите:
#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-posts
, review-post
и review-archive
не возвращают разумные кодировки xexpr HTML, вам нужно просмотреть исходный код, чтобы увидеть их правильно.
Пожалуйста, напишите мне напрямую или по электронной почте в список рассылки PLT Scheme. (Примечание: мы переименовываем схему PLT в «Racket», чтобы вы могли видеть это при публикации.)
Джей Маккарти