【发布时间】:2019-11-12 16:32:26
【问题描述】:
我正在尝试遵循有关将 Guice 用于 Web 服务器的最小教程,而不需要 web.xml:http://www.remmelt.com/post/minimal-guice-servlet-without-web-xml/
与本教程的创建者一样,我无法使 ServletModule 过滤器命令按预期工作,但所有相同的代码,而不是在 Filter 类上使用 @WebFilter 属性会导致 Web 服务器正常工作。
如何使 ServletModule 过滤器工作?导致这种期望差异的 ServletModule 的过滤方法和 @WebFilter 属性有什么区别?
除了教程中的内容之外,我还尝试在“过滤器”命令之前绑定过滤器。
@WebListener
public class GuiceServletConfig extends GuiceServletContextListener {
@Override
protected Injector getInjector() {
return Guice.createInjector(new ServletModule() {
@Override
protected void configureServlets() {
super.configureServlets();
serve("/*").with(WiredServlet.class);
filter("/*").through(GuiceWebFilter.class);
bind(MessageSender.class).to(MessageSenderImpl.class);
}
});
}
}
public class GuiceWebFilter extends GuiceFilter{
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
super.doFilter(servletRequest, servletResponse, filterChain);
}
}
@Singleton
public class WiredServlet extends HttpServlet {
@Inject
private MessageSender messageSender;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getOutputStream().print("Hello world!");
}
}
使用@WebFilter("/*"),我得到“Hello World!”的简单响应。
使用过滤器(“/*”),我在同一个请求中得到了 404。
【问题讨论】:
标签: java guice servlet-filters