1

我按照这个例子通过 java 配置我的 DispatcherServlet 和 Spring 的WebApplicationInitializer--> 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因为显然已经有一个 Servlet映射到/,我只能假设这是 Tomcat 的默认 Servlet。如果我忽略mappingConflicts,我DispatcherServlet的不会映射到任何东西。

有什么方法可以用我自己的方法覆盖这个默认的 servlet 映射,还是我卡住了我的DispatcherServlet映射/*

这个答案通过更改您的应用程序在 Catalina webapps 文件夹中的部署位置提供了一个解决方案,但我希望能够减少干扰。

4

1 回答 1

0

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

请参阅此 Bugzilla 问题进行讨论。

于 2013-02-22T16:44:15.110 回答