我有一个默认设置的基本SpringBoot Thymeleaf应用程序:
id 'org.springframework.boot' version '2.2.2.RELEASE'
compile("org.springframework.boot:spring-boot-starter-web")
compile("org.springframework.boot:spring-boot-starter-thymeleaf")
compile("nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect")
在某些情况下,如果出现句柄错误,问题就出在资源的无效路径上,结果应用程序无法在页面上显示资源(css / js / image)。
资源的路径: /src/main/resources/static/assets
对于日志路径,我做了RequestInterceptor
。它记录请求URL的一部分。
我描述了4种情况。拦截器中的路径和日志:
/home
-一切正常[09:02:48.759][INFO] /home [09:02:48.759][INFO] /assets/img/java60.png
/first
(预期404错误)-一切正常[09:02:48.759][INFO] /first [09:02:48.777][INFO] /error [09:02:49.589][INFO] /assets/css/simple.css [09:02:49.590][INFO] /assets/img/notFound.png [09:02:49.715][INFO] /favicon.ico
/first/second
(预期404错误)-意外行为[09:03:00.390][INFO] /first/second [09:03:00.395][INFO] /error [09:03:00.422][INFO] /first/assets/css/simple.css [09:03:00.422][INFO] /first/assets/img/notFound.png [09:03:00.426][INFO] /error [09:03:00.426][INFO] /error
/first/second/third
(预期404错误)-意外行为[09:39:06.404][INFO] /first/second/third [09:39:06.409][INFO] /error [09:39:06.441][INFO] /first/second/assets/css/simple.css [09:39:06.441][INFO] /first/second/assets/img/notFound.png [09:39:06.446][INFO] /error [09:39:06.446][INFO] /error
在第三和第四种情况下,应用程序重定向到错误并设置路径(请求的URL +页面上资产的路径)。为什么在3和4种情况下spring会使资源无效?
完整的源代码可在Github上获得
您必须使用绝对路径链接资源。当前,您正在使用相对路径进行链接,例如<link rel="stylesheet" th:href="@{assets/css/simple.css}">
。
尝试将您的资源更新为:
<link rel="stylesheet" th:href="@{/assets/css/simple.css}">
<img th:src="@{/assets/img/java60.png}" sizes="16x16" alt="love">
非常感谢你。您的建议对我有所帮助。