Recursos estáticos para el desarrollo de Spring Boot
1 función sencilla
1 Acceso a recursos estáticos
1 directorio de recursos estáticos
Siempre que los recursos estáticos se coloquen en el classpath: /static (o /public o /resources o /META - INF/resource
Acceso: ruta raíz del proyecto actual / + nombre de recurso estático
Principio: el mapeo estático es amplio. Cuando llegue la solicitud, primero diríjase al controlador para ver si se puede procesar. Todas las solicitudes que no se pueden procesar se transfieren al procesador de recursos estáticos. Si no se puede encontrar el recurso estático, responderá con una página 404.
Cambie la ruta de recursos estática predeterminada:
spring:
mvc:
static-path-pattern: /res/**
resources:
static-locations: [classpath:/haha/]
2 Prefijo de acceso a recursos estáticos
sin prefijo por defecto
spring:
mvc:
static-path-pattern: /res/**
Proyecto actual + static -path-pattern + nombre de recurso estático = buscar en la carpeta de recursos estáticos
3 Apoyo a domicilio
index.html en la ruta de recursos estáticos
- Las rutas de recursos estáticos se pueden configurar
- Sin embargo, el prefijo de acceso de los recursos estáticos no se puede configurar. De lo contrario, no se puede acceder a index.html de forma predeterminada.
spring:
# 这个会导致welcome page功能失效
# mvc:
# static- path- pattern: /res/**
resources:
static-locations: [classpath:/haha/]
4 icono de favorito personalizado
favicon.ico se puede colocar en el directorio de recursos estáticos.
spring:
# 这个会导致 Favicon 功能失效
# mvc:
# static-path-pattern: /res/*
5 principios de configuración de recursos estáticos
SpringBoot comienza a cargar la clase xxxAutoConfiguration (clase de configuración automática) de forma predeterminada
Entra en vigor la clase de configuración automática WebMvcAutoConfiguration de la función SpringMVC
@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 {
}
Configuración en el contenedor:
@Configuration(proxyBeanMethods = false)
@Impont(EnableWeblvlvcConfiguration.class)
@EnableConfigurationProperties({
WebMvcProperties .class, ResounceProperties.class})
@Order(0)
public static class WebMvcAutoConfigurationAdapter implements WebMvcConfig
Los atributos relevantes del archivo de configuración están vinculados a xxx. WebMvcPropertiesspring.mvcN propiedades de recursosprimavera.recursos
1 La clase de configuración tiene solo un constructor con parámetros
// 有参构造器所有参数的值都会从容器中确定
// 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 Reglas predeterminadas para el manejo de recursos
public void addResourceHandlers(ResourceHandlerRegistry registry){
if (!this.resourceProperties.isAddMappings()){
logger.debug("Default resource handling disabled");
return;
}
// ...
}
configuración
spring:
# mvc:
# static-path-pattern: /res/**
resources:
add-mappings: false # 禁用所有静态资源规则