servlets之使用 Racket servlet 提供静态文件
zdz8207
阅读:91
2025-05-04 20:05:19
评论:0
我正在尝试使用 Racket 了解服务器,并且我正在尝试使用静态 Assets 。来自 this answer ,我能够包含一个静态样式表,如下所示:
#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))
但是,我仍然对一般如何执行此操作感到困惑,即为
#:extra-files-paths 中的所有文件提供服务没有为他们每个人制定调度规则。我尝试了 Jay 的建议并更改了
serve/servlet 定义中的调度程序顺序通过将 htdocs 和 extra-files-paths 部分向上移动(我可能不应该在这里复制整个内容),我以某种方式破坏了解析 MIME 类型的能力。总的来说是一团糟。
因此,这些问题中的任何一个都与我的问题相关/相关(从较少到较一般):
serve/servlet 级别的工具来包含静态文件? ? serve/servlet 中的片段不破坏东西? 请您参考如下方法:
在我看来,问题在于您的 #:servlet-regexp,它被设置为空的 regexp,这意味着它将匹配任何内容。一种简单的解决方案是限制此正则表达式,使其仅匹配非静态 Assets ;然后,所有其他请求都应该从 #:extra-files-paths 提供。
也许您需要拦截所有请求并在代码中处理它们是有原因的?没有把握。
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。



