对于最新的稳定版本,请使用 Spring Framework 6.2.0spring-doc.cadn.net.cn

静态资源

此选项提供了一种从列表中提供静态资源的便捷方法Resource基于位置。spring-doc.cadn.net.cn

在下一个示例中,给定一个以/resources,则相对路径为 用于查找和提供相对于/public在 Web 应用程序 root 或/static.这些资源的未来期为一年 expiration 以确保最大限度地使用浏览器缓存并减少 HTTP 请求 由浏览器创建。这Last-Modified信息推导自Resource#lastModified,以便支持 HTTP 条件请求"Last-Modified"头。spring-doc.cadn.net.cn

下面的清单显示了如何使用 Java 配置来实现这一点:spring-doc.cadn.net.cn

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		registry.addResourceHandler("/resources/**")
				.addResourceLocations("/public", "classpath:/static/")
				.setCacheControl(CacheControl.maxAge(Duration.ofDays(365)));
	}
}
@Configuration
@EnableWebMvc
class WebConfig : WebMvcConfigurer {

	override fun addResourceHandlers(registry: ResourceHandlerRegistry) {
		registry.addResourceHandler("/resources/**")
				.addResourceLocations("/public", "classpath:/static/")
				.setCacheControl(CacheControl.maxAge(Duration.ofDays(365)))
	}
}

以下示例显示了如何在 XML 中实现相同的配置:spring-doc.cadn.net.cn

<mvc:resources mapping="/resources/**"
	location="/public, classpath:/static/"
	cache-period="31556926" />

资源处理程序还支持ResourceResolverimplementations 和ResourceTransformer实现 可用于创建用于处理优化资源的工具链。spring-doc.cadn.net.cn

您可以使用VersionResourceResolver对于基于 MD5 哈希的版本控制资源 URL 根据内容、固定应用程序版本或其他计算。一个ContentVersionStrategy(MD5 哈希) 是一个不错的选择 — 但有一些值得注意的例外,例如 与模块加载器一起使用的 JavaScript 资源。spring-doc.cadn.net.cn

以下示例演示如何使用VersionResourceResolver在 Java 配置中:spring-doc.cadn.net.cn

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		registry.addResourceHandler("/resources/**")
				.addResourceLocations("/public/")
				.resourceChain(true)
				.addResolver(new VersionResourceResolver().addContentVersionStrategy("/**"));
	}
}
@Configuration
@EnableWebMvc
class WebConfig : WebMvcConfigurer {

	override fun addResourceHandlers(registry: ResourceHandlerRegistry) {
		registry.addResourceHandler("/resources/**")
				.addResourceLocations("/public/")
				.resourceChain(true)
				.addResolver(VersionResourceResolver().addContentVersionStrategy("/**"))
	}
}

以下示例显示了如何在 XML 中实现相同的配置:spring-doc.cadn.net.cn

<mvc:resources mapping="/resources/**" location="/public/">
	<mvc:resource-chain resource-cache="true">
		<mvc:resolvers>
			<mvc:version-resolver>
				<mvc:content-version-strategy patterns="/**"/>
			</mvc:version-resolver>
		</mvc:resolvers>
	</mvc:resource-chain>
</mvc:resources>

然后,您可以使用ResourceUrlProvider重写 URL 并应用完整的解析器链,以及 transformers — 例如,插入版本。MVC 配置提供了一个ResourceUrlProviderbean 的 bean 中,以便可以将其注入到其他 bean 中。您还可以使用ResourceUrlEncodingFilter对于 Thymeleaf、JSP、FreeMarker 和其他带有 URL 标签的 恃HttpServletResponse#encodeURL.spring-doc.cadn.net.cn

请注意,当同时使用EncodedResourceResolver(例如,用于提供 gzip 压缩的或 brotli 编码的资源)和VersionResourceResolver,则必须按此顺序注册它们。 这可确保始终基于未编码的文件可靠地计算基于内容的版本。spring-doc.cadn.net.cn

对于 WebJar,/webjars/jquery/1.2.0/jquery.min.js是推荐且最有效的使用它们的方式。 相关资源位置使用 Spring Boot 开箱即用地配置(也可以配置 手动通过ResourceHandlerRegistry),并且不需要添加org.webjars:webjars-locator-coreDependency。spring-doc.cadn.net.cn

无版本的 URL,如/webjars/jquery/jquery.min.js通过WebJarsResourceResolverorg.webjars:webjars-locator-core库存在于类路径中,但代价是 类路径扫描可能会减慢应用程序启动速度。解析器可以将 URL 重写为 包括 jar 的版本,并且还可以与没有版本的传入 URL 进行匹配 — 例如,从/webjars/jquery/jquery.min.js/webjars/jquery/1.2.0/jquery.min.js.spring-doc.cadn.net.cn

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