非法状态将Web应用程序升级到Spring Boot 2.4后的异常

我的 Web 应用在升级到 Spring Boot 2.4 后不再启动。它引发以下错误:

Unable to locate the default servlet for serving static content. Please set the 'defaultServletName' property explicitly.

我正在使用以下代码来更改上下文路径,我的研究指出我是“罪魁祸首”(更改上下文路径):

@Bean
public ServletWebServerFactory servletContainer() 
{
    String tomcatPort = environment.getProperty("tomcatPort");
    
    TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
    tomcat.setPort(tomcatPort != null ? Integer.parseInt(tomcatPort) : 8080);
    tomcat.setContextPath("/Carbon");
    tomcat.setBaseDirectory(new File(System.getenv("MDHIS3_HOME")));
    
    setTomcatProtocol(tomcat);
    
    return tomcat;
}

我有以下方法,我可以看到它可以用来传递默认的ServletName,但我不知道我应该传递什么值:

@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) 
{
    configurer.enable();
}

这在Spring Boot 2.3.4上完美运行。我在那里传递什么价值?是主控制器的名称吗?


答案 1

Spring Boot 2.4 发行说明中所述,默认情况下,嵌入式 Servlet 容器提供的不再注册。如果您的应用程序需要它(就像您的应用程序看起来需要的那样),您可以通过设置为 来启用它。DefaultServletserver.servlet.register-default-servlettrue

或者,您可以使用Bean以编程方式对其进行配置:WebServerFactoryCustomizer

@Bean
WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> enableDefaultServlet() {
    return (factory) -> factory.setRegisterDefaultServlet(true);
}

请注意,必须通过定制器应用配置,以便基于属性的默认配置不会覆盖它。


答案 2

推荐