Thymeleaf链接表达式指向的位置一直发生改变,如何让其指向固定位置的静态资源?
问题描述
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.jpg}"/>
还是
<img src="images/image.jpg" />
渲染后都是
<img src="images/image.jpg" />
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指定的静态资源目录为链接表达式的根目录,应使用绝对路径
<img th:src="@{/images/image.jpg}"/>
而静态资源地址和控制器路径冲突,则依据具体需求通过正则表达式修改控制器路径的描述即可
回答:
@{...}是链接URL表达式,目的是加载特定的资源(以URL形式),
所以
<img th:src="@{images/image.jpg}"/>
就等价于请求
http://localhost:8080/webapp/images/image,然后把相应的对象发送回给客户端进行解析和显示,也就是会走springMvc的请求了。
所以要么你直接写:
<img src="images/image.jpg" alt="..." />
要么考虑用nginx做一个静态资源服务器,设置凡是走/images路径的匹配到图片资源目录
以上是 Thymeleaf链接表达式指向的位置一直发生改变,如何让其指向固定位置的静态资源? 的全部内容, 来源链接: utcz.com/p/945138.html