- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试遵循有关使用 Guice 作为 Web 服务器的最小教程,而不需要 web.xml:http://www.remmelt.com/post/minimal-guice-servlet-without-web-xml/
与本教程的创建者一样,我无法使 ServletModule 过滤器命令按预期工作,但所有相同的代码,而不是在 Filter 类上使用 @WebFilter 属性,都会产生一个工作的 Web 服务器。
如何使 ServletModule 过滤器工作? ServletModule 的过滤器方法和 @WebFilter 属性之间有什么区别导致了这种期望的差异?
除了本教程中介绍的内容之外,我还尝试在“filter”命令之前绑定(bind)过滤器。
@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。
最佳答案
据我所知,我正在寻找的东西是不可能的。为了声明一个没有@WebFilter属性的过滤器,你必须有一个像这样的web.xml:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Application</display-name>
<filter>
<filter-name>guiceFilter</filter-name>
<filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>guiceFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
总而言之,您可以使用@WebFilter属性,或者您必须有一个web.xml,为了更容易阅读的配置,没有办法避免这两者。
关于java - ServletModule.filter 与 @WebFilter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56845478/
我在使用 Guice 时在网络上找到了使用 AbstractModule 和 ServletModule 类作为父类(super class)型的示例。我想知道在 Web 应用程序中什么场景需要使用哪
我正在尝试遵循有关使用 Guice 作为 Web 服务器的最小教程,而不需要 web.xml:http://www.remmelt.com/post/minimal-guice-servlet-wit
我使用sitebricks在 Google App Engine 上构建 RESTful API。我为我的 GuiceCreator 中的所有/rest/* URL 注册了两个过滤器。 如何使用 fi
我正在尝试使用 Guice 创建的 Vaadin 应用程序实例注入(inject)一个拦截器。 我遵循了 Vaadin Wiki 中的 Vaadin-Guice 集成文档。和 Guice Wiki 中
我正在尝试将 Jetty 从 8 升级到 9.3。由于 _asyncSupported 的默认值变为 false,因此会显示以下错误。 java.lang.IllegalStateException:
我是一名优秀的程序员,十分优秀!