我按照这个例子通过 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 文件夹中的部署位置提供了一个解决方案,但我希望能够减少干扰。