2017-03-26 83 views
0

我的文件夾結構看起來像這樣路徑html頁面

src 
    main 
     clojure 
       .../core.clj 
     webapp 
       WEB-INF 
        index.html 

在我core.clj我有碼頭

(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一個main函數的代碼

(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文件。 (/返回正確的rest response消息)。

如何指定路徑爲html頁面爲routes

回答

1

您沒有顯示您的build.gradle,所以我無法確定您的類路徑如何配置。如果您使用的是默認值,那麼問題是您的index.html文件在類路徑中不可用,因爲它應該在${rootDir}/src/main/resources(這是資源/非代碼文件的默認位置,應該包含在classpath中)以及resources子目錄中ring.util.response/resource-response:root配置爲resource

因此,您的index.html應位於以下路徑下:${rootDir}/src/main/resources/resources/index.html

+0

是的,我使用的是默認值。哇它的作品。但基於web的應用程序的最佳實踐不依賴於clojurescript? – lapots

+1

約定是將HTTP服務器提供的資源放在類路徑的子目錄中,通常命名爲'public'(也就是'$ {rootDir}/src/main/resources/public')。不應該通過HTTP可用。 –