2017-03-26 68 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可用。 –