我正在使用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 / ):
例如,这是我如何在我的网页上链接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错误?我忘记了重要的事情吗?
谢谢你,
卢卡
答案 0 :(得分:1)
要解决此问题,我需要更改文件夹结构,将静态资源移动到 / webapp / 文件夹中。我很确定有一种方法可以将CSS和JS留在 / resources / 文件夹中,但是我没有让它工作,所以这是我的新文件夹结构:
然后我设置了资源处理程序映射:
@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" />