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

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

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



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



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


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

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

- WebMvcAutoConfiguration因此失效
