【问题标题】:IllegalStateException after upgrading web app to Spring Boot 2.4将 Web 应用升级到 Spring Boot 2.4 后出现 IllegalStateException
【发布时间】:2021-02-25 12:58:03
【问题描述】:

升级到 Spring Boot 2.4 后,我的 Web 应用程序不再启动。它抛出以下错误:

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;
}

我有以下方法,我可以看到它可以用来传递一个 defaultServletName,但我不知道我应该传递什么值:

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

这在 Spring Boot 2.3.4 上运行良好。我在那里传递什么值?是主控制器的名字吗?

【问题讨论】:

    标签: java spring-boot tomcat servlets contextpath


    【解决方案1】:

    作为described in the Spring Boot 2.4 release notes,内嵌Servlet容器提供的DefaultServlet默认不再注册。如果您的应用程序需要它,就像您的应用程序一样,您可以通过将server.servlet.register-default-servlet 设置为true 来启用它。

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

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

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

    【讨论】:

    • 谢谢你,安迪,我以为我昨天晚上读了所有相关的东西,但我想已经晚了。这确实可以解决它,但是有没有办法以某种方式以编程方式完成它?试图减少我的 application.properties 文件中的属性数量。谢谢!
    • TomcatServletWebServerFactory 上有一个你可以使用的 setter。我已经更新了我的答案。
    • 编程方法不起作用,我只能通过属性解决这个错误
    • 啊,是的。这是一个导致配置被覆盖的排序问题。我已经用更好的方法更新了答案。
    • 是的,成功了!谢谢安迪,你们太棒了!感谢您提供出色的产品!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    • 2022-01-04
    • 2021-09-06
    • 2015-08-31
    • 1970-01-01
    • 2022-08-24
    • 1970-01-01
    相关资源
    最近更新 更多