【问题标题】:Thymeleaf with Spring Boot - Cannot Find Static Assets (CSS)带有 Spring Boot 的 Thymeleaf - 找不到静态资产 (CSS)
【发布时间】:2019-05-20 01:59:19
【问题描述】:

我在我的 Spring Boot MVC 应用程序中使用 Thymeleaf 模板引擎,但在加载样式时遇到了困难。该链接位于header.html 文件(位于资源/模板/片段下)并在login.html(资源/模板下)中被引用。样式表位于 resources/static/css 目录中。

<head th:fragment="header">
    <link rel="stylesheet" href="../../static/css/bootstrap.css" th:href='@{/css/bootstrap.css}' />
</head>

登录.html

<html>
<header th:replace="fragments/header :: header"></header>

<body class="container">

    <h1>Login page</h1>
   // Code omitted for brevity

  </body>

</html>

我有一个非常典型的目录结构:

基于此question 和其他来源,似乎应用程序应该能够使用指定的链接加载样式表。然而,这种情况并非如此。具体来说,如果我查看浏览器的网络选项卡,样式表请求返回 302(不是 404),但未应用样式。此外,如果我在 Firefox 中单击“样式编辑器”选项卡,我会收到一条Stylesheet could not be loaded: http://localhost:8080/css/bootstrap.css 消息。

问题可能是什么? 谢谢。

【问题讨论】:

    标签: spring spring-mvc spring-boot thymeleaf


    【解决方案1】:

    你的链接标签应该是

    <link href="../../static/css/bootstrap.css" th:href="@{css/bootstrap.css}" rel="stylesheet" media="screen"/>

    【讨论】:

      【解决方案2】:

      我觉得应该是

      href="/static/css/bootstrap.css"
      

      甚至

      href="static/css/bootstrap.css"
      

      一般来说,这个资源可以在下面找到

      http(s)://yourdomain/yourApplicationRoot/static/css/bootstrap.css

      基本上这是spring默认暴露静态资源的路径。

      在您的情况下,它将是 @{static/css/bootstrap.css}(或以斜线开头)

      【讨论】:

      • 感谢您的回复。事实证明,开篇文章中提到的链接是正确的。这个问题实际上是由 Spring Security 引起的; 302 是对登录页面的重定向。我的理解是 Spring Security 自动添加了一个过滤器以使这些资源可以公开访问,但我想情况并非如此,事后看来,这实际上是一个明智、安全的默认设置。
      猜你喜欢
      • 2015-06-16
      • 2015-01-03
      • 2015-10-02
      • 2017-11-02
      • 2018-03-01
      • 2015-03-08
      • 2015-11-13
      • 2016-06-18
      • 2017-07-26
      相关资源
      最近更新 更多