2012-04-03 2 views
2

서로 다른 포트에서 실행되는 두 개의 별개의 app/handler를 가진 clojure/ring 프로젝트가 있습니다 (하나는 api 용이고 다른 하나는 웹 프론트 엔드 용입니다). 그것들은 많은 코드를 공유하지만 각각은 그 인터페이스에 특정한 모든 작업을 수행하는 자체 네임 스페이스를 가지고 있습니다. 이제는 tomcat이나 비슷한 (실제로는 모든 서블릿 컨테이너에서 작동해야하는) 서블릿으로 배포하고 싶습니다. 나는 lein-ring이 서블릿에 하나의 핸들러 만 있다는 가정을하기 때문에 문제가 있습니다. 예를 들어, 내 project.clj에서 나는이 줄을 가지고 있습니다 :clojure/lein/ring : 서로 다른 일을하는 두 개의 링 핸들러가 있는데, 이것을 서블릿에 어떻게 래핑합니까?

:ring {:handler caribou.api/app 
     :servlet-name "caribou" 
     :init caribou.api/init} 

이것은 훌륭한 프론트 엔드는 무엇입니까? 자체 핸들러와 서블릿을 가질 수 있도록이 프로젝트를 포함하는 다른 프로젝트를 만들어야합니까? 서블릿은 항상 하나의 포트에서 실행됩니까?

기본적으로 잘 모르겠지만 두 가지가 있습니다. 자바 백그라운드에서 나오지 않으므로 서블릿 접근 방식과 그 한계점을 잘 모릅니다. 정확하게 clojure는 서블릿 패러다임으로 변환되어이 프로젝트를 일반적인 방식으로 구조화합니다.

도움 주시면 감사하겠습니다.

답변

1

동일한 컨테이너의 모든 서블릿이 동일한 서버에서 제공되므로 동일한 포트에서 제공됩니다. 일반적으로 /servlet1 또는 /my/servlet과 같은 다른 URI 접두어를 지정하여 다른 서블릿을 식별합니다.

반지가있는 별도의 서블릿을 만들지 못하게하는 것이 있는지는 잘 모르겠지만 전체 앱이 Clojure 기반 인 경우 일반적으로 좋지 않은 것처럼 보입니다. 적어도, lein-ring 플러그인은 오직 하나의 서블릿 만 웹 어플리케이션에 사용하도록 강제합니다.

당신이 할 수있는 한 가지는 URI를 기반으로하는 app 핸들러 나 API 핸들러에 위임하는 상위 핸들러를 만드는 것입니다. 이것은 본질적으로 Servlet API에 로직을 위임 할 필요없이 제어를 제공합니다.