Springboot内嵌tomcat应用原理深入分析

Spring Boot是现今最流行的Java Web框架之一,其最大的优点是使用内嵌的Tomcat容器,降低了Web应用的开发和部署成本。本文将深入分析Spring Boot内嵌Tomcat应用的原理,并介绍两个示例。

1. Spring Boot内嵌Tomcat原理

Spring Boot应用的内嵌Tomcat配置在pom.xml文件中的依赖中引入了Tomcat的starter。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>

Spring Boot内嵌Tomcat是使用Tomcat的servlet容器、连接器、会话和JSP支持,通过TomcatEmbeddedServletContainerFactory来创建tomcat容器。

Spring Boot启动时内部类TomcatEmbeddedServletContainerFactoryLoader会加载子类TomcatEmbeddedServletContainerFactory,同时读取配置文件application.properties中的相关配置项,完成TomcatEmbeddedServletContainerFactory的实例化,并将其返回给Spring核心。

public class TomcatEmbeddedServletContainerFactoryLoader {
    private static final String FACTORY_CLASS_NAME = "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory";
    private static final String CUSTOMIZER_CLASS_NAME = "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerCustomizer";
    ...
    public static EmbeddedServletContainerFactory get() {
        Class<?> factoryClass = getFactoryClass();
        try {
            return (EmbeddedServletContainerFactory) factoryClass.newInstance();
        }
        ...
    }
    private static Class<?> getFactoryClass() {
        try {
            return Class.forName(FACTORY_CLASS_NAME);
        }
        ...
    }
    private static ConfigurableTomcatContextCustomizer getTomcatContextCustomizer() {
        try {
            Class<?> customizerClass = Class.forName(CUSTOMIZER_CLASS_NAME);
            return (ConfigurableTomcatContextCustomizer) customizerClass.newInstance();
        }
        ...
    }
}

TomcatEmbeddedServletContainerFactory就是Spring Boot内嵌Tomcat的核心。

public class TomcatEmbeddedServletContainerFactory extends AbstractEmbeddedServletContainerFactory
        implements EmbeddedServletContainerFactory, ResourceLoaderAware, EnvironmentAware {
    ...
}

在TomcatEmbeddedServletContainerFactory实例化完成之后,我们就可以对其进行自定义配置,例如设置端口、Session失效时间、SSL、JSP支持等。

2. 示例

示例一:设置Tomcat的停止端口

在application.properties配置文件增加如下配置,设置Tomcat停止的端口号。

server.port=8080
server.tomcat.shutdown-port=8005

在Spring Boot启动后,可以监听Tomcat的停止端口号停止Tomcat服务。

示例二:使用Thymeleaf模版引擎

如果想使用Thymeleaf模版引擎,只需要在pom.xml文件中增加thymeleaf的starter依赖。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

同时,还需要配置相关的Thymeleaf属性。

spring.thymeleaf.cache=false
spring.thymeleaf.enabled=true
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html

以上就是两个示例,通过深入分析Spring Boot内嵌Tomcat的原理以及相关的示例,相信你已经对于内嵌Tomcat应用的原理和使用有了更加深入的了解。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Springboot内嵌tomcat应用原理深入分析 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 关于Java虚拟机HotSpot

    关于Java虚拟机HotSpot完整攻略 Java虚拟机(JVM)是Java语言的核心组件之一,它是Java语言跨平台特性的基石。HotSpot是目前最流行的Java虚拟机之一,它是由Sun Microsystems公司开发的,现在则由Oracle维护。本文将详细介绍HotSpot的概念、工作原理、性能调优和问题排查。 HotSpot的概念 HotSpot是…

    Java 2023年5月26日
    00
  • java的正则表达式你知道多少

    Java的正则表达式攻略 什么是正则表达式? 正则表达式是一种用来描述一种特定模式的语法规则,通过这种语法规则,我们能够快速地从文本中提取出我们需要的信息。 在Java中,我们通常使用的是java.util.regex包提供的正则表达式库来操作正则表达式。 正则表达式语法 在Java的正则表达式中,有很多的语法。其中,一些常用的语法包括: .:匹配任意字符,…

    Java 2023年5月27日
    00
  • java 将一个数组逆序输出的方法

    下面是Java将一个数组逆序输出的方法的攻略: 使用for循环,逆序遍历数组并输出 这种方法使用一个for循环来逆序遍历数组,并使用System.out.println()方法将数组元素逐一输出。代码如下: int[] arr = {1, 2, 3, 4, 5}; for (int i = arr.length – 1; i >= 0; i–) { …

    Java 2023年5月26日
    00
  • Java关于jar包的知识详解

    让我来为你详细讲解Java关于jar包的知识。 什么是jar包? jar是Java Archive的缩写,意思是Java压缩文件。它是Java中常用的一种打包方式,相当于将多个class文件或其它文件合并成一个文件,并对其中的文件进行压缩以减小体积。 jar包的优点 方便代码管理:将多个class文件或其它文件合并到一起,方便管理和分发。 便于发布和部署:只…

    Java 2023年5月20日
    00
  • Maven打包上云的实现步骤

    下面我将为你详细讲解”Maven打包上云的实现步骤”的完整攻略。 一、背景介绍 随着云计算和微服务的兴起,很多应用都开始在云上部署和运行。为了方便在云上部署和管理应用,我们往往需要将应用打包成云原生的镜像,并通过容器技术进行部署。在Java应用中,我们可以使用Maven工具来进行应用的打包和构建。 二、Maven打包步骤 Maven是一个开源的项目管理工具,…

    Java 2023年5月19日
    00
  • Java连接PostgreSql数据库及基本使用方式

    Java连接PostgreSql数据库及基本使用方式攻略 简介 PostgreSQL(常简称 Postgres)是一个高度自定的开源关系数据库管理系统。PostgreSQL 支持多种编程语言,包含 Java。通过 JDBC 驱动可以把 Java 和 PostgreSQL 集成,完成数据交流。 步骤 1. 导入JDBC驱动 在项目中添加 PostgreSQL …

    Java 2023年5月20日
    00
  • Java利用Sping框架编写RPC远程过程调用服务的教程

    让我来为你讲解Java利用Spring框架编写RPC远程过程调用服务的完整攻略。 简介 RPC(远程过程调用)是一种使调用远程计算机上的服务,像使用本地服务一样使用它们的方法,而完全透明地隐藏了底层网络细节的技术。在Java环境中,Spring框架可以帮助我们轻松地编写RPC服务。 步骤 下面是Java利用Spring框架编写RPC服务的基本步骤: 第一步:…

    Java 2023年5月19日
    00
  • 为Java应用程序添加退出事件响应

    为Java应用程序添加退出事件响应可以通过以下步骤完成: 步骤一:创建一个ShutdownHook线程 在Java中,我们可以创建一个特殊的线程来处理应用程序退出时的清理工作,这个线程称为ShutdownHook线程。我们需要在应用程序启动时创建这个线程,并且在应用程序退出时执行它所要完成的清理工作。 可以使用以下代码创建一个ShutdownHook线程: …

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部