【发布时间】:2012-06-01 15:17:46
【问题描述】:
使用 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 会正确处理对上下文根的请求。
那么……我可以做些什么来通过 Java 代码将 Servlet 注册到上下文根而不被 DefaultServlet 覆盖?
谢谢!
【问题讨论】:
-
这个问题你解决了吗?
-
@bunnyjesse112 最简单的解决方案是选择更好的 Web 服务器。 :) 太糟糕了,我不能在我工作的地方做到这一点。但是,如果不使用
web.xml,您似乎无法覆盖默认 servlet。但是,您可以在web.xml中指定初始化上下文的类,并且至少可以获取 Spring 容器的纯代码配置。
标签: java jakarta-ee servlets jboss7.x