|
对于最新稳定版本,请使用Spring Framework 7.0.1! |
静态资源
该选项提供了一种方便的方式,从以下列表中提供静态资源资源——基于地点。
下一个例子中,给定一个以 开头的请求/资源,相对路径为
用于查找并服务相对于 的静态资源/公共在网页应用下
根或在 下类路径上/静态的.这些资源的使用寿命为一年
过期以确保浏览器缓存的最大利用率并减少 HTTP 请求
由浏览器制作。这最后修改版信息由 推导资源#最后修改因此,HTTP 条件请求支持以下条件“最后修改”头。
以下列表展示了如何通过 Java 配置实现:
-
Java
-
Kotlin
@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中实现相同的配置:
<mvc:resources mapping="/resources/**"
location="/public, classpath:/static/"
cache-period="31556926" />
另见静态资源的HTTP缓存支持。
资源处理器还支持一条链资源解析器实现和ResourceTransformer实现
你可以用它来创建一个用于优化资源的工具链。
你可以使用VersionResourceResolver用于基于MD5哈希的版本化资源URL。
可根据内容、固定应用版本或其他方式计算。一个内容版本策略(MD5哈希)是一个不错的选择——但有一些显著的例外,例如
用于模块加载器的JavaScript资源。
以下示例展示了如何使用VersionResourceResolverJava 配置中:
-
Java
-
Kotlin
@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中实现相同的配置:
<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.
注意,使用两者时EncodedResourceResolver(例如,提供gzipped或
Brotli编码资源)以及VersionResourceResolver你必须按这个顺序注册。
这确保了基于内容的版本始终可靠地计算,基于未编码的文件。
对于WebJars,像这样的版本化URL是/webjars/jquery/1.2.0/jquery.min.js是推荐且最高效的使用方式。
相关的资源位置是用 Spring Boot 开箱即用配置的(或者可以配置
手动通过ResourceHandlerRegistry)且不需要添加org.webjars:webjars-locator-coreDependency。
无版本的URL,比如/webjars/jquery/jquery.min.js通过WebJarsResourceResolver当org.webjars:webjars-locator-core库存在于类路径上,代价是
classpath 扫描可能会拖慢应用程序启动速度。解析器可以将 URL 重写为
包含jar的版本,也可以与没有版本的输入URL匹配——例如来自/webjars/jquery/jquery.min.js自/webjars/jquery/1.2.0/jquery.min.js.
基于ResourceHandlerRegistry提供更多选项
用于细粒度控制,例如最后修改行为和优化资源解析。 |