java - 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);
}
}
}
解决方案
有几种方法可以做到。您可以将其添加到每个控制器,如果您想更改上下文路径,这很有用
@Controller
@RequestMapping(value = "/foo")
public class bar{
@GetMapping(value = "/bar")
public void stuff(){
//doing stuff
}
}
或者你可以把它放在你的 application.properties / yml
server.servlet.contextPath=/foo/*
从技术上讲,还有一些其他更全面的方法可以做到这一点,特别是如果您使用的是旧版本的 Spring,但我认为应用程序属性是您正在寻找的。
推荐阅读
- wordpress - 如何在退出WordPress时获取用户的退出时间
- terraform - 在这个 ecs fargate 脚本中我需要两个 aws_iam_policy_document 吗?
- sql - c# linq with selectMany to sql语句
- java - 如何通过投票在某个日期订购餐厅
- go - 当顶级模块及其子模块之一作为单独版本单独导入时,如何解决冲突的 go 模块依赖关系?
- php - 收到此错误时如何从 JSON 获取变量:未能打开流:HTTP 请求失败
- excel - 具体前景签名取决于主题领域
- javascript - 在amcharts4中隐藏趋势线
- regex - 从产品描述中提取多个产品属性的正则表达式
- javascript - 如何在保留分隔符的同时根据空格或符号拆分字符串?