我尝试将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容器中运行它有什么不同?
答案 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);
}
}