Я пытаюсь следовать минимальному руководству по использованию Guice для веб-сервера, без необходимости web.xml: http://www.remmelt.com/post/minimal-guice-servlet-without-web-xml/
Как и создатель учебника, мне не удается заставить команду фильтра ServletModule работать должным образом, но все тот же код, вместо этого использование атрибута @WebFilter в классе Filter приводит к работающему веб-серверу.
Как мне заставить работать фильтр ServletModule? В чем разница между методом фильтра ServletModule и атрибутом @WebFilter, который приводит к этой разнице в ожиданиях?
Помимо того, что описано в руководстве, я также пытался связать фильтр перед командой «filter».
@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 на тот же запрос.