Servlets 使用Racket servlet服务静态文件
我正在尝试学习使用Racket的服务器,我正在尝试使用静态资产。从中,我可以包含如下静态样式表:Servlets 使用Racket servlet服务静态文件,servlets,server,racket,Servlets,Server,Racket,我正在尝试学习使用Racket的服务器,我正在尝试使用静态资产。从中,我可以包含如下静态样式表: #lang racket (require web-server/servlet web-server/servlet-env web-server/configuration/responders) (define (home req) (response/xexpr '(html (head (link ([rel "styleshee
#lang racket
(require web-server/servlet
web-server/servlet-env
web-server/configuration/responders)
(define (home req)
(response/xexpr
'(html
(head (link ([rel "stylesheet"] [type "text/css"] [href "/style.css"])))
(body
(span ([class "emph"]) "Hello, world!")))))
(define-values (dispatch input-url)
(dispatch-rules
[("home") home]
[("style.css") (λ (_) (file-response 200 #"OK" "style.css"))]))
(serve/servlet dispatch
#:servlet-regexp #rx""
#:servlet-path "/home"
#:server-root-path (current-directory))
但是,一般来说,我仍然不知道如何做到这一点,即在#:额外文件路径中为所有文件提供服务,而不为每个文件制定分派规则。我尝试了Jay的建议,在service/servlet
的定义中更改了调度程序的顺序,将htdocs和额外文件路径部分向上移动(我可能不应该在这里复制整个内容),并以某种方式破坏了解析MIME类型的能力。总的来说,情况一团糟
因此,这些问题中的任何一个都与我的问题相关(从较少到更一般):
是否有更好的方法使用service/servlet
级别的工具包含静态文件
有人能具体地描述一下我如何在不破坏东西的情况下重新排列service/servlet
中的各个部分吗
有没有比文档更好的地方来学习如何使用Racket中的低级服务器工具?(我对这一特定领域相当陌生,因此“了解更多关于服务器的信息”可能是对这个问题的有效回答)
在我看来,问题在于#:servlet regexp,它被设置为空regexp,这意味着它将匹配任何内容。一个简单的解决方案是限制这个regexp,使它只匹配非静态资产;然后,所有其他请求都应该从#:额外文件路径提供服务
也许您需要拦截所有请求并在代码中处理它们是有原因的?不确定。合适的正则表达式是什么样的#rx“*\.rkt”
似乎语法错误<代码>读取:未知转义序列\。在字符串中
Yes,这是典型的双转义问题;Racket(和大多数其他语言)将反斜杠解释为转义字符。因为您实际上希望在regexp中使用反斜杠,所以需要将其写成#rx“*\\\.rkt”。那就是。。。将反斜杠加倍。让我们看看该字符串是否在堆栈溢出处理中幸存。