Java 试图让Guice servlet工作。我错过了什么?

Java 试图让Guice servlet工作。我错过了什么?,java,jetty,guice,Java,Jetty,Guice,我正在尝试将Guice作为SpringDI的轻量级替代品用于个人项目。我有以下代码: @WebListener public class ApplicationInitializer extends GuiceServletContextListener { private static Logger log = LoggerFactory.getLogger(ApplicationInitializer.class); @Override protected Inj

我正在尝试将Guice作为SpringDI的轻量级替代品用于个人项目。我有以下代码:

@WebListener
public class ApplicationInitializer extends GuiceServletContextListener {

    private static Logger log = LoggerFactory.getLogger(ApplicationInitializer.class);

    @Override
    protected Injector getInjector() {
        log.info("Setting up Guice");
        Injector injector = Guice.createInjector(new ServletModule(){

            @Override
            protected void configureServlets() {
                serve("*.html").with(DefaultServlet.class);
                log.info("Configured servlets");
            }
        });
        return injector;
    }
}
然后是以下servlet:

@Singleton
public class DefaultServlet extends HttpServlet {

    private static Logger log = LoggerFactory.getLogger(DefaultServlet.class);

    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        log.info("Got to servlet");
        req.getRequestDispatcher("/WEB-INF/jsp/index.jsp").forward(req, resp);
    }
}
我在日志的第一个代码片段中看到了两行日志,但无法让servlet响应。我不确定是否缺少配置,但我找不到比这更重要的代码示例

您希望使用什么URL?我已将其配置为在Jetty中使用根应用程序上下文路径运行,因此我希望以下操作能够正常工作:

我能得到的只有404。我从未在servlet中看到日志行


更新:如果我嵌入Jetty服务器并在main()中启动它,则此代码有效。在servlet容器中运行它有什么不同呢?

编辑:我之前的回答是错误的。可以为GuiceFilter类编写一个简单的适配器,它允许我们使用@WebFilter对其进行注释,并允许我们完全消除guiceweb应用程序中的web.xml。见下文:

@WebFilter(value="/*", initParams= {})
public class GuiceFilterAdapter extends GuiceFilter {

    public void init(FilterConfig filterConfig) throws ServletException {
        super.init(filterConfig); 
    }
}

你的
web.xml
是什么样子的?我没有。@WebListener注释是我试图用来引导应用程序的。应用程序进入上面代码中的“配置的servlet”行。但是,我很可能在web.xml中遗漏了其他内容。