在部署springboot项目到云服务器中遇到一个坑:视图解析不了,回顾代码发现,原来是视图名称写的有问题代码如下:
@GetMapping("")
public String index() {
return "/front/index";
}
结果死活说找不到/front/index,但是本地环境运行却正常。改成如下代码云服务器运行也正常了
@GetMapping("")
public String index() {
return "front/index";
}
原因分析:
在默认情况下,Spring Boot使用Thymeleaf作为视图解析器时,它期望视图名称是一个相对于templates目录的路径。因此,如果你写成"/front/index",理论上Thymeleaf可能会尝试从文件系统的根目录或者某个特定的绝对路径下去查找front/index.html文件,这并不是你想要的结果。
但是,实际上,Spring Boot的Thymeleaf视图解析器通常会对你提供的视图名称进行智能处理,即使你错误地添加了/前缀,它也可能能够正确地解析出相对于templates目录的路径。这是因为Thymeleaf视图解析器在内部会处理这些路径,并且通常会去掉视图名称前的/(如果它存在的话)。
然而,这种行为并不是所有视图解析器都会保证的,也不是Spring Boot官方文档所推荐的做法。因此,为了避免潜在的问题和不一致的行为,你应该始终遵循Spring Boot的约定,即:
不在视图名称前添加/前缀。
省略.html后缀(因为Thymeleaf会自动添加它)。
这样,Spring Boot的Thymeleaf视图解析器就会去templates目录下查找front/index.html文件,并且正确地渲染它作为响应返回给客户端。