SpringBoot默认使用Tomcat作为嵌入式的Servlet容器;
24 SpringBoot配置嵌入式Servlet容器

1)、如何定制和修改Servlet容器的相关配置;

1、修改和server有关的配置(ServerProperties【也是EmbeddedServletContainerCustomizer】);
24 SpringBoot配置嵌入式Servlet容器
2、编写一个EmbeddedServletContainerCustomizer:嵌入式的Servlet容器的定制器;来修改Servlet容器的配置。
24 SpringBoot配置嵌入式Servlet容器

2)、注册Servlet三大组件【Servlet、Filter、Listener】

由于SpringBoot默认是以jar包的方式启动嵌入式的Servlet容器来启动SpringBoot的web应用,没有web.xml文件。

注册三大组件用以下方式

ServletRegistrationBean
24 SpringBoot配置嵌入式Servlet容器
FilterRegistrationBean
24 SpringBoot配置嵌入式Servlet容器
ServletListenerRegistrationBean
24 SpringBoot配置嵌入式Servlet容器
SpringBoot帮我们自动SpringMVC的时候,自动的注册SpringMVC的前端控制器;DIspatcherServlet;
DispatcherServletAutoConfiguration中:
24 SpringBoot配置嵌入式Servlet容器
2)、SpringBoot能不能支持其他的Servlet容器;

3)、替换为其他嵌入式Servlet容器

24 SpringBoot配置嵌入式Servlet容器

默认支持:
Tomcat(默认使用)
24 SpringBoot配置嵌入式Servlet容器

Jetty
24 SpringBoot配置嵌入式Servlet容器
Undertow
24 SpringBoot配置嵌入式Servlet容器

4)、嵌入式Servlet容器自动配置原理

EmbeddedServletContainerAutoConfiguration:嵌入式的Servlet容器自动配置?
24 SpringBoot配置嵌入式Servlet容器
24 SpringBoot配置嵌入式Servlet容器

1)、EmbeddedServletContainerFactory(嵌入式Servlet容器工厂)
24 SpringBoot配置嵌入式Servlet容器
24 SpringBoot配置嵌入式Servlet容器
2)、EmbeddedServletContainer:(嵌入式的Servlet容器)
24 SpringBoot配置嵌入式Servlet容器
3)、以TomcatEmbeddedServletContainerFactory为例
24 SpringBoot配置嵌入式Servlet容器4)、我们对嵌入式容器的配置修改是怎么生效?
24 SpringBoot配置嵌入式Servlet容器
EmbeddedServletContainerCustomizer:定制器帮我们修改了Servlet容器的配置?
怎么修改的原理?

5)、容器中导入了EmbeddedServletContainerCustomizerBeanPostProcessor
24 SpringBoot配置嵌入式Servlet容器
24 SpringBoot配置嵌入式Servlet容器
步骤:
1)、SpringBoot根据导入的依赖情况,给容器中添加相应的EmbeddedServletContainerFactory【TomcatEmbeddedServletContainerFactory】

2)、容器中某个组件要创建对象就会惊动后置处理器;
EmbeddedServletContainerCustomizerBeanPostProcessor;
只要是嵌入式的Servlet容器工厂,后置处理器就工作;

3)、后置处理器,从容器中获取所有的EmbeddedServletContainerCustomizer,调用定制器的定制方法

5)、嵌入式Servlet容器启动原理

什么时候创建嵌入式的Servlet容器工厂?什么时候获取嵌入式的Servlet容器并启动Tomcat;
获取嵌入式的Servlet容器工厂:

1)、SpringBoot应用启动运行run方法

2)、refreshContext(context);SpringBoot刷新IOC容器【创建IOC容器对象,并初始化容器,创建容器中的每一个组件】;如果是web应用创建AnnotationConfigEmbeddedWebApplicationContext,否则:AnnotationConfigApplicationContext

3)、refresh(context);刷新刚才创建好的ioc容器;
24 SpringBoot配置嵌入式Servlet容器
24 SpringBoot配置嵌入式Servlet容器
24 SpringBoot配置嵌入式Servlet容器
4)、 onRefresh(); web的ioc容器重写了onRefresh方法

5)、webioc容器会创建嵌入式的Servlet容器;createEmbeddedServletContainer();

6)、获取嵌入式的Servlet容器工厂:
EmbeddedServletContainerFactory containerFactory = getEmbeddedServletContainerFactory();
从ioc容器中获取EmbeddedServletContainerFactory 组件;TomcatEmbeddedServletContainerFactory创建
对象,后置处理器一看是这个对象,就获取所有的定制器来先定制Servlet容器的相关配置;

7)、使用容器工厂获取嵌入式的Servlet容器:this.embeddedServletContainer = containerFactory
.getEmbeddedServletContainer(getSelfInitializer());

8)、嵌入式的Servlet容器创建对象并启动Servlet容器;
先启动嵌入式的Servlet容器,再将ioc容器中剩下没有创建出的对象获取出来;
IOC容器启动创建嵌入式的Servlet容器

相关文章:

  • 2022-12-23
  • 2021-09-04
  • 2021-05-16
  • 2022-12-23
  • 2022-12-23
  • 2021-06-30
  • 2021-12-17
  • 2022-12-23
猜你喜欢
  • 2021-12-25
  • 2022-12-23
  • 2021-12-18
  • 2021-06-28
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案