SpringBoot核心功能之Web开发
一、简单功能解析
1.1 静态资源访问
1)静态资源目录
类路径下:/static、/public、/resources或/META-INF/resources
放在静态资源目录下的的资源可以通过“当前项目根路径/+静态资源名”访问,但该访问会被controller提前拦截,只有controller处理不了放行才会通过静态资源处理器继续访问。
2)修改静态资源目录
将/hhhh/添加入资源目录
web:
resources:
static-locations: classpath:/hhhh/
1.2静态资源访问前缀
默认无前缀。
可以通过属性配置添加前缀:
spring:
mvc:
static-path-pattern: /res/**
1.3webjars
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.5.1</version>
</dependency>
当你导入jar包形式的静态资源(如上所示),可以看到jar包目录下存在META-INF/resources目录,我们可以直接将其视为静态资源目录访问其下方资源。
1.4欢迎页支持
欢迎页:访问项目根路径时弹出的页面叫欢迎页。
如何配置?①在静态资源路径下加入index.html(访问前缀必须禁用)②使用controller处理/index请求
1.5自定义Favicon
在静态资源目录下加入favicon.ico就可以了(注意要关闭访问路径前缀)
1.6静态资源配置管理
SpringBoot启动默认加载xxxxAutoConfiguration类(自动配置类),而与SpringMVC相关的配置类为WebMvcAutoConfiguration。
下面我们来仔细看WebMvcAutoConfiguration类。首先是生效规则:
配置内容如下:
OrderedHiddenHttpMethodFilter组件:SpringBoot用于兼容rest风格
OrderedFormContentFilter组件:表单内容过滤器
WebMvcAutoConfigurationAdapter组件:
需要注意@EnableConfigurationProperties({WebMvcProperties.class, WebProperties.class})
WebMvcProperties.class与前缀spring.mvc进行了绑定 WebProperties与前缀为spring.web配置进行了绑定。
我们发现WebMvcAutoConfigurationAdapter只有一个有参构造器,这是有参构造器中的所有参数都会从容器中确定。也就是表示将与spring.mvc中的值绑定了的webMvcProperties对象和与spring.web中的值绑定了的 webProperties对象传入该对象
从此处可以看出@EnableConfigurationProperties注解有两个功能:①首先是使相关Properties对象的@ConfigurationProperties生效,进行绑定②将绑定后的组件注册到容器中。
ListableBeanFactory beanFactory:Spring的beanFactory
ObjectProvider messageConvertersProvider:找到所有的HttpMessageConverters
ObjectProvider resourceHandlerRegistrationCustomizerProvider:找到资源处理器的自定义器
ObjectProvider dispatcherServletPath
ObjectProvider<ServletRegistrationBean<?>> servletRegistrations:给应用注册servlet、filter
视图解析器(InternalResourceViewResolver)组件:
**资源处理的默认规则:**由如下代码定义:
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if (!this.resourceProperties.isAddMappings()) {
logger.debug("Default resource handling disabled");
return;
}
//此处是webjars的配置,如果监测到访问前缀是/webjars/**,就到classpath:/META-INF/resources/webjars/目录下寻找静态资源
addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/");
//此处是StaticPathPattern的配置,添加用户自定义的静态路径
addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) -> {
registration.addResourceLocations(this.resourceProperties.getStaticLocations());
if (this.servletContext != null) {
ServletContextResource resource = new ServletContextResource(this.servletContext, SERVLET_LOCATION);
registration.addResourceLocations(resource);
}
});
}
spring:
web:
resources:
add-mappings: false
#禁用所有静态资源
欢迎页规则如下: