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

yizhihongxing

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日

相关文章

  • cmd编译运行java程序的方法

    当我们需要编写并运行Java程序时,通常需要使用Java编译器和Java虚拟机(JVM)。在Windows系统上,我们可以使用命令行(cmd)来完成这些任务。下面是详细的攻略: 安装JDK 首先要确保已经安装了Java开发工具包(JDK),否则需要先从官方网站上下载并安装。 编写Java程序 接下来,我们要编写一个Java程序,并将其保存为.java文件。 …

    Java 2023年5月23日
    00
  • JavaWeb开发使用Cookie创建-获取-持久化、自动登录、购物记录、作用路径

    针对JavaWeb开发中关于Cookie的创建、获取和持久化、自动登录、购物记录、作用路径等问题,下面是一个完整的攻略: 什么是Cookie 在Web开发中,Cookie是存储于客户端的一种数据,它允许Web服务器向客户端的浏览器发送HTTP响应,在浏览器中存储这些数据,而之后浏览器向同一个域发送请求时会自动携带相关的Cookie数据,以此实现数据持久化。 …

    Java 2023年6月16日
    00
  • Spring Boot 连接LDAP的方法

    Spring Boot连接LDAP的方法 LDAP(Lightweight Directory Access Protocol)是一种轻量级的目录访问协议,常用于企业级应用程序中的身份验证和授权。在Spring Boot中,我们可以使用Spring LDAP来连接和操作LDAP服务器。本文将详细讲解如何使用Spring LDAP连接LDAP服务器,并提供两个…

    Java 2023年5月15日
    00
  • 详解APP微信支付(java后台_统一下单和回调)

    详解APP微信支付(java后台_统一下单和回调) 一、前言 在移动APP中,使用微信支付功能是非常常见的需求,而且使用微信支付也是比较方便和快捷的。本文将详细介绍如何在Java后台中实现微信支付的功能。主要包括两部分:统一下单和回调。本文介绍的支付接口都是官方的API接口,并采用了最新的V3版本。 二、统一下单 下单接口是微信支付功能的核心,接口名称为:h…

    Java 2023年5月27日
    00
  • Java如何获取数组和字符串的长度(length还是length())

    获取数组和字符串的长度可以使用不同的属性或方法,下面将分别介绍。 一、获取数组长度 获取Java中数组的长度可以使用.length属性,这个属性是数组类型的一个成员,用于返回数组的长度,即数组元素的个数。示例如下: int[] nums = {1, 2, 3, 4, 5}; // 定义整型数组 System.out.println("数组长度为:&…

    Java 2023年5月26日
    00
  • Tomcat+Jsp环境下的中文问题

    中文问题在Tomcat + JSP环境下可能会出现,主要是因为编码问题。以下是解决中文问题的完整攻略: 设置Tomcat的默认编码方式 在Tomcat中,需要设置服务器端和客户端的编码方式。可以在Tomcat的配置中设置如下参数: <Connector URIEncoding="UTF-8" connectionTimeout=&q…

    Java 2023年5月20日
    00
  • java连接mysql数据库乱码的解决方法

    以下是讲解“java连接mysql数据库乱码的解决方法”的完整攻略。 问题描述 在使用Java连接MySQL数据库时,有时会出现中文乱码的问题。如何解决这个问题呢?下面将会给出详细的解决方法。 解决方法 步骤一:指定编码方式 在连接MySQL数据库之前,需要指定编码方式。可以在连接数据库的URL中添加以下参数: jdbc:mysql://localhost/…

    Java 2023年5月19日
    00
  • 用java代码帮朋友P图

    下面是“用java代码帮朋友P图”的完整攻略: 准备工作 首先,我们需要安装并配置好Java开发环境。建议使用JDK1.8及以上版本,可以到Oracle官网下载并安装。安装完成后,需配置Java环境变量,具体可参考官方文档或搜索教程进行配置。 图像处理库 Java提供了许多用于图像处理的库,常用的有Java2D和JavaFX等。这里我们选择Java2D,它提…

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