2011-11-16 4 views
2

Guice를 사용하여 웹 앱에서 요청을 라우팅하고 있으며 처리 할 URL 패턴의 라우팅을 모듈화하고 싶습니다.Guice 서블릿으로 라우팅 하위 경로

delegate("/foo/bar/*").to(SomeOtherServletModule.class); 

// in SomeOtherServletModule.configureServlets: 
serve("/foo/bar/quux").with(Quux.class); 

또는 더 나은 : 이상적으로, 내 ServletModule이 같은 일을 할 수 있도록하고 싶습니다

delegatePrefix("/foo/bar/").to(SomeOtherServletModule.class); 

// in SomeOtherServletModule.configureServlets: 
serve("/quux").with(Quux.class); // prefix removed 

은 Guice이 가능합니까? Guice는 ServletModules에 의해 설치된 바인딩을 실제로 열심히 시도하는 것으로 보입니다.이 싱글 톤은 차례대로 GuiceServletContextListener에 의해 GuiceFilter에 의해 사용되는 것으로 저장되었지만,이 부분을 un-singleton으로 바꾸고 싶습니다. 단일 기능으로 모든 것을 단단히 묶는 대신에

답변

3

저는 Guice Servlet을 만든 사람입니다. 이 방법으로 사용하지 않는 모듈은 혼란 스럽기 때문에 기본적으로 설명하는 것처럼 허용되지 않습니다.

예를 들어 많은 모듈은 "/ *"에 등록하는 필터를 제공하여 차단 기능 (예 : 트랜잭션)을 제공합니다. 자동 접두사를 붙이면 우연히 작동이 멈출 수 있습니다. 서블릿 모듈이 과도기적으로 설치 될 수 있다는 점을 감안할 때 이는 한 코드에 대해 경계심을 두는 것만 큼 간단하지 않습니다. 또한 정규식 바인딩 (예 : /\.html$/)을 사용하면 접두사를 어떻게 처리 할 수 ​​있습니까? 우리는 그들을 지원합니까 (어려운 문제)? 아니면 단순히 정규식 바인딩을 정상적으로 등록하고 그들에게 놀라운 예외를 만들까요?

올바르게 매핑하는 방법을 알고있는 SomeOtherServletModule ("/ myprefix")의 생성자를 사용하여 사용자가 원하는 것을 고려해 볼 때이 기능을 제공하지 않기로 결정했습니다.

+1

흥미로운 의견입니다. 나는 이것이 거대한 문제는 아니라고 생각한다. 하나는 다른 웹 서버의 루트에있는 경로 아래 모든 요청을 프록시하는 것과 대략 동일하다고 생각할 수있다. 서브 모듈이이 사용 방법에 대한 지원을 선언해야 함에도 불구하고 동일한 서블릿 컨테이너 내에서 임의의 모듈이 서브 패럿 될 수 있다는 사실은 실제로 혼란을 겪을 수 있지만,이를 달성 할 수있는 방법이 있으면 좋을 것입니다. 하지만이 기능 요청에 속하는 것 같아요이 경우 :) – bdonlan

관련 문제