java - Servlet 上下文不仅在构建 WAR 时设置
问题描述
我们正在从 Spring 迁移WebInitializer
到 Spring boot 2.5.0SpringBootServletInitializer
我们需要为我们的 Servlet 调度程序添加一个上下文路径,代码如下:
@SpringBootApplication(exclude = { JmsAutoConfiguration.class, ActiveMQAutoConfiguration.class,
SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class })
public class WebServerConfig extends SpringBootServletInitializer implements ApplicationContextAware {
@Bean
public WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> webServerFactoryCustomizer() {
return factory -> {
factory.setRegisterDefaultServlet(true);
factory.setContextPath("/servlet");
};
}
}
运行 Maven WAR 常规 Tomcat 8.5 时,未设置 Servlet 上下文,记录:
o.a.c.c.C.[Catalina].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
常规主
public static void main(String[] args) {
SpringApplication.run(WebServerConfig.class, args);
}
当运行嵌入式 Tomcat 代码按预期工作时:
o.a.c.c.C.[.[localhost].[/servlet] : Initializing Spring DispatcherServlet 'dispatcherServlet'
Maven pom:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${springframework.boot-version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>${springframework.boot-version}</version>
<scope>provided</scope>
</dependency>
我也有configure
方法:
@Override
protected SpringApplicationBuilder configure(
SpringApplicationBuilder builder) {
return builder.sources(WebServerConfig.class);
}
构建 WAR 时是否缺少启用 Servlet 上下文的代码/属性?
解决方案
使用以下应用程序属性设置 Spring Boot 应用程序的上下文路径。如果您使用的是 yaml 配置。
server:
servlet:
context-path: /servlet
如果您使用的是 application.properties
server.servlet.context-path = /servlet