如何将context.getNamedDispatcher与Guice Servlet扩展一起使用

时间:2011-01-27 17:03:19

标签: java servlets guice

我正在尝试迁移servlet项目以使用Guice 3.0-rc2(来自maven central)及其servlet扩展。我已经迁移了另一个项目,我遇到了同样的问题:

由于Guice渲染web.xml基本没用,我不知道在哪里定义我的servlet名称。代码库大量使用ServletContext#getNamedDispatcher("name"),我想尽可能少地改变。第一个代码库仅使用getNamedDispatcher一次,因此我可以解决这个问题。

有问题的Servlets没有收听任何路径,因此使用getRequesetDispatcher不会。

有人有任何建议吗?

1 个答案:

答案 0 :(得分:0)

Guice尝试做的一件大事就是不再使用不可靠的String标识符来使用实际的Java类型来做事。虽然guice-servlet托管的servlet确实有名称(toString()它们被绑定为Key,但我不认为ServletContext知道它们。

可能对您有用的一个选项是实际注入您希望能够将请求传递给的servlet,并自己直接执行:

@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)以便不将其映射到任何网址。