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

静态资源

该选项提供了一种方便的方式,从以下列表中提供静态资源资源——基于地点。spring-doc.cadn.net.cn

下一个例子中,给定一个以 开头的请求/资源,相对路径为 用于查找并服务相对于 的静态资源/公共在网页应用下 根或在 下类路径上/静态的.这些资源的使用寿命为一年 过期以确保浏览器缓存的最大利用率并减少 HTTP 请求 由浏览器制作。这最后修改版信息由 推导资源#最后修改因此,HTTP 条件请求支持以下条件“最后修改”头。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" />

资源处理器还支持一条链资源解析器实现和ResourceTransformer实现 你可以用它来创建一个用于优化资源的工具链。spring-doc.cadn.net.cn

你可以使用VersionResourceResolver用于基于MD5哈希的版本化资源URL。 可根据内容、固定应用版本或其他方式计算。一个内容版本策略(MD5哈希)是一个不错的选择——但有一些显著的例外,例如 用于模块加载器的JavaScript资源。spring-doc.cadn.net.cn

以下示例展示了如何使用VersionResourceResolverJava 配置中: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并应用完整的解析链, 转换器——例如,插入不同版本。MVC 配置提供ResourceUrlProvider豆子可以注射到别人体内。你也可以用ResourceUrlEncodingFilter对于Thymeleaf、JSP、FreeMarker等带有URL标签的机构, 恃HttpServletResponse#encodeURL.spring-doc.cadn.net.cn

注意,使用两者时EncodedResourceResolver(例如,提供gzipped或 Brotli编码资源)以及VersionResourceResolver你必须按这个顺序注册。 这确保了基于内容的版本始终可靠地计算,基于未编码的文件。spring-doc.cadn.net.cn

对于WebJars,像这样的版本化URL是/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库存在于类路径上,代价是 classpath 扫描可能会拖慢应用程序启动速度。解析器可以将 URL 重写为 包含jar的版本,也可以与没有版本的输入URL匹配——例如来自/webjars/jquery/jquery.min.js/webjars/jquery/1.2.0/jquery.min.js.spring-doc.cadn.net.cn

基于ResourceHandlerRegistry提供更多选项 用于细粒度控制,例如最后修改行为和优化资源解析。