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

时间:2015-09-13 13:53:32

标签: java jetty guice

我尝试将Guice作为个人项目的Spring DI的轻量级替代品。我有以下代码:

@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响应。我不确定我是否缺少配置,但我找不到比这更重要的代码示例...

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

http://localhost:8080/index.html

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

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

1 个答案:

答案 0 :(得分:0)

编辑:我之前的回答是错误的。 可以为GuiceFilter类编写一个简单的适配器,允许我们用@WebFilter注释它,而 允许我们完全取消web.xml Guice网络应用程序。见下文:

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

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