4

Compojure Web アプリケーション フレームワークと Maven を使用して、Clojure で記述された単純な Web アプリケーションに取り組んでいます。

これは私のサーブレットの簡易版です。

(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ディレクトリを削除
  • war ファイルに「ROOT.war」という名前を付けます (大文字は必須)
  • ROOT.war ファイルを /webapps ディレクトリに直接ドロップします。Tomcat が自動的にデプロイします。
于 2011-03-18T15:37:31.170 に答える