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({
    
     Servletclass, 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 # 禁用所有静态资源规则

猜你喜欢

转载自blog.csdn.net/ABestRookie/article/details/127376678