2011-01-27 5 views
2

Guice 3.0-rc2 (maven central에서)와 서블릿 확장을 사용하도록 servlet-project를 마이그레이션하려고합니다. 이미 동일한 문제가있는 다른 프로젝트를 이미 마이그레이션했습니다.Guice Servlet Extension에서 context.getNamedDispatcher를 사용하는 방법

Guice가 web.xml을 기본적으로 쓸모 없게 만들었으므로 서블릿 이름을 정의 할 곳이 없습니다. 코드베이스는 ServletContext#getNamedDispatcher("name")을 매우 많이 사용하며 가능한 한 조금 변경하고 싶습니다. 첫 번째 코드베이스는 getNamedDispatcher을 한 번 사용했기 때문에 해결할 수있었습니다.

해당 서블릿은 어떤 경로도 듣지 않으므로 getRequesetDispatcher을 사용하면 안됩니다.

누구에게 의견이 있습니까?

답변

0

Guice가 시도한 가장 큰 것 중 하나는 신뢰할 수없는 String 식별자를 사용하지 않고 실제 Java 유형을 사용하여 작업을 수행하는 것입니다. guice-servlet 관리 서블릿은 이름이 있습니다 (toString()Key입니다.), 나는 ServletContext이이를 인식하고 있다고 생각하지 않습니다. 당신을 위해 작동 할 수

하나의 옵션은 실제로 당신이 요청을 통과 할 수 있도록하려면 직접 자신 그것을 할 서블릿 (들)을 주입하는 것입니다이를 위해

@Singleton 
public class TestServlet extends HttpServlet { 
    private final TestServlet2 testServlet2; 

    @Inject public TestServlet(TestServlet2 testServlet2) { 
    this.testServlet2 = testServlet2; 
    } 

    @Override 
    protected void doGet(HttpServletRequest httpServletRequest, 
         HttpServletResponse httpServletResponse) 
     throws ServletException, IOException { 
    testServlet2.doGet(httpServletRequest, httpServletResponse); 
    } 
} 

이 작업을, 당신은 필요합니까 ServletModule에 서블릿을 등록하려면 ... 나는 어떤 URL에도 매핑하지 않으려면 serve("").with(TestServlet2.class)이 될 수 있다고 생각합니다.

+0

죄송합니다. 저에게 도움이되지 않습니다. Servlet의 이름을 결정하거나 할당하는 방법이 필요합니다. Servlet의 이름도 일부 라우팅 규칙 엔진의 일부이기 때문에 특별히 신경 쓰지 않습니다. – msung

+0

@msung : 서블릿과 같은 필터를 통해 요청을 라우팅하는 것과 관련이 있습니다. 그렇지 않다면, 하나의 옵션은 web.xml에서와 같은 이름을 사용하는'MapBinder' (멀티 바인딩 확장에서)를 사용하여 서블릿을 바인딩 한 다음'RequestDispatcher'를 사용하지 않고'Map'에서 찾아 볼 수 있습니다 . 그렇지 않으면, 당신이 원하는 것은 아마 guice-servlet이하도록 설계된 범위를 벗어나는 것일 것입니다. – ColinD

+0

이전에 사용 된 서블릿 이름을 해당 클래스에 매핑하여이 문제를 해결했습니다. 내가 말할 수있는 한, 서블릿을 찾는다. 당신의 예제에서 메소드 삽입을 사용하는 특별한 이유가 있습니까? 서블릿을 직접 주입하거나 getInstance (YourServlet.class)가 작동하지 않습니까? – msung

관련 문제