4

Compojure Getting Started Pageに示されているサンプル WAR を作成し、 Apache Tomcat 6.0.2 の wepapps フォルダーにデプロイしました。私が使用した Web.xml は次のとおりです。

<web-app>
 <servlet>
   <servlet-name>myservlet</servlet-name>
   <servlet-class>myapp.MyServlet</servlet-class>
 </servlet>
 <servlet-mapping>
   <servlet-name>myservlet</servlet-name>
   <url-pattern>/</url-pattern>
 </servlet-mapping>
</web-app>

URL にアクセスすると、次のエラーがスローされます

java.lang.NullPointerException: Handler returned nil (maybe no routes matched URI)
    compojure.http.servlet$request_handler__72.invoke(servlet.clj:110)
    myapp.MyServlet$_service__108.invoke(MyServlet.clj:11)
    myapp.MyServlet.service(Unknown Source)

Clojure、Clojure contrib jar を WEB-INF/lib フォルダーに含めました。

Apache Tomcat の Clojure WAR で同様の問題に遭遇した人はいますか?

私が実行しようとしているサーブレットは次のとおりです。

 ;; src/myapp/MyServlet.clj
(ns myapp.MyServlet
    (:use compojure)
    (:gen-class
        :extends javax.servlet.http.HttpServlet))

(defroutes greeter
    (GET "/"
        (html [:h1 "Hello World"])))

(defservice greeter)

に置き換えた(defservice greeter)とき

(run-server {:port 8080}
  "/*" (servlet greeter))

これを実行して、ブラウザから URL にアクセスできます。

ただし、これを Apache Tomcat から実行すると、同じ問題に直面します。

4

2 に答える 2

5

1) 実際にルートを定義しましたか? 開始するのは明らかな場所のように聞こえます。ルーティング テーブルが存在し、正しく定義されていることを確認してください。次のようなものが必要です:

(defroutes webservice
  (GET "/some-route/"
    some-function-name))) ;; more complicated variations are possible, of course

2) Jetty でアプリを起動してみてください。同じエラーで Jetty でも動作しない場合、問題は WAR の展開ではなくアプリにあります。

(defserver webserver
             {:port 8080}
             "/*" (servlet webservice))
(start main-server) ;; starts a Jetty webserver on 8080

どちらの方法でも解決しない場合は、ルーティング テーブルなどの追加情報を投稿してください。

于 2009-12-27T21:55:20.787 に答える
5

この問題"/"は、defroute で の代わりに を使用したことに関連していました"/*"。デルートを次のように定義すると:

(defroutes greeter
    (GET "/*"
        (html [:h1 "Hello World"])))

Apache Tomcat 6 で動作します。

于 2010-01-11T18:02:23.953 に答える