java - ServletRegistration url 映射与 Spring DispatcherServlet 冲突

标签 java servlets spring-mvc servlet-3.0

我关注了this example使用Spring的WebApplicationInitializer通过java配置我的DispatcherServlet --> javax.servlet.ServletContainerInitializer:

@Override
public void onStartup(ServletContext servletContext) throws ServletException {
    AnnotationConfigWebApplicationContext mvcContext = new AnnotationConfigWebApplicationContext();
    mvcContext.register(MyConfiguration.class);

    ServletRegistration.Dynamic appServlet = servletContext.addServlet("appServlet", new DispatcherServlet(mvcContext));
    appServlet.setLoadOnStartup(1);

    Set<String> mappingConflicts = appServlet.addMapping("/");
    if (!mappingConflicts.isEmpty()) {
        for (String s : mappingConflicts) {
            LOGGER.error("Servlet URL mapping conflict: {}", s);
        }
        throw new IllegalStateException("'appServlet' cannot be mapped to '/'");
    }
}   

当我启动 Tomcat 时,我收到上述 IllegalStateException 因为 apparently there is already a Servlet映射到 / 我只能假设这是 Tomcat 的默认 Servlet。如果我忽略映射冲突,我的 DispatcherServlet 不会映射到任何内容。

是否有任何方法可以用我自己的方法覆盖此默认 servlet 映射,还是我一直将 DispatcherServlet 映射到 /*

This answer通过更改应用程序在 Catalina webapps 文件夹中的部署位置提供了一个解决方案,但我希望有一些侵入性较小的解决方案。

最佳答案

事实证明,您可以通过 Java 在 / 上映射 DispatcherServlet 或任何其他 Servlet(而不是始终可以执行此操作的 xml),但仅限于 Tomcat 版本> 7.0.14,我用的是 7.0.12。

参见this Bugzilla issue供讨论。

关于java - ServletRegistration url 映射与 Spring DispatcherServlet 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15028600/

相关文章:

java - iReport - java.lang.ClassNotFoundException 异常

java - 双for循环中的死代码

java - Weblogic 12.2 上的 Swagger Bootstrap

java - 如何在 Spring 中创建数据更改表单

javascript - 在提交表单之前执行 Javascript 函数

java - 如何将 war 文件部署到任何应用程序服务器中?

jsp - 仅针对特定 URL 的 Tomcat 基本身份验证

java - 从带有通配符路径的 servlet 发送时出现 404

java - Servlet PrintWriter 输出流真的需要关闭吗?

Spring:无法将 @Transactioanl 注释从 DAO 移动到服务层