2011-03-18 49 views
4

我正在使用Compojure Web應用程序框架和Maven編寫一個使用Clojure編寫的簡單Web應用程序。Clojure + Compojure + Maven應用程序在Tomcat中不起作用

這是我的servlet的簡化版本:

(ns core 
    (:use compojure.core ring.util.servlet) 
    (:require [compojure.route :as route]) 
    (:gen-class :extends javax.servlet.http.HttpServlet)) 

(defroutes main-routes 
    (GET "/" _ {:status 302 :headers {"Location" "/about"}}) 
    (GET "/about" [] "This is the about page") 
    (route/not-found "File not found.")) 

(defservice main-routes) 

這像這樣使用Maven的Jetty的目標工作正常:

mvn jetty:run 

然而,當我建立從經此一戰和部署一個Tomcat,我總是看到我的404頁面,即「文件未找到。」。你能告訴我爲什麼發生這種情況嗎?

我構建WAR如下:

mvn package 

我注意到在Tomcat中關於重複的servlet-api.jar文件警告,和Maven確實把它放到WEB-INF/lib目錄下。我從WAR中刪除了servlet-api.jar,但仍然遇到了同樣的問題,但這是否意味着我的整個WAR打包過程出了問題?

這可能是不同的URL路徑的問題?當我開始在本地碼頭,網址如下:

http://localhost:8080/home

但如果我啓動它在Tomcat中,它是這樣的:

http://localhost:8080/myapp/home

原來是「/ myapp「也許是路線的一部分?我將如何解決這個問題?

回答

3

看看following example - 它運行在tomcat &碼頭。如果您使用命令mvn碼頭:運行,那麼你也需要指定前綴,將使用(你可以看到這個pom.xml戰爭目標)

+0

謝謝,我想通了你的項目。訣竅是1.按照您的說明設置jetty的上下文路徑,並2.將生成的war的名稱設置爲「myapp」,因此它不會是「myapp-1.0.0-SNAPHOT」。任何關於爲什麼servlet-api.jar包含在內的想法? – futlib 2011-03-19 14:08:31

0

自由地從http://wiki.apache.org/tomcat/HowTo報價:

如果你是使用 「戰爭」 的方法來部署應用程序:

  • 刪除根目錄
  • 名WAR文件 「ROOT.war」(首都強制)
  • 直接在/ webapps目錄中刪除ROOT.war文件。 Tomcat會自動部署它。
+0

我不認爲這是一個好主意:這意味着只有像我這樣的應用程序可以安裝在服務器上。 – futlib 2011-03-19 06:07:51

相關問題