我創建了Compojure Getting Started Page中給出的示例WAR,並將其部署到Apache Tomcat 6.0.2 wepapps文件夾。我用Web.xml中是如下:使用部署在Apache Tomcat上的Clojure創建的WAR不運行Servlet
<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)
我已經包含在WEB-INF/lib文件夾中的Clojure,Clojure的的contrib罐子。
有沒有人遇到Apache Tomcat上的Clojure WAR類似的問題?
我試圖運行的Servlet是:
;; 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)
當我與
(run-server {:port 8080}
"/*" (servlet greeter))
取代(defservice greeter)
我能夠從瀏覽器中運行這個和訪問URL。
但是,當我從Apache Tomcat運行這個時,我仍然面臨同樣的問題。
我添加了下面來測試我的Servlet,這運行正常。 (run-server {:port 8090} \t「/ *」(servlet greeter)) – 2009-12-28 17:52:17