Spring MVC 4 + Thymeleaf:静态资源404错误
Spring MVC 4 + Thymeleaf: static resources 404 error
我正在使用 Spring 4.3.4 + Spring MVC + Thymeleaf 3.0.2 开发一个网络应用程序。顺便说一下,我还没有集成 Spring 安全性,所以没有任何安全策略。
问题很简单:浏览器没有加载静态资源(错误404)。
这是我的项目文件夹结构,这是一个标准的maven结构(我把静态资源放在/src/main/resources/static, 但我也尝试了 /src/main/webapp/ 或 /src/main/webapp/WEB -INF/):
例如,这就是我 link 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 映射到根 /:
<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 错误?我是不是忘记了什么重要的事情?
谢谢,
卢卡
删除资源处理程序映射,
然后改为
<link th:href="@{/assets/css/style.css}" href="../static/assets/css/style.css" type="text/css" />
为了解决这个问题,我需要更改我的文件夹结构,将静态资源移动到 /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" />
我正在使用 Spring 4.3.4 + Spring MVC + Thymeleaf 3.0.2 开发一个网络应用程序。顺便说一下,我还没有集成 Spring 安全性,所以没有任何安全策略。
问题很简单:浏览器没有加载静态资源(错误404)。
这是我的项目文件夹结构,这是一个标准的maven结构(我把静态资源放在/src/main/resources/static, 但我也尝试了 /src/main/webapp/ 或 /src/main/webapp/WEB -INF/):
例如,这就是我 link 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 映射到根 /:
<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 错误?我是不是忘记了什么重要的事情?
谢谢,
卢卡
删除资源处理程序映射,
然后改为
<link th:href="@{/assets/css/style.css}" href="../static/assets/css/style.css" type="text/css" />
为了解决这个问题,我需要更改我的文件夹结构,将静态资源移动到 /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" />