首页 > 解决方案 > Spring Boot 上下文路径被外部 Tomcat 忽略

问题描述

我为tomcat设置了上下文路径如下:

@Component
public class CustomContainer implements
        WebServerFactoryCustomizer<TomcatServletWebServerFactory> {

    @Override
    public void customize(TomcatServletWebServerFactory factory) {
        factory.setContextPath("/capripol");
        factory.setPort(8080);
    }
}

导航到 localhost:8080/capripol 工作正常,我的登录屏幕提示我,但是在登录我的表单和控制器后不会附加到上下文路径,所以他们导航到 /capripol/MainMenu 等而不是导航到 /MainMenu . 如何设置上下文路径以便附加我的表单操作和控制器这样做 - 为什么没有设置 tomcat 工厂上下文路径?

编辑:我的应用程序类

@SpringBootApplication
public class CapripolApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(CapripolApplication.class, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(CapripolApplication.class);
    }

    @Configuration
    public class WebConfig implements WebMvcConfigurer {
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/**")
                    .addResourceLocations("classpath:/static/", "classpath:/images/")
                    .setCachePeriod(0);
        }
    }

}

标签: javaspringspring-boottomcat

解决方案


有几种方法可以做到。您可以将其添加到每个控制器,如果您想更改上下文路径,这很有用

@Controller
@RequestMapping(value = "/foo")
public class bar{
    @GetMapping(value = "/bar")
    public void stuff(){
        //doing stuff
    }
}

或者你可以把它放在你的 application.properties / yml

server.servlet.contextPath=/foo/*

从技术上讲,还有一些其他更全面的方法可以做到这一点,特别是如果您使用的是旧版本的 Spring,但我认为应用程序属性是您正在寻找的。


推荐阅读