我创建了 Compojure入门页面中给出的示例 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)
我在 WEB-INF/lib 文件夹中包含了 Clojure、Clojure contrib jar。
有人在 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)
当我(defservice greeter)
用
(run-server {:port 8080}
"/*" (servlet greeter))
我可以运行它并从浏览器访问 URL。
但是,当我从 Apache Tomcat 运行它时,我仍然面临同样的问题。