【问题标题】:JBoss AS 7: Map Servlet to Context Root ("/") via Code ConfigJBoss AS 7:通过代码配置将 Servlet 映射到上下文根(“/”)
【发布时间】: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


【解决方案1】:

我在使用 JBoss AS 7.1.1 和 Spring MVC 3.2.3.RELEASE 时遇到了同样的问题。基于此来自WebApplicationInitializer javadocs

Tomcat下映射到'/'

Apache Tomcat 将其内部 DefaultServlet 映射到“/”,并且在 Tomcat 版本

我认为没有任何方法可以将您的 servlet 映射到没有 web.xml 的上下文根,除非升级或替换了 servlet 容器。看起来 JBoss AS 7.1.1.Final 使用 JBoss Web 7.0.13,我假设它与 Tomcat 7.0.13 一致,并且在 7.0.15 版本之前以编程方式覆盖 DefaultServlet 上下文根映射显然是不可能的。

与此同时,要么在 web.xml 中定义您的 servlet 映射,要么不映射到上下文根。无赖。

【讨论】:

  • 您能确认JBoss 7.2 中使用的是什么版本的JBoss Web 吗?这是我现在工作的版本。
猜你喜欢
  • 2013-03-15
  • 1970-01-01
  • 2012-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-16
  • 2017-05-27
相关资源
最近更新 更多