SpringBoot嵌入式Web容器原理与使用介绍

目录
  • 原理
  • 应用
    • 1. 切换Web服务器
    • 2. 定制服务器规则

嵌入式 Web 容器:应用中内置服务器(Tomcat),不用在外部配置服务器了

原理

  • SpringBoot 项目启动,发现是 web 应用,引入 web 场景包 ----- 如:Tomcat
  • web 应用创建一个 web 版的 IOC 容器 ServletWebServerApplicationContext
  • ServletWebServerApplicationContext 启动的时候寻找 ServletWebServerFactory (Servlet 的 web 服务器工厂,用于生产 Servlet 服务器)
  • ServletWebServerFactory 底层默认有很多 Web 服务器工厂

  • 底层会自动配置好 ,自动配置类 ServletWebServerFactoryAutoConfiguration
  • ServletWebServerFactoryAutoConfiguration 导入 ServletWebServerFactoryConfiguration 工厂配置类

ServletWebServerFactoryConfiguration.class

  • 动态判断系统中导入了那个web服务器配置包
  • 如果导入 Tomcat 依赖,会自动放一个 Tomcat 服务器工厂, TomcatServletWebServerFactory 为我们创建出 Tomcat 服务器工厂
  • Tomcat 底层支持如下服务器

	@Override
	public WebServer getWebServer(ServletContextInitializer... initializers) {
		if (this.disableMBeanRegistry) {
			Registry.disableRegistry();
		}
		Tomcat tomcat = new Tomcat();
		File baseDir = (this.baseDirectory != null) ? this.baseDirectory : createTempDir("tomcat");
		tomcat.setBaseDir(baseDir.getAbsolutePath());
		Connector connector = new Connector(this.protocol);
		connector.setThrowOnFailure(true);
		tomcat.getService().addConnector(connector);
		customizeConnector(connector);
		tomcat.setConnector(connector);
		tomcat.getHost().setAutoDeploy(false);
		configureEngine(tomcat.getEngine());
		for (Connector additionalConnector : this.additionalTomcatConnectors) {
			tomcat.getService().addConnector(additionalConnector);
		}
		prepareContext(tomcat.getHost(), initializers);
		return getTomcatWebServer(tomcat);
	}

总结: 所谓内嵌服务器,就是把我们手动启动服务器的方法放进框架中了。

应用

1. 切换Web服务器

排除 tomcat 服务器,导入 undertow 依赖

       <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>

2. 定制服务器规则

方法一: 修改 server 下的配置文件

ServerProperties.class

server.undertow.accesslog.dir=/tmp

方法二: 自定义 ConfigurableServletWebServerFactory

方法三: 自定义 ServletWebServerFactoryCustomizer 定制化器

作用: 将配置文件的值,与 ServletWebServerFactory 绑定

SpringBoot 设计: Customizer 定制化器,可以定制 XXX 规则

到此这篇关于SpringBoot嵌入式Web容器原理与使用介绍的文章就介绍到这了,更多相关SpringBoot嵌入式Web容器内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot深入理解之内置web容器及配置的总结

    前言 在学会基本运用SpringBoot同时,想必搭过SSH.SSM等开发框架的小伙伴都有疑惑,SpringBoot在spring的基础上做了些什么,使得使用SpringBoot搭建开发框架能如此简单,便捷,快速.本系列文章记录网罗博客.分析源码.结合微薄经验后的总结,以便日后翻阅自省. 正文 使用SpringBoot时,首先引人注意的便是其启动方式,我们熟知的web项目都是需要部署到服务容器上,例如tomcat.weblogic.widefly(以前叫JBoss),然后启动web容器真正运行我

  • SpringBoot 嵌入式web容器的启动原理详解

    目录 SpringBoot应用启动run方法 SpringApplication.java 中执行的代码 ServletWebServerApplicationContext.java执行的方法 SpringBoot 2.x 版本 嵌入式Servlet容器自动配置原理以及启动原理 一.版本说明 二.总结 三.嵌入式Servlet容器自动配置原理(以Tomcat为例) 四.嵌入式Servlet容器启动原理(以Tomcat为例) SpringBoot应用启动run方法 SpringApplicati

  • SpringBoot嵌入式Web容器原理与使用介绍

    目录 原理 应用 1. 切换Web服务器 2. 定制服务器规则 嵌入式 Web 容器:应用中内置服务器(Tomcat),不用在外部配置服务器了 原理 SpringBoot 项目启动,发现是 web 应用,引入 web 场景包 ----- 如:Tomcat web 应用创建一个 web 版的 IOC 容器 ServletWebServerApplicationContext ServletWebServerApplicationContext 启动的时候寻找 ServletWebServerFac

  • SpringBoot嵌入式Servlet容器与定制化组件超详细讲解

    目录 嵌入式Servlet容器 1.原理分析 2.Servlet容器切换 3.定制Servlet容器配置 定制化组件 嵌入式Servlet容器 在Spring Boot中,默认支持的web容器有 Tomcat, Jetty, 和 Undertow 1.原理分析 那么这些web容器是怎么注入的呢?我们一起来分析一下 当SpringBoot应用启动发现当前是Web应用,它会创建一个web版的ioc容器ServletWebServerApplicationContext 这个类下面有一个createW

  • springboot配置嵌入式servlet容器的方法

    配置嵌入式Servlet容器 springboot默认tomcat为嵌入式servlet容器,所以不用在配置tomcat. 1.如何定制修改servlet容器? 1.在applicatio.properties里修改和server有关的配置(推荐) 如: server.tomcat server.tomcat.connection-timeout= 连接超时时间 server.tomcat.uri-encoding=UTF-8 修改编码 server.servlet.XXX 通用servlet容

  • springboot2.3.1替换为其他的嵌入式servlet容器的详细方法

    现阶段,springboot内嵌了Tomcat服务器,如果你不想使用Tomcat,springboot也是支持其他的服务器切换的. 如果你想了解底层springboot所支持的服务器你可以使用idea的快捷键快速按两次shift查询一个ServerProperties 的类,通过这个类你可以知道你想要了解的情况: springboot里面支持的服务器有Jetty.Netty-等等,大家有兴趣的话可以百度一下. 接着通过在pom文件的视图依赖分析可以得知: springboot里面的Tomcat是

  • web 容器的设计如何实现

    web 容器的设计 开发一个web容器涉及很多不同方面不同层面的技术,例如通信层的知识,程序语言层面的知识等等,且一个可用的web容器是一个比较庞大的系统,要说清楚需要很长的篇幅,本文旨在介绍如何设计一个web容器,只探讨实现的思路,并不涉及过多的具体实现.把它分解划分成若干模块和组件,每个组件模块负责不同的功能,下图列出一些基本的组件,并将对每个组件进行介绍. 连接接收器 主要的职责就是监听是否有客户端套接字连接并接收socket,再将socket交由任务执行器(线程池)执行.不断从系统底层读

  • SpringBoot配置嵌入式Servlet容器和使用外置Servlet容器的教程图解

    配置嵌入式Servlet容器 SpringBoot默认使用Tomcat作为嵌入式的Servlet容器: 问题? 1).如何定制和修改Servlet容器的相关配置: 1.修改和server有关的配置(ServerProperties[也是EmbeddedServletContainerCustomizer]): server.port=8081 server.context-path=/crud server.tomcat.uri-encoding=UTF-8 //通用的Servlet容器设置 s

  • SpringBoot如何切换成其它的嵌入式Servlet容器(Jetty和Undertow)

    目录 如何切换成其它的嵌入式Servlet容器(Jetty和Undertow) SpringBoot默认使用的内置Servlet容器是Tomcat SpringBoot还支持Jetty和Undertow SpringBoot web开发_嵌入式Servlet容器 1.切换嵌入式Servlet容器 2.定制Servlet容器 如何切换成其它的嵌入式Servlet容器(Jetty和Undertow) SpringBoot默认使用的内置Servlet容器是Tomcat 然而 SpringBoot还支持

  • Spring Boot 中嵌入式 Servlet 容器自动配置原理解析

    目录 1.参照 Spring Boot 自动配置包里面的web模块 2.EmbeddedServletContainerFactory(嵌入式Servlet容器工厂) 3.EmbeddedServletContainer(嵌入式的Servlet容器) 4.以TomcatEmbeddedServletContainerFactory为例 5.嵌入式容器的配置修改生效原理 1.参照 Spring Boot 自动配置包里面的web模块 EmbeddedServletContainerAutoConfi

随机推荐