SpringBootWeb开发-1
上一级页面:ssm-spring-boot速成学习索引
前言
Spring Boot Web开发
22、web场景-web开发简介
Spring Boot provides auto-configuration for Spring MVC that works well with most applications.(大多场景我们都无需自定义配置)
The auto-configuration adds the following features on top of Spring’s defaults:
-
Inclusion of
ContentNegotiatingViewResolver
andBeanNameViewResolver
beans.- 内容协商视图解析器和BeanName视图解析器
-
Support for serving static resources, including support for WebJars (covered later in this document)).
- 静态资源(包括webjars)
-
Automatic registration of
Converter
,GenericConverter
, andFormatter
beans.- 自动注册
Converter,GenericConverter,Formatter
- 自动注册
-
Support for
HttpMessageConverters
(covered later in this document).- 支持
HttpMessageConverters
(后来我们配合内容协商理解原理)
- 支持
-
Automatic registration of
MessageCodesResolver
(covered later in this document).- 自动注册
MessageCodesResolver
(国际化用)
- 自动注册
-
Static
index.html
support.- 静态index.html 页支持
-
Custom
Favicon
support (covered later in this document).- 自定义
Favicon
- 自定义
-
Automatic use of a
ConfigurableWebBindingInitializer
bean (covered later in this document).- 自动使用
ConfigurableWebBindingInitializer
,(DataBinder负责将请求数据绑定到JavaBean上)
- 自动使用
If you want to keep those Spring Boot MVC customizations and make more MVC customizations (interceptors, formatters, view controllers, and other features), you can add your own
@Configuration
class of typeWebMvcConfigurer
but without@EnableWebMvc
.不用@EnableWebMvc注解。使用
@Configuration
+WebMvcConfigurer
自定义规则
If you want to provide custom instances of
RequestMappingHandlerMapping
,RequestMappingHandlerAdapter
, orExceptionHandlerExceptionResolver
, and still keep the Spring Boot MVC customizations, you can declare a bean of typeWebMvcRegistrations
and use it to provide custom instances of those components.声明
WebMvcRegistrations
改变默认底层组件
If you want to take complete control of Spring MVC, you can add your own
@Configuration
annotated with@EnableWebMvc
, or alternatively add your own@Configuration
-annotatedDelegatingWebMvcConfiguration
as described in the Javadoc of@EnableWebMvc
.使用
@EnableWebMvc+@Configuration+DelegatingWebMvcConfiguration 全面接管SpringMVC
23、web场景-静态资源规则与定制化
静态资源目录
只要静态资源放在类路径下: called /static
(or /public
or /resources
or /META-INF/resources
访问 : 当前项目根路径/ + 静态资源名
原理: 静态映射/**。
请求进来,先去找Controller看能不能处理。不能处理的所有请求又都交给静态资源处理器。静态资源也找不到则响应404页面。
也可以改变默认的静态资源路径,/static
,/public
,/resources
, /META-INF/resources
失效
1 | resources: |
静态资源访问前缀
1 | spring: |
当前项目 + static-path-pattern + 静态资源名 = 静态资源文件夹下找
webjar(了解)
可用jar方式添加css,js等资源文件,
例如,添加jquery
1 | <dependency> |
访问地址:http://localhost:8080/webjars/jquery/3.5.1/jquery.js 后面地址要按照依赖里面的包路径。
24、web场景-welcome与favicon功能
欢迎页支持
-
静态资源路径下 index.html。
-
可以配置静态资源路径
-
但是不可以配置静态资源的访问前缀。否则导致 index.html不能被默认访问
1
2
3spring:
# mvc:
# static-path-pattern: /res/** 这个会导致welcome page功能失效,变成 http://localhost:8080/res/index.html
-
-
controller能处理/index。
自定义Favicon
指网页标签上的小图标。
favicon.ico 放在静态资源目录下即可。
注意static-path-pattern: /res/**
这个会影响favicon.ico 功能,导致这个图标在网站上不能显示。
1 | spring: |
25、web场景-【源码分析】-静态资源原理
-
SpringBoot启动默认加载 xxxAutoConfiguration 类(自动配置类)
-
SpringMVC功能的自动配置类
WebMvcAutoConfiguration
,满足所有条件,所以生效:1
2
3
4
5
6
7
8
9
10
public class WebMvcAutoConfiguration {
...
} -
来到其中的
WebMvcAutoConfigurationAdapter
内部类,给容器中配置的内容:-
注意到
@EnableConfigurationProperties()
里面的内容 -
ResourceProperties
<=>spring.resources
-
配置文件的相关属性的绑定:
WebMvcProperties
<=>spring.mvc
1
2
3
4
5
6
7
public static class WebMvcAutoConfigurationAdapter implements WebMvcConfigurer {
...
}
-
如果配置类只有一个有参构造器:
有参构造器所有参数的值都会从容器中确定
1 | //有参构造器所有参数的值都会从容器中确定 |
ResourceProperties resourceProperties
:获取和spring.resources绑定的所有的值的对象WebMvcProperties mvcProperties
:获取和spring.mvc绑定的所有的值的对象ListableBeanFactory beanFactory
:Spring的beanFactoryHttpMessageConverters
:找到所有的HttpMessageConverterResourceHandlerRegistrationCustomizer
:找到自定义的资源处理器。DispatcherServletPath
:DispatcherServlet能处理的路径ServletRegistrationBean
: 给应用注册Servlet、Filter、Listener….
资源处理的默认规则
来到WebMvcAutoConfigurationAdapter
内部类中的addResourceHandlers
方法
1 | //... |
根据上述代码,我们可以同过配置禁止所有静态资源规则。
1 | spring: |
静态资源规则:
1 |
|
欢迎页的处理规则
1 | ... |
WelcomePageHandlerMapping
的构造方法如下:
1 | WelcomePageHandlerMapping(TemplateAvailabilityProviders templateAvailabilityProviders, |
这构造方法内的代码也解释了web场景-welcome与favicon功能中配置static-path-pattern
了,welcome页面和小图标失效的问题。
SpringBootWeb开发-2
spring-boot-web-开发-2-0-源码分析-rest