Java 试图让Guice servlet工作。我错过了什么?
我正在尝试将Guice作为SpringDI的轻量级替代品用于个人项目。我有以下代码: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
@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中遗漏了其他内容。