程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了仅在构建 WAR 时才设置 Servlet 上下文大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决仅在构建 WAR 时才设置 Servlet 上下文?

开发过程中遇到仅在构建 WAR 时才设置 Servlet 上下文的问题如何解决?下面主要结合日常开发的经验,给出你关于仅在构建 WAR 时才设置 Servlet 上下文的解决方法建议,希望对你解决仅在构建 WAR 时才设置 Servlet 上下文有所启发或帮助;

我们正在从 Spring WebInitializer 迁移到 Spring boot 2.5.0 SpringBootServleTinitializer

我们需要为我们的 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'
@H_124_2@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 上下文的代码/属性?

我发现老 question 和 question2 除了使用不同的战争名称外没有真正的答案。

解决方法

使用以下应用程序属性来设置 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);
}

大佬总结

以上是大佬教程为你收集整理的仅在构建 WAR 时才设置 Servlet 上下文全部内容,希望文章能够帮你解决仅在构建 WAR 时才设置 Servlet 上下文所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。