Servlet 上下文不仅在构建 WAR 时设置



我们正在从SpringWebInitializer转移到Spring引导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");
};
}
}

当运行MavenWAR常规Tomcat8.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上下文的代码/属性?

我发现旧的问题和问题2除了使用不同的战争名称之外没有真正的答案。

使用下面的应用程序属性为spring-boot应用程序设置上下文路径。如果您使用的是yaml配置。

server:
servlet:
context-path: /servlet

如果您正在使用application.properties

server.servlet.context-path = /servlet

我们通过在SpringApplicationBuilder:中添加属性来解决问题

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
Properties bootProperties = new Properties();
bootProperties.setProperty("spring.mvc.servlet.path", "/servlet");
return builder.sources(WebServerConfig.class).properties(bootProperties);
}

最新更新