将 Web 应用程序升级到 Spring Boot 2.4 后出现 IllegalStateException
IllegalStateException after upgrading web app to Spring Boot 2.4
我的网络应用在升级到 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;
}
我有以下方法,我可以看到它可用于传递 defaultServletName 但我不知道应该传递什么值:
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer)
{
configurer.enable();
}
这在 Spring Boot 2.3.4 上完美运行。我在那里传递什么价值?是主控的名字吗?
与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);
}
请注意,必须通过自定义程序应用配置,这样基于属性的默认配置不会覆盖它。
我的网络应用在升级到 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;
}
我有以下方法,我可以看到它可用于传递 defaultServletName 但我不知道应该传递什么值:
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer)
{
configurer.enable();
}
这在 Spring Boot 2.3.4 上完美运行。我在那里传递什么价值?是主控的名字吗?
与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);
}
请注意,必须通过自定义程序应用配置,这样基于属性的默认配置不会覆盖它。