静态资源

此选项提供了一种便捷的方式,可以从 Resource-based 位置列表中提供静态资源。

在下一个示例中,给定一个以 /resources 开头的请求,相对路径用于查找并提供相对于 Web 应用程序根目录下 /public 或 classpath 下 /static 的静态资源。这些资源以一年后的未来过期时间提供,以确保最大程度地利用浏览器缓存并减少浏览器发出的 HTTP 请求。Last-Modified 信息从 Resource#lastModified 推断,以便支持带有 "Last-Modified" 头部的 HTTP 条件请求。

以下清单展示了如何实现:

资源处理器还支持 ResourceResolver 实现链和 ResourceTransformer 实现链,您可以使用它们来创建用于处理优化资源的工具链。

您可以将 VersionResourceResolver 用于基于从内容计算的 MD5 散列、固定的应用程序版本或其他方式进行版本控制的资源 URL。ContentVersionStrategy(MD5 散列)是一个不错的选择 — 尽管有一些值得注意的例外,例如与模块加载器一起使用的 JavaScript 资源。

以下示例展示了如何使用 VersionResourceResolver

然后,您可以使用 ResourceUrlProvider 重写 URL 并应用完整的解析器和转换器链 — 例如,插入版本。MVC 配置提供了一个 ResourceUrlProvider bean,以便可以将其注入到其他地方。您还可以使用 ResourceUrlEncodingFilter 为 Thymeleaf、JSP、FreeMarker 和其他依赖 HttpServletResponse#encodeURL 的 URL 标签使重写透明。

请注意,当同时使用 EncodedResourceResolver(例如,用于提供 gzipped 或 brotli 编码的资源)和 VersionResourceResolver 时,您必须按此顺序注册它们。这确保了基于内容的版本始终基于未编码的文件可靠地计算。

对于 WebJars,版本化的 URL,如 /webjars/jquery/1.2.0/jquery.min.js 是使用它们的推荐和最有效的方式。相关的资源位置在 Spring Boot 中开箱即用(或可以通过 ResourceHandlerRegistry 手动配置),并且不需要添加 org.webjars:webjars-locator-lite 依赖项。

无版本 URL,如 /webjars/jquery/jquery.min.js,通过 WebJarsResourceResolver 支持,当 classpath 中存在 org.webjars:webjars-locator-lite 库时,该解析器会自动注册。该解析器可以重写 URL 以包含 jar 的版本,并且还可以匹配没有版本的传入 URL — 例如,从 /webjars/jquery/jquery.min.js/webjars/jquery/1.2.0/jquery.min.js

基于 ResourceHandlerRegistry 的 Java 配置提供了更多选项,可用于精细控制,例如,上次修改行为和优化的资源解析。