使用 JBoss AS 7,我正在尝试使用 Java 代码而不是 web.xml 配置我的 Servlet 3.0 容器。我的问题是,当我注册一个映射到上下文根(“/”)的 Servlet 时,默认的 servlet 优先处理请求。我试过 ServletContextListener 和 ServletContainerInitializer 都没有运气。
尝试 1:ServletContextListener
@WebListener
public class AppInitializer implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
ServletContext context = event.getServletContext();
ServletRegistration.Dynamic homeServlet = context.addServlet("homeServlet", new HomeServlet());
homeServlet.addMapping("/");
homeServlet.setLoadOnStartup(1);
}
@Override
public void contextDestroyed(ServletContextEvent event) {
// Do nothing.
}
}
尝试 2:ServletContainerInitializer
public class AppInitializer2 implements ServletContainerInitializer {
@Override
public void onStartup(Set<Class<?>> classes, ServletContext context) throws ServletException {
ServletRegistration.Dynamic homeServlet = context.addServlet("homeServlet", new HomeServlet());
homeServlet.addMapping("/");
homeServlet.setLoadOnStartup(1);
}
}
附加信息
- 如果我将映射从 更改
/
为/example
,我的 Servlet 会正确处理对新路径的请求。 - 如果我
/
通过 web.xml 而不是 Java 代码注册我的 Servlet,我的 Servlet 会正确处理对上下文根的请求。
So… what can I do to register a Servlet to the context root via Java code without it being overridden by the DefaultServlet?
Thanks!