2009-12-27 4 views
3

Compojure Getting Started Page에서 주어진대로 샘플 WAR을 생성하고 Apache Tomcat 6.0.2 wepapps 폴더에 배포했습니다. 내가 사용은 web.xml은 다음과 같습니다 : URL을 액세스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> 

내가 WEB-INF/lib 폴더에있는 Clojure의,의 Clojure있는 contrib 단지를 포함 한 다음과 같은 오류

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) 

에게 던졌습니다.

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) 

내가

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

으로 (defservice greeter)를 교체 할 때 내가 브라우저에서이 액세스 URL을 실행할 수입니다.

그러나 아파치 톰캣에서 실행할 때, 나는 여전히 같은 문제에 직면 해있다.

답변

4

문제는 "/*" 대신 defroutes에서 "/"을 사용하는 것과 관련이 있습니다. 내가 같이 defroutes 정의하는 경우 : 그것은 아파치 톰캣 6

4

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 

이 중 어느 것도 해결되지 않으면 라우팅 테이블과 같은 추가 정보를 게시하십시오.

+0

에서 작동

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

을 나는 내 서블릿을 테스트하려면 다음이 잘 실행했다. (실행 서버 {: 포트 8090} \t "/ *"(서블릿 greeter)) –

관련 문제