Spring Boot开发之静态资源
1 简单功能
1 静态资源访问
1 静态资源目录
只要静态资源放在类路径下: /static (or /public or /resources or /META - INF/resource
访问 : 当前项目根路径/ + 静态资源名
原理: 静态映射广。 请求进来,先去找Controller看能不能处理。不能处理的所有请求又都交给静态资源处理器。静态 资源也找不到则响应404页面.
改变默认的静态资源路径:
spring:
mvc:
static-path-pattern: /res/**
resources:
static-locations: [classpath:/haha/]
2 静态资源访问前缀
默认无前缀
spring:
mvc:
static-path-pattern: /res/**
当前项目 + static -path-pattern + 静态资源名 = 静态资源文件夹下找
3 首页支持
静态资源路径下 index.html
- 可以配置静态资源路径
- 但是不可以配置静态资源的访问前缀。否则导致 index.html不能被默认访问.
spring:
# 这个会导致welcome page功能失效
# mvc:
# static- path- pattern: /res/**
resources:
static-locations: [classpath:/haha/]
4 自定义Favicon
favicon.ico 放在静态资源目录下即可.
spring:
# 这个会导致 Favicon 功能失效
# mvc:
# static-path-pattern: /res/*
5 静态资源配置原理
SpringBoot启动默认加载 xxxAutoConfiguration 类 (自动配置类)
SpringMVC功能的自动配置类 WebMvcAutoConfiguration, 生效
@Configuration(proxyBeanMethods = false)
(aJConditionalOnWebApplication(type = Type.SERVLET)
@ConditionalOnClass({ Servlet •class, DispatcherServlet.class^ WebMvcConfigurer
@ConditionalOnlvlissingBean(WebMvcConfigurationSupport.class)
@AutoConfigureOrder(Ondened.HIGHEST_PRECEDENCE + 10)
@AutoConfigureAfter({ DispatchenServletAutoConfigunation.class, TaskExecutionA
ValidationAutoConfiguration.class })
public class WebMvcAutoConfiguration {}
容器中配置:
@Configuration(proxyBeanMethods = false)
@Impont(EnableWeblvlvcConfiguration.class)
@EnableConfigurationProperties({ WebMvcProperties .class, ResounceProperties.class})
@Order(0)
public static class WebMvcAutoConfigurationAdapter implements WebMvcConfig
配置文件的相关属性和xxx进行了绑定。WebMvcPropertiesspring.mvcN ResourcePropertiesspring.resources
1 配置类只有一个有参构造器
// 有参构造器所有参数的值都会从容器中确定
// ResourceProperties resourceProperties;获耳又和spring.resources绑定的所1有的值的〉
// WebMvcProperties mvcProperties 获取和spring.mvc绑定的所有的值的对象
// ListableBeanFactory beanFactory Spring的beanFactory
// HttpMessageConverters 找到所1有的HttpMessageConverters
// ResourceHandlerRegistrationCustomizer 找到资源处理器的自定义器。=========
// DispatcherServletPath
// ServletRegistrationBean 给应用注册Servlet、Filter
public WebMvcAutoConfigurationAdapter(ResourceProperties resourcePropertie
ListableBeanFactory beanFactory, ObjectProviden<HttpMessageCon
ObjectProvider< ResourceHandlenRegistrationCustomizer>
ObjectProvider<DispatchenServletPath> dispatcherServletPath^
ObjectProvider<ServletRegistrationBean<?>> servletRegistration
this.resourceProperties = resourceProperties;
this.mvcProperties = mvcProperties;
this.beanFactory = beanFactory;
this.messageConvertersProvider = messageConvertersProvider;
this.resourceHandlerRegistrationCustomizer = resourceHandlerRegist
this.dispatcherServletPath = dispatcherServletPath;
this.servletRegistrations = servletRegistrations;
}
2 资源处理的默认规则
public void addResourceHandlers(ResourceHandlerRegistry registry){
if (!this.resourceProperties.isAddMappings()){
logger.debug("Default resource handling disabled");
return;
}
// ...
}
配置
spring:
# mvc:
# static-path-pattern: /res/**
resources:
add-mappings: false # 禁用所有静态资源规则