4

我正在使用 Compojure Web 应用程序框架和 Maven 编写一个用 Clojure 编写的简单 Web 应用程序。

这是我的 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

但是,当我以此构建 WAR 并将其部署在 Tomcat 上时,我总是看到我的 404 页面,即“找不到文件。”。你能告诉我为什么会这样吗?

我按如下方式构建WAR:

mvn package

我注意到 Tomcat 中有一个关于重复 servlet-api.jar 的警告,而 Maven 确实将它放入了 WEB-INF/lib。我从 WAR 中删除了 servlet-api.jar 仍然遇到同样的问题,但这是否意味着我的整个 WAR 打包过程有问题?

这可能是不同 URL 路径的问题吗?当我启动一个本地 Jetty 时,URL 如下:

http://localhost:8080/home

但是如果我在 Tomcat 上启动它,它是这样的:

http://localhost:8080/myapp/home

那么“/myapp”可能是路线的一部分吗?我将如何解决这个问题?

4

2 回答 2

3

看看下面的例子- 它在 tomcat 和 jetty 中运行。如果您使用mvn jetty:run,那么您还需要指定将使用的前缀(您可以在pom.xml中看到这个用于战争目标)

于 2011-03-18T15:35:49.763 回答
0

自由引用自http://wiki.apache.org/tomcat/HowTo

如果您使用“war”方法来部署您的应用程序:

  • 删除ROOT目录
  • 将您的战争文件命名为“ROOT.war”(必须大写)
  • drop the ROOT.war file directly in the /webapps directory. Tomcat will automatically deploy it.
于 2011-03-18T15:37:31.170 回答