我正在尝试迁移servlet项目以使用Guice 3.0-rc2(来自maven central)及其servlet扩展。我已经迁移了另一个项目,我遇到了同样的问题:
由于Guice渲染web.xml
基本没用,我不知道在哪里定义我的servlet名称。代码库大量使用ServletContext#getNamedDispatcher("name")
,我想尽可能少地改变。第一个代码库仅使用getNamedDispatcher
一次,因此我可以解决这个问题。
有问题的Servlets没有收听任何路径,因此使用getRequesetDispatcher
不会。
有人有任何建议吗?
答案 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)
以便不将其映射到任何网址。