温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - Thymeleaf, Spring Boot 2: invalid path to resources when handle error
spring-boot spring-mvc Thymeleaf

其他 - Thymeleaf,Spring Boot 2:处理错误时资源的无效路径

发布于 2020-04-29 18:14:22

我有一个默认设置的基本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种情况。拦截器中的路径和日志:

  1. 调用正确的路径/home-一切正常
[09:02:48.759][INFO] /home
[09:02:48.759][INFO] /assets/img/java60.png
  1. 调用错误的路径/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
  1. 调用错误的路径/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
  1. 调用错误的路径/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上获得

查看更多

提问者
makson
被浏览
114
MohamedSanaulla 2020-02-12 13:51

您必须使用绝对路径链接资源。当前,您正在使用相对路径进行链接,例如<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">