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打印数组的三种方法整理

    Java打印数组的三种方法整理 在Java程序中,经常需要对数组进行打印输出操作。本文将整理并详细讲解Java打印数组的三种方法,以供参考。 方法一:使用for循环遍历数组并打印 使用for循环遍历数组,逐个将数组元素打印出来。 示例代码: int[] arr = {1, 2, 3, 4, 5}; for (int i = 0; i < arr.len…

    Java 2023年5月26日
    00
  • 浅谈SpringMVC的拦截器(Interceptor)和Servlet 的过滤器(Filter)的区别与联系 及SpringMVC 的配置文件

    浅谈SpringMVC的拦截器(Interceptor)和Servlet的过滤器(Filter)的区别与联系及SpringMVC的配置文件 拦截器和过滤器的区别与联系 拦截器和过滤器都是Web应用程序中常用的组件,它们可以用来拦截请求并进行处理。虽然它们的作用类似,但是它们之间还是有一些区别的。 区别 拦截器是SpringMVC框架中的组件,而过滤器是Ser…

    Java 2023年5月18日
    00
  • spring-transaction源码分析(2)EnableTransactionManagement注解

    概述(Java doc) 该注解开启spring的注解驱动事务管理功能,通常标注在@Configuration类上面用于开启命令式事务管理或响应式事务管理。 @Configuration @EnableTransactionManagement public class AppConfig { @Bean public FooRepository fooRe…

    Java 2023年5月6日
    00
  • Spring-Validation 后端数据校验的实现

    下面我将为你详细讲解如何使用Spring-Validation实现后端数据校验的攻略。 什么是Spring-Validation? Spring-Validation是Spring框架中的一部分,可以用来实现后端的数据校验。它提供了很多常见的校验规则,也允许我们自定义校验规则。 Spring-Validation 的使用 引入依赖 首先,我们需要在pom.x…

    Java 2023年5月20日
    00
  • java获取properties属性文件示例

    当我们需要在Java程序中读取properties属性文件时,通常可以使用java.util.Properties类来实现。下面是实现此操作的完整攻略: 1. 获取properties文件 首先需要获取到带有相关属性的properties文件,可以通过在项目中创建文件或者从外部导入文件的方式进行获取。假设我们已经有了一个示例属性文件”example.prop…

    Java 2023年5月19日
    00
  • Spring Boot中使用Spring-data-jpa的配置方法详解

    “Spring Boot中使用Spring-data-jpa的配置方法详解”的攻略如下: 1. 添加Spring Data JPA依赖 在项目的pom.xml文件中添加Spring Data JPA的依赖: <dependency> <groupId>org.springframework.boot</groupId> &…

    Java 2023年5月20日
    00
  • java object 之clone方法全面解析

    Java对象之clone方法全面解析 简介 在Java中,如果使用赋值号将一个对象赋值给另外一个对象,那么这两个对象会共用同一份数据。而通过clone()方法可以创建一个新的对象,并复制原始对象数据到新对象中。 在本篇文章中,我们将全面解析clone()方法,介绍如何使用clone()方法拷贝一个Java对象。 clone() 方法说明 clone()方法是…

    Java 2023年5月26日
    00
  • JavaCV实战之调用摄像头基础详解

    JavaCV实战之调用摄像头基础详解 简介 JavaCV是一个基于OpenCV的Java Wrapper,它允许Java开发人员快速简单地实现计算机视觉和图形处理任务。其中,JavaCV可以通过调用摄像头来实现很多有趣的功能。 基础流程 JavaCV实战之调用摄像头基础详解的流程大致如下: 配置JavaCV环境:下载并安装JavaCV(包括OpenCV的动态…

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