Spring MVC 4 + Thymeleaf:静态资源404错误

时间:2016-11-23 19:08:08

标签: css spring spring-mvc http-status-code-404 thymeleaf

我正在使用Spring 4.3.4 + Spring MVC + Thymeleaf 3.0.2开发一个webapp。顺便说一下,我还没有集成Spring Security,因此没有任何安全策略。

问题很简单:浏览器上未加载静态资源(错误404)

这是我的项目文件夹结构,这是一个标准的maven结构(我把静态资源放在 / src / main / resources / static 上,但我也是尝试 / src / main / webapp / / src / main / webapp / WEB-INF / ):

enter image description here
例如,这是我如何在我的网页上链接CSS(相信我,文件 /src/main/resources/static/assets/css/style.css 确实存在):

<link th:href="@{/assets/css/style.css}" type="text/css" />

据我所知,我不需要ResourceHandler来处理 / src / main / resourcess / static / assets / 上的内容,这应该已经可用了在 / assets / ,但它不起作用,所以在我的spring java配置中我也做了一些尝试,如:

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("classpath:/static/assets/**").addResourceLocations("/assets/");
    registry.addResourceHandler("classpath:/static/pages/**").addResourceLocations("/pages/");
}

无论如何,CSS和JS文件都无法访问。

我的调度程序servlet映射到root /:

<servlet-mapping>
    <servlet-name>myappDispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

如果我在浏览器上检查HTML,我可以看到上面的标记变为:

<link href="/myapp/assets/css/style.css" rel="stylesheet" type="text/css">

对我来说看起来很正确,对吗?

那么,如果我尝试访问css,为什么会收到404错误?我忘记了重要的事情吗?

谢谢你,
卢卡

2 个答案:

答案 0 :(得分:1)

要解决此问题,我需要更改文件夹结构,将静态资源移动到 / webapp / 文件夹中。我很确定有一种方法可以将CSS和JS留在 / resources / 文件夹中,但是我没有让它工作,所以这是我的新文件夹结构:

enter image description here

然后我设置了资源处理程序映射:

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    super.addResourceHandlers(registry);
    registry.addResourceHandler("/assets/**").addResourceLocations("/assets/");
}

这是HTML模板中使用的 link 标记(适用于页面的动态和静态加载):

<link th:href="@{/assets/css/style.css}" href="../../assets/css/style.css"  rel="stylesheet" type="text/css" />

答案 1 :(得分:0)

删除资源处理程序映射,

然后改为

<link th:href="@{/assets/css/style.css}" href="../static/assets/css/style.css" type="text/css" />