2017-04-01 268 views
0

我的目录结构是thymeleaf:无静态资源给予404错误

目录结构

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

请看看上面的图片,我有资源/静态/ CSS /文件夹,CSS和JS文件,JS为int /资源/静态/ JS /文件夹什么错误?为什么不是铬显示一些静态资源的404错误?

TD; LR静态资源没有在我的thymeleaf布局加载

+0

你可以给出一个具体的例子,你期望一个错误? – benkuly

+0

'bootstrap.min.css'在'static/css /'中,所以其他链接资源在chrome devtool上应该显示404错误。 – piechuckerr

+0

您是否添加了自定义资源处理程序? – benkuly

回答

1

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

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

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

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

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

最后,调整路径,你的资源是这样的:

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

现在的CSS和JS请求将成功地与相应的内容返回。

+0

非常感谢您的解决方案。顺便说一句,名称和价值有什么区别? – piechuckerr

+0

该名称用作映射的标识符。但是,值用于将URL模式(例如“/”,“/ **”,“/ home”,“/ about”等)与处理程序方法(例如HomeController.gethomePage())进行匹配。 http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.html –

+0

@KyleAnderson我试过尽可能多的链接到我的引导文件排列为我可以想到,包括你的答案。你知道为什么这可能会返回404吗?我使用'value'来表示我的所有映射。 – justinraczak

0

静是springboot默认的资源映射,你并不需要在资源路径<

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

是的,我知道,但它不工作。 – piechuckerr

0

当我从了解添加静态你的文章是,你有一个类似CSS文件和js文件的静态内容,当你改变这些链接的路径时,它们没有得到正确的服务。

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

解决这个问题的办法,或者你的问题的答案,为什么我会得到这种行为是相当简单的。

当您使用春季启动,并尝试以服务静态内容您的浏览器缓存旧的行为和较旧的请求的旧响应,这意味着你需要胸围浏览器缓存,以获得您预期的结果当您更改链接路径。

您可以通过添加下面的配置到您的application.properties做文件:

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

,你可以找到如何,而他们的文档中使用的弹簧启动这里提供静态内容的一些详细信息:

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

+0

我还没有检查你的解决方案,但PLZ做检查我的repo.I非常沮丧https://github.com/PieChuckerr/gateApp – piechuckerr

+0

没有必要,检查我的解决方案,我有你的问题几次,并解决它后在阅读之后这么做+ Spring文档 –