forked from ring-clojure/ring
-
Notifications
You must be signed in to change notification settings - Fork 1
静态资源(Static Resources)
YANG YUE edited this page Aug 9, 2016
·
1 revision
Web应用经常需要服务静态内容,例如图片或者样式表.Ring提供了两个中间件函数来做这个事情.
一个是wrap-file
.它服务来自当前文件系统一个目录的静态内容:
(use 'ring.middleware.file)
(def app
(wrap-file your-handler "/var/www/public"))
另一个是wrap-resource
.它服务来自JVM classpath下的静态内容:
(use 'ring.middleware.resource)
(def app
(wrap-resource your-handler "public"))
如果你使用一个Clojure构建工具,像Leiningen,一个项目的non-source-file资源保存在resources
目录中.目录中的文件自动的保存jar或者war文件中.
所以在上面的例子中,文件被放在resources/public
目录将会被当做静态文件.
经常性的你想要结合wrap-file
或者wrap-resource
和其他中间件,通常是wrap-content-type
和wrap-not-modified
:
(use 'ring.middleware.resource
'ring.middleware.content-type
'ring.middleware.not-modified)
(def app
(-> your-handler
(wrap-resource "public")
(wrap-content-type)
(wrap-not-modified))
wrap-content-type
中间件选择一个content-type基于文件扩展.例如,一个文件叫做hello.txt
将会获得一个text/plain
的content-type.
wrap-not-modified
中间件在响应中检查(最后定义)Last-Modified
的header对应着在请求中的If-Modified-Since
的header.通过确保客户端不需要下载它们已经缓存的资源,这回节省带宽.
注意这个额外的中间件需要环绕(另一种说法 紧跟)wrap-resource
或者wrap-file
函数.