使用环和 gradle 到 html 页面的路径
path to html page using ring and gradle
我的文件夹结构是这样的
src
main
clojure
.../core.clj
webapp
WEB-INF
index.html
在我的 core.clj
中,我有一个 main
码头功能
(ns com.lapots.platform.web.core
(:use ring.adapter.jetty)
(:use com.lapots.platform.web.router.core)
(:require [ring.middleware.reload :refer [wrap-reload]])
(:import [org.eclipse.jetty.server.handler StatisticsHandler])
(:gen-class))
(def a-minute 60000)
(defn conf
[server]
(let [stats-handler (StatisticsHandler.)
default-handler (.getHandler server)]
(.setHandler stats-handler default-handler)
(.setHandler server stats-handler)
(.setStopTimeout server a-minute)
(.setStopAtShutdown server true)))
(def app
(-> routes
wrap-reload))
(defn -main [& args]
(run-jetty app {:port 3000 :configurator conf :join? false}))
router/core.clj
有这个代码
(ns com.lapots.platform.web.router.core
(:require [compojure.core :refer [defroutes GET ANY]]
[liberator.core :refer [defresource resource]]
[ring.util.response :as resp]))
(defresource rest-handler
:handle-ok "rest response"
:etag "fixed-etag"
:available-media-types ["text/html"])
(defn wrapped-file-response [request]
(println "Attempt to read index.html")
(resp/resource-response "index.html" {:root "resources"}))
(defroutes routes
(GET "/" request rest-handler)
(GET "/home" request wrapped-file-response))
我启动 jetty
服务器作为典型的 gradle
任务
task startServer(dependsOn: classes, type: JavaExec) {
main = 'com.lapots.platform.web.core'
classpath = sourceSets.main.runtimeClasspath
}
但无法解析 index.html
文件。 (/
returns 正确 rest response
消息)。
如何为 routes
指定 html
页面的路径?
您没有显示您的 build.gradle
所以我无法确定您的类路径是如何配置的。如果您使用的是默认值,那么问题是您的 index.html
文件在类路径中不可用,因为它应该在 ${rootDir}/src/main/resources
下(这是 resource/non-code 文件的默认位置,应该包含在类路径)和 resources
子目录中,因为您的 ring.util.response/resource-response
:root
配置为 resource
.
因此您的 index.html
应该位于以下路径下:${rootDir}/src/main/resources/resources/index.html
.
我的文件夹结构是这样的
src
main
clojure
.../core.clj
webapp
WEB-INF
index.html
在我的 core.clj
中,我有一个 main
码头功能
(ns com.lapots.platform.web.core
(:use ring.adapter.jetty)
(:use com.lapots.platform.web.router.core)
(:require [ring.middleware.reload :refer [wrap-reload]])
(:import [org.eclipse.jetty.server.handler StatisticsHandler])
(:gen-class))
(def a-minute 60000)
(defn conf
[server]
(let [stats-handler (StatisticsHandler.)
default-handler (.getHandler server)]
(.setHandler stats-handler default-handler)
(.setHandler server stats-handler)
(.setStopTimeout server a-minute)
(.setStopAtShutdown server true)))
(def app
(-> routes
wrap-reload))
(defn -main [& args]
(run-jetty app {:port 3000 :configurator conf :join? false}))
router/core.clj
有这个代码
(ns com.lapots.platform.web.router.core
(:require [compojure.core :refer [defroutes GET ANY]]
[liberator.core :refer [defresource resource]]
[ring.util.response :as resp]))
(defresource rest-handler
:handle-ok "rest response"
:etag "fixed-etag"
:available-media-types ["text/html"])
(defn wrapped-file-response [request]
(println "Attempt to read index.html")
(resp/resource-response "index.html" {:root "resources"}))
(defroutes routes
(GET "/" request rest-handler)
(GET "/home" request wrapped-file-response))
我启动 jetty
服务器作为典型的 gradle
任务
task startServer(dependsOn: classes, type: JavaExec) {
main = 'com.lapots.platform.web.core'
classpath = sourceSets.main.runtimeClasspath
}
但无法解析 index.html
文件。 (/
returns 正确 rest response
消息)。
如何为 routes
指定 html
页面的路径?
您没有显示您的 build.gradle
所以我无法确定您的类路径是如何配置的。如果您使用的是默认值,那么问题是您的 index.html
文件在类路径中不可用,因为它应该在 ${rootDir}/src/main/resources
下(这是 resource/non-code 文件的默认位置,应该包含在类路径)和 resources
子目录中,因为您的 ring.util.response/resource-response
:root
配置为 resource
.
因此您的 index.html
应该位于以下路径下:${rootDir}/src/main/resources/resources/index.html
.