thymeleaf:没有静态资源给出404错误

时间:2017-04-01 19:47:47

标签: spring-boot thymeleaf

我的目录结构是

目录结构

src/
  main/
    resources/
        static/
             CSS/
             JS/
             images/

        template/
           fragments/
                         header.html
                         footer.html
                         navBar.html
            layouts/
                         appLayout.html
                         baseLayout.html
                 welcome.html

appLayout.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
      xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">

<head>
        <link rel="stylesheet" type="text/css" media="screen, projection" 
      href="/static/css/bootstrap.css" 
      th:href="@{/bootstrap.min.css}" />

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


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


   <link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.0/css/bootstrap.min.css"
        th:href="@{/webjars/bootstrap/2.3.0/css/bootstrap.min.css}" rel="stylesheet" />


</head>
<body>

<div th:replace="/fragments/header :: header"></div>
<div th:replace="/fragments/navbar :: navbar"></div>
<div class="container">
    <div layout:fragment="content">
    <p>Content goes here...</p>
    </div>
    <footer>
    <div th:replace="/fragments/footer :: footer"></div>
    </footer>
</div>
</body>
</html>

请检查上面布局中的<links>标记,我在链接标记中使用了不同的位置,没有给出404 error为什么会这样?

enter image description here

请看上面的图片,我在资源/ static / css /文件夹中有css和js文件,JS是int / resources / static / js /文件夹出了什么问题?为什么Chrome没有显示某些静态资源的404错误?

TD; LR静态资源未加载到我的百万美元布局

3 个答案:

答案 0 :(得分:1)

Bootstrap CSS和JS网络请求返回200,因为响应成功,但内容不是您所期望的。如果您查看响应,您会看到每个CSS和JS请求都会返回HTML页面welcome.html。

这是因为您的Controller映射正在覆盖资源请求。您正在使用name参数进行映射,而该映射不是正确的属性。请改用value,例如:

@RequestMapping(value="/", method=RequestMethod.GET)

此更改将导致您的CSS和JS请求返回404。这是进步。

此外,请删除MvcConfig,因为此行为是开箱即用的。

最后,调整资源的路径,如下所示:

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

现在CSS和JS请求将成功返回适当的内容。

答案 1 :(得分:0)

static是springboot中的默认资源映射,您不需要在资源路径中添加静态&lt;

link href="/css/bootstrap.min.css"rel="stylesheet"th:href="@{/css/bootstrap.min.css}"/>

答案 2 :(得分:0)

我从你的帖子中了解到,你有一整套静态内容,如CSS文件和js文件,当你改变这些链接的路径时,这些内容无法正确提供。

换句话说,当您更改这些链接的路径时,行为不会发生变化,并且您会收到意外结果。

对此的解决方案或问题的答案,为什么我会得到这种行为相当简单。

当您使用 Spring启动并尝试投放静态内容时,您的浏览器会缓存旧行为和旧请求的旧响应,表示您需要在更改链接路径时,破坏浏览器缓存以获得预期结果

您可以通过将以下配置添加到application.properties文件来完成此操作:

spring.resources.chain.strategy.content.enabled=true
spring.resources.chain.strategy.content.paths=/**

您可以在此处的文档中找到有关如何在使用spring boot时提供静态内容的更多信息:

http://docs.spring.io/spring-boot/docs/1.5.2.RELEASE/reference/htmlsingle/#boot-features-spring-mvc-static-content