SpringBoot-Web开发之嵌入式容器
切换嵌入式Servlet容器
1. 默认支持的web服务器
- Tomcat
- Jetty
- Undertow
2. 切换服务器
- 排除默认tomcat
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions>
</dependency>- 引入其他服务器
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-undertow</artifactId>
</dependency>Servlet容器配置原理
1. SpringBoot应用启动时,发现当前是Web应用
- spring-boot-starter-web默认导入了tomcat
2. web应用会创建一个web版的ioc容器
- 启动的时候,ServletWebServerApplicationContext 寻找 ServletWebServerFactory
- 也就是Servlet 的web服务器工厂 找 Servlet 的web服务器

3. web服务器的自动配置类ServletWebServerFactoryAutoConfiguration
- 导入了ServletWebServerFactoryConfiguration(配置类)

4. ServletWebServerFactoryConfiguration配置类
- 动态判断系统中到底导入了那个Web服务器的包
- web-starter默认是导入tomcat包,容器中就有 TomcatServletWebServerFactory



5. 获取到唯一确定的服务器factory,调用getWebServer()
- 创建出Tomcat服务器
- TomcatWebServer 的构造器进行初始化initialize()
- 手动调用this.tomcat.start(),启动服务器



修改Servlet容器
1. 配置文件中修改默认配置
- server.xxx
- 配置文件的值和ServletWebServerFactory是绑定的


2. 自定义 ConfigurableServletWebServerFactory
- 一般直接使用配置文件配置即可
@Component
public class CustomizationBean implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {@Overridepublic void customize(ConfigurableServletWebServerFactory server) {server.setPort(9000);}}定制化的常见方式
1. 修改配置文件
2. xxxxxCustomizer
3. 编写自定义的配置类 xxxConfiguration
4. Web应用编写一个配置类实现 WebMvcConfigurer
- 如果配置类加@EnableWebMvc,全面接管SpringMVC,所有规则都需要自己重新配置
- 慎用注解@EnableWebMvc
/*** @EnableWebMvc:全面接管* 1、静态资源?视图解析器?欢迎页.....全部失效*/
@EnableWebMvc
@Configuration
public class AdminWebConfig implements WebMvcConfigurer{/*** 定义静态资源行为* @param registry*/@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {/*** 访问 /aa/** 所有请求都去 classpath:/static/ 下面进行匹配*/registry.addResourceHandler("/aa/**").addResourceLocations("classpath:/static/");}
}@EnableWebMvc原理
- 一旦使用 @EnableWebMvc 、会 @Import(DelegatingWebMvcConfiguration.class)

- DelegatingWebMvcConfiguration 的作用,只保证SpringMVC最基本的使用,然后搭配系统中所有的 WebMvcConfigurer

- WebMvcAutoConfiguration因此失效

