问题描述
Thymeleaf链接表达式表达式指向的位置随当前URL改变而改变,如何使其指向固定的位置?
问题出现的环境背景及自己尝试过哪些方法
Spring-Boot 2.7.11
Thymeleaf
Eclipse + Spring Tools
相关代码
Spring Boot中控制器路径为
@GetMapping("/{var1}/{var2}")
public String controller(@PathVariable String var1, @PathVariable String var2)
时
无论Thymeleaf模版中静态文件的路径写成
<img th:src="@{images/image.png}"/>
还是
<img src="images/image.png" />
渲染后都是
<img src="images/image.png" />
css也同样无法加载,无论写的是
<link rel="stylesheet" th:href="@{style/styles.css}">
还是
<link rel="stylesheet" href="style/styles.css">
都会渲染成用
<link rel="stylesheet" href="style/styles.css">
并且用浏览器的开发者工具查看后发现css文件的目录是/var1/style/styles.css
再尝试将Controller的路径进行修改,改为
@GetMapping("/test/{var1}/{var2}")
则css文件的路径变为/test/var1/style/styles.css
而如果将控制器中的路径改为
@GetMapping("/{var1}/{var2}/{var3}")
则会变成/var/var2/style/styles.css
你期待的结果是什么?实际看到的错误信息又是什么?
期待的结果是链接指向项目的resource文件夹中的静态资源,
但实际上网页请求静态文件时会根据当前url改变位置
@{path/file.ext}
和path/file.ext
都是相对路径,要以Spring Boot指定的静态资源目录为链接表达式的根目录,应使用绝对路径而静态资源地址和控制器路径冲突,则依据具体需求通过正则表达式修改控制器路径的描述即可