2011-01-27 15 views
2

我在嘗試遷移一個servlet-project以使用Guice 3.0-rc2(來自maven central)及其servlet擴展。我已經遷移了另一個項目,我有同樣的問題:如何在Guice Servlet擴展中使用context.getNamedDispatcher

由於Guice渲染web.xml基本沒用,我不知道在哪裏定義我的servlets名稱。該代碼庫使ServletContext#getNamedDispatcher("name")的使用量非常大,我想盡可能少地改變。第一個代碼庫只使用了getNamedDispatcher一次,所以我能夠解決這個問題。

有問題的Servlets沒有聽任何路徑,所以使用getRequesetDispatcher不會。

有沒有人有任何建議?

回答

0

Guice試圖做的一件大事就是擺脫使用不可靠的String標識符來使用實際的Java類型來執行操作。雖然guice-servlet管理的servlet確實有名稱(它們綁定爲KeytoString()),但我不認爲ServletContext知道它們。這可能會爲你工作

一種選擇是實際注入的servlet(S)你想能夠通過請求並直接自己動手:

@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中註冊servlet ...我認爲您可以serve("").with(TestServlet2.class)爲了不將它映射到任何URL。

+0

對不起,這不適合我。我特別需要一種方法來確定/分配Servlet的名稱,因爲它們也是我不想接觸的一些路由規則引擎的一部分。 – msung 2011-01-28 14:10:30

相關問題