我正在构建一个测试 clojure/ring 项目来了解它是如何工作的。我创建了一个名为“junkapp”的应用程序,它确实有一个处理程序
(defn handler [request]
{:status 200
:headers {"Content-type" "text/html"}
:body "Hello World"})
还有一个调用 wrap-resource 来获取静态内容
(def app
(wrap-resource handler "public"))
那么在我的 project.clj 中,我引用了 lein-ring 并将 :handler 设置为我的 junkapp.core/app
:plugins [[lein-ring "0.8.5"]]
:ring {:handler junkapp.core/app}
当我用 lein run 运行它时,一切都按预期工作。对 / 的调用返回“Hello World”,对 /test.html 的调用返回 resources/public/test.html 的内容。
但后来我尝试将它构建成一个战争文件
lein ring uberwar junkapp.war
并将其放在tomcat7 服务器的webapps/ 目录下。现在,当我转到 junkapp 下的任何路径(例如 /junkapp/、/junkapp/foo、/junkapp/test.html)时,它总是返回“Hello World”,我似乎根本无法让它引用静态内容。在谷歌搜索中,我看到人们只是说要使用 compojure.route/resources 但随着我的学习,我希望它像这样工作,然后再添加更多库。这里发生了什么?