在Spring Boot中,静态资源的映射优先级是由Spring的资源处理机制决定的。默认情况下,Spring Boot会自动配置静态资源处理,并根据特定的规则来决定静态资源的优先级。以下是静态资源映射的优先级规则:
默认静态资源位置和优先级
-
src/main/resources/static
- 优先级最高。Spring Boot首先查找此目录中的资源。如果资源存在,它将作为响应直接提供。
-
src/main/resources/public
- 其次优先。如果
static
目录中没有找到请求的资源,Spring Boot将查找此目录中的资源。
- 其次优先。如果
-
src/main/resources/resources
- 这个目录的优先级与
public
目录相同,但通常不如static
和public
常用。
- 这个目录的优先级与
-
src/main/resources/META-INF/resources
- 这个位置的优先级最低。Spring Boot在其他位置都没有找到资源的情况下,将查找此目录中的资源。
静态资源映射规则
-
静态资源目录优先级
- Spring Boot会按上述顺序(
static
→public
→resources
→META-INF/resources
)检查这些目录中的资源。
- Spring Boot会按上述顺序(
-
资源处理顺序
- 如果请求的资源在多个目录中都存在,Spring Boot会优先提供第一个找到的资源。例如,如果
index.html
在static
和public
目录中都存在,static
目录中的文件将被优先提供。
- 如果请求的资源在多个目录中都存在,Spring Boot会优先提供第一个找到的资源。例如,如果
-
配置自定义静态资源路径
- 你可以通过实现
WebMvcConfigurer
并重写addResourceHandlers
方法来自定义静态资源路径。自定义的路径和资源位置可以具有不同的优先级,具体取决于配置的顺序和匹配规则。
- 你可以通过实现
自定义静态资源处理
如果你需要定义更复杂的静态资源映射或路径优先级,可以使用自定义的ResourceHandlerRegistry
配置。例如:
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 自定义静态资源路径
registry.addResourceHandler("/custom/**")
.addResourceLocations("classpath:/custom-static/")
.setCachePeriod(3600); // 设置缓存周期
}
}
在这个例子中,/custom/**
路径下的请求将映射到classpath:/custom-static/
目录中的资源。
小结
总的来说,Spring Boot的静态资源映射优先级按照static
→ public
→ resources
→ META-INF/resources
的顺序进行。你可以通过配置和自定义来调整和扩展这些映射规则,以满足特定的需求。