总结:SpringBoot内嵌Tomcat原理

news/2024/5/14 20:39:18/文章来源:https://blog.csdn.net/w2009211777/article/details/128131381

一、介绍

一般我们启动web服务都需要单独的去安装tomcat,而Springboot自身却直接整合了Tomcat,什么原理呢?

二、原理

SpringBoot应用只需要引入spring-boot-starter-web中这个依赖,应用程序就默认引入了tomcat依赖,其实这主要是Tomcat本身提供的外部接口(org.apache.catalina.startup.Tomcat),使其它应用程序能够非常方便的将Tomcat嵌入到自身的应用来。
下面是从网络上找的一个自身的程序嵌入如何实现嵌入式Tomcat,达到和Springboot类似的效果:

<dependency><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version></dependency>

定义一个简单的一个servlet类(提供web服务):

public class DemoServlet extends HttpServlet {private static final long serialVersionUID = 1L;@Overridepublic void doGet(HttpServletRequest request,HttpServletResponse response)throws IOException, ServletException {response.setContentType("text/html");response.setCharacterEncoding("UTF-8");PrintWriter out = response.getWriter();out.println("<!DOCTYPE html><html>");out.println("<head>");out.println("<meta charset="UTF-8" />");out.println("<title></title>");out.println("</head>");out.println("<body bgcolor="white">");out.println("<h1> 嵌入式tomcat</h1>");out.println("</body>");out.println("</html>");}
}

定义一个EmbeddedTomcatServer类,主程序执行入口:

EmbeddedTomcatServer类作为程序的入口,代码逻辑其实就是通过tomcat提供的外部接口类修改server.xml这个文件;

public class EmbeddedTomcatServer {public static void main(String[] args) throws Exception {//把目录的绝对的路径获取到String classpath = System.getProperty("user.dir");System.out.println(classpath);//new一个TomcatTomcat tomcat = new Tomcat();//插件是6或者6以前的//Embbedded//设置Tomcat的端口//tomcat.setPort(9090);Connector connector = tomcat.getConnector();connector.setPort(9091);//设置HostHost host = tomcat.getHost();//我们会根据xml配置文件来host.setName("localhost");host.setAppBase("webapps");//前面的那个步骤只是把Tomcat起起来了,但是没啥东西//要把class加载进来,把启动的工程加入进来了Context context = tomcat.addContext(host, "/", classpath);if (context instanceof StandardContext) {StandardContext standardContext = (StandardContext) context;standardContext.setDefaultContextXml("E:\apache-tomcat-8.5.51\conf\web.xml");//我们要把Servlet设置进去Wrapper wrapper = tomcat.addServlet("/", "DemoServlet", new DemoServlet());wrapper.addMapping("/embeddedTomcat");}//Tomcat跑起来tomcat.start();//强制Tomcat server等待,避免main线程执行结束后关闭tomcat.getServer().await();}}

在这里插入图片描述

 

三、SpringBoot接入原理

SpringBoot嵌入Tomcat的原理其实和上面的案例是一样的,我们来看下代码:

首先进入run方法,并点击refreshContext(context)方法:

 

 

 

 

 如下可知,底层就是用的Tomcat类实现。

 

参考:

SpringBoot内嵌Tomcat原理剖析_普通网友的博客-CSDN博客_springboot内嵌tomcat原理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_228827.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言——malloc开辟矩阵

目录 用动态内存开辟矩阵 矩阵初始化 用动态内存开辟矩阵 动态内存更多的知识在这篇博客&#xff0c;本文将介绍用malloc开辟矩阵。 malloc是C语言中用来动态开辟内存的&#xff0c;通过malloc函数可以向计算机申请一串连续的内存空间。 因为malloc开辟的内存在堆上&#…

Observability:从零开始创建 Java 微服务并监控它 (二)

这篇文章是继上一篇文章 “Observability&#xff1a;从零开始创建 Java 微服务并监控它 &#xff08;一&#xff09;” 的续篇。在上一篇文章中&#xff0c;我们讲述了如何创建一个 Java web 应用&#xff0c;并使用 Filebeat 来收集应用所生成的日志。在今天的文章中&#xf…

uni-app 超详细教程(三)(从菜鸟到大佬)

本文中内容为&#xff1a; 1. 支付功能&#xff08;微信支付&#xff0c;支付宝支付&#xff09; 2. 项目打包&#xff1a;&#xff08;APP打包&#xff0c;H5打包&#xff0c;微信小程序打包&#xff09; 一&#xff0c;uni - app 的支付功能 一、微信支付 1、登录微信开…

华为云数据库GaussDB(for Cassandra)揭秘:高性能低成本是什么样的体验?

在我们的日常理念中&#xff0c;追求性价比是最为常见的&#xff0c;但是你知道购买低配置还能享受高性能、低延时、超低价的数据库有哪些吗&#xff1f;今天我们就用数据说话&#xff0c;带你深入了解GaussDB(for Cassandra)挑战高性价比&#xff01; 众所周知&#xff0c;有…

操作系统实验5:信号量的实现与应用

写在最前的总结 下面的实验内容是在完整做完实验时候补充的&#xff0c;这里先把踩过的坑记录一下。 调试总结 先在Ubuntu上模拟生产者—消费者问题。这个实验分为两大部分&#xff0c;一个是实现信号量&#xff0c;另一个是验证信号量。对于第二个&#xff0c;建议先在Ubun…

【MySQL基础】MySQL常用的图形化管理工具有那些?

目录 一、为什么要使用MySQL图形化管理工具 原因 / 目的 / 作用 二、什么是DOS窗口? 三、常见的MySQL图形化管理工具有那些&#xff1f; 四、 常见几个MySQL图形工具的介绍 Navicat SQLyog MySQL Workbench DataGrip 五、Navicat图形工具的安装与使用 第一步&#x…

学习响应式布局

针对性内容 页面设计在不同设备的显示情况布局只会使用float定位&#xff0c;而不会掌握flex不能很好的使用rem作为设计单位掌握响应式布局、弹性等常见布局 学习内容 css中媒体查询的作用和使用方法flex弹性盒子的用法rem的作用和使用方法目录 针对性内容 学习内容 Media…

[iOS]App Store Connect添加银行卡时的CNAPS代码查询

App Store Connect 协议、税务和银行业务中&#xff0c;给付费APP类型添加银行卡需要填写CNAPS代码CNAPS代码&#xff0c;其实就是联行号。 联行号又称大额行号、银联号、银行行号或CNAPS号。 银行联行号查询

Java+JSP+MySQL基于SSM的会议交接平台的设计与实现-计算机毕业设计

项目介绍 随着社会竞争压力的不断加强&#xff0c;企事业单位内部的会议都在不断的增加&#xff0c;有效的会议可以提高企事业内部的沟通&#xff0c;更好的做出符合战略目标的决策&#xff0c;但是传统的会议交接有一定的问题存在&#xff0c;首先就是必须面对面进行传达&…

matlab图像的增强

1.灰度变换增强 &#xff08;1&#xff09;图像直方图 &#xff08;2&#xff09;图像直方图的均衡化 2.频域滤波增强 &#xff08;1&#xff09;低通滤波器 &#xff08;2&#xff09;高通滤波器 &#xff08;3&#xff09;同态滤波器 3.彩色增强 &#xff08;1&#xff09;真…

.vcxproj.filters 误删后如何重建

背景&#xff1a; 今天碰到这样一种情况&#xff0c;我在删除这个VS文件夹下的.user文件时&#xff0c;不小心把.vcxproj.filters也删除了。当然为什么删.user呢&#xff0c;因为换电脑了。 删除之后&#xff0c;我发现&#xff1a;我的解决方案目录变成这样了&#xff1a; 对…

[附源码]Python计算机毕业设计SSM考试排考系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

深入理解ThreadLocal源码

1. 预备知识&#xff1a;强软弱虚引用 在Java中有四种引用的类型&#xff1a;强引用、软引用、弱引用、虚引用。 设计这四种引用的目的是可以用程序员通过代码的方式来决定对象的生命周期&#xff0c;方便GC。 强引用 强引用是程序代码中最广泛使用的引用&#xff0c;如下&a…

CSDNtop1全栈接口测试教程 jmeter接口测试,接口自动化测试【2】

延时等待&#xff08;全局性&#xff09; api 测试⽤例执⾏速度⾮常快&#xff0c;某些时候因为业务的特性想让它延迟⼏秒执⾏&#xff0c;那么这个时候就使⽤延时等待。 参数化 可以理解为&#xff1a;⼀个测试点需要多次操作&#xff0c;并且每次操作数据都是不⼀样但测试步…

最好的天线基础知识!超实用 随时查询

天线作为无线电的发射和接收设备是影响信号强度和质量的重要设备,其在移动通信领域的重要性非常关键。通过对天线选型,天线安装,天线调整从而保障基站覆盖区域的信号强度与质量。对其的 掌握程度是网规与网优工程师的技能基本要求之一。下文重点说明天线要掌握哪些方面及其原理…

【软件安装】Linux中RabbitMQ的安装

① 本篇是基于Linux操作系统中的安装&#xff0c;故先准备一个干净的Linux操作系统。本文中所有的操作基于CentOS8进行安装演示&#xff1b; ② 接下来的演示文本中&#xff0c;红色字体为操作步骤&#xff0c;黑色字体为解释说明&#xff1b; ③ 确保Linux系统中已经安装好必…

【python】 int、float、double与16进制字符串的互相转换

import structdef intToHex(num): # int转16进制return hex(num)[2:].upper()def hexToInt(hexString): # 16进制转intreturn int(hexString, 16)def floatToHex(floatValue): # float转16进制return struct.pack(>f, floatValue).hex().upper()def hexToFloat(hexString…

Lactoferrin-PEG-MTX/Paclitaxel 乳铁蛋白-聚乙二醇-甲氨蝶呤/紫杉醇

产品名称&#xff1a;乳铁蛋白-聚乙二醇-甲氨蝶呤 英文名称&#xff1a;Lactoferrin-PEG-MTX 纯度&#xff1a;95% 存储条件&#xff1a;-20C&#xff0c;避光&#xff0c;避湿 外观:固体或粘性液体&#xff0c;取决于分子量 PEG分子量可选&#xff1a;350、550、750、1k、2k、…

全球领先飞瞳引擎™云服务全球两千+企业用户,集装箱识别集装箱箱况残损检测,正常箱号识别率99.98%以上,箱信息识别及铅封识别免费

全球领先飞瞳引擎™AI集装箱识别检测云服务全球两千企业用户&#xff0c;集装箱识别集装箱箱况残损检测&#xff0c;正常箱号识别率99.98%以上&#xff0c;箱信息识别及铅封识别免费。CIMCAI中集飞瞳是全球应用落地最广&#xff0c;规模最大&#xff0c;最先进的的港航人工智能…

操作系统学习笔记(Ⅳ):文件

目录 1 文件管理 1.1 初识文件管理 1.文件属性 2.文件数据组织 3.向上功能 1.2 文件逻辑结构 1.无结构文件 2.有结构文件 3.顺序文件 4.索引文件 5.索引顺序文件 1.3 文件目录 1.文件控制块 2.目录结构 3.索引结点 1.4 文件物理结构 1.连续分配 2.链接分配 …