Spring Boot2.0之 原理—创建内置Tomcat容器

Spring Boot内置Tomcat版本修改实战:原理、方法与避坑指南 在Java Web开发中,Servlet容器是承载Web应用运行的核心组件,负责处理HTTP请求、管理会话和提供运行时环境。Spring Boot通过自动配置和Starter机制,默认集成了Tomcat作为嵌入式容器,实现了开箱即用的便捷性。其原理在于依赖管理,由spring-boot-dependencies统一控制版本号。这种设计在提升开发效率的同时,也带来了灵活性挑战,例如当需要修复安全漏洞、适配特定环境或利用新特性时,开发者必须掌握修改内置Tomcat版本的能力。通过覆盖Maven属性或调整Grad 阅读详情

Spring Boot2.0之 原理—创建内置Tomcat容器

前面所述的https://www.cnblogs.com/toov5/p/9823728.html 中的第一条先不赘述了,就是玩了maven

重点介绍后两条

首先内置Tomcat:

  SpringBoot中内置tomcat服务器 

 Java操作创建tomcat

 我们点击pom中的

持续点击到

  

 

 继续点击会发现:

 

这个依赖 为我所需~

 注意:Springboot2.0之后 Tomcat8.0以上版本

 引入到自己的pom中(类似的还有其他的依赖包):

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.toov5.tomcat</groupId>
  <artifactId>tomcat</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <dependencies>
        <!--Java语言操作tomcat -->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-core</artifactId>
            <version>8.5.16</version>
        </dependency>
        
        <!-- tomcat对jsp支持 -->
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-jasper</artifactId>
            <version>8.5.16</version>
        </dependency>
    </dependencies>    

  
</project>

servlet代码:

package com.toov5.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class IndexServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().print("successful congratulation ");
    }
}

 

 

然后用servlet创建Tomcat容器

package com.toov5.tomcat;

import org.apache.catalina.LifecycleException;
import org.apache.catalina.core.StandardContext;
import org.apache.catalina.startup.Tomcat;
import org.apache.catalina.startup.Tomcat.FixContextListener;

import com.toov5.servlet.IndexServlet;

//使用Java创建Tomcat容器
//tomcat 底层执行程序  最终执行servlet
//Springmvc底层使用servlet

public class Test {
       private static int PORT = 8080; //端口
       private static String CONTEX_PATH = "/toov5";  //项目访问名称
       private static String SERVLET_NAME="IndexServet";
       public static void main(String[] args) {
        Tomcat tomcatServer =  new Tomcat();
        tomcatServer.setPort(PORT);  //指定端口号
        //是否设置自动部署
        tomcatServer.getHost().setAutoDeploy(false);
        //创建上下文,拿到上下文后就可以设置整个访问地址了
        StandardContext standardContext = new StandardContext();
        standardContext.setPath(CONTEX_PATH); 
        //监听上下文
        standardContext.addLifecycleListener(new FixContextListener());
        standardContext.addLifecycleListener(new FixContextListener());
        // tomcat容器添加standardContext 添加整个context
        tomcatServer.getHost().addChild(standardContext);
        // 创建servlet   servlet的名字叫IndexServlet   
        tomcatServer.addServlet(CONTEX_PATH, SERVLET_NAME, new IndexServlet());
        // 添加servleturl映射
        standardContext.addServletMappingDecoded("/index", SERVLET_NAME);
        try {
            tomcatServer.start();
        } catch (LifecycleException e) {
            e.printStackTrace();
        }
        System.out.println("tomcat服务器启动成功!");
        //需要异步接受请求
            tomcatServer.getServer().await();    
    }  
     
       
      

}

这段代码等同于,

web.xml中的:

<servlet>
  <servlet-name>toov5</servlet-name>
   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
   <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring/springmvc.xml</param-value>
   </init-param>
</servlet>
<servlet-mapping>
 <servlet-name>toov5</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>

  

项目目录结构:

启动:

访问路径名字是这个:

 上下文:

 

访问之:

 

 小伙伴,有木有很好玩呀~

 下一步我们将加载 Springmvc 在这里

 

Spring Boot项目中修改内置Tomcat版本的原理、方法与实战指南 在Java Web开发领域,Servlet容器是承载Web应用运行的核心组件,它负责处理HTTP请求、管理会话以及执行Servlet和JSP。Tomcat作为一款开源、轻量且广泛使用的Servlet容器实现,其工作原理基于Java Servlet规范,通过连接器(Connector)处理网络I/O,并由引擎(Engine)和主机(Host)管理请求路由。在微服务与快速开发盛行的当下,嵌入式Servlet容器的技术价值凸显,它允许将Web服务器(如Tomcat)直接打包进应用,实现了应用的独立部署与简化运维, 阅读详情

相关推荐

Spring Boot教程之二十五: 使用 Tomcat 部署项目

Tomcat 是默认的 Spring Boot 服务器,它可以在同一个应用程序中管理多个应用程序,从而避免在单个应用程序中为每个应用程序进行多次设置。由于这是一个简单的例子,我们只需展示一下调用“geeks-web-services/hello”时显示的内容,Hello Geek,这是一个简单的问候消息,祝您有个美好的一天。在本文中,我们将创建一个简单的 Spring Boot 应用程序,其中我们将使用 Tomcat 服务器部署该应用程序。而且我们的 war 文件也部署在 tomcat 中。

潜洋的专栏 2062

SpringBoot 使用内嵌Tomcat 以及 Tomcat管理机制

Spring Boot 如何使用内嵌式的Tomcat和Jetty Spring的核心是一个ApplicationContext,它的抽象实现类AbstrtactApplicationContext实现了refresh方法,内部调用了onRefresh方法,我们可以通过重写onRefresh方法,来实现特定的Context的刷新逻辑,创建内嵌式的Web容器。并在方法内部通过getWebServer创...

qq_30163473的博客 2361

Robot Arm 机械臂源码解析

由于我们用的是步进电机,运动的时候是一步一步的,并不是平滑的,这里假设在一个平面上面,一个x步进电机,一个y步进电机。那么放大它们所走的轨迹就会是阶梯状的。而它们也只能沿着网格运动。相当于有了一个最小的分辨率,这个分辨率就是一步。如下图所示,如果x,y电机同时走就能走出45度的斜线。在三维空间里面运动也是如此,你应该可以想象的出来;首先,是updateActualPosition,用来时时更新此时的差补位置,得到的是一个路径与时间t的函数(其中路径的范围为0,1,时间范围为0,dist/v)...

爱吃炸鸡的小猪's blog 1万+

SpringBoot内嵌Tomcat原理

SpringBoot支持内嵌的tomcat的启动,tomcat何时内嵌,DispatchServlet又是什么时候添加到ServletContext里的

weixin_32629733的博客 764

【软件逆向学习记录】x64dbg调试器入门2:主调试窗口功能及字符串搜索功能介绍

在x64dbg中, ​​CPU视图 是调试过程中最核心的界面,通常被称为​​主调试窗口​​或​​调试视图​​,总体分为四个区域,代码区(反汇编),数据区(内存窗口),寄存器区和堆栈区,详细位置如下图:示例数据代码区最左侧为内存地址,第二块区域为程序代码值,原始程序代码经编译和汇编后变为二进制机器码存储在计算机中,调试器将其展示为易于阅读的十六进制,第三块区域是机器码反汇编后的汇编代码,最右侧为代码的注释窗口,有一些原始的注释,也可以自己添加注释PS:汇编和反汇编解释。

tusikong的博客 2923

qmc5883p芯片坐标系方向定义

问题 最近一个项目用到qmc5883p, 然而确定磁力计方向的时候发现datasheet上写的不是很清楚, 并且example中还有一个设置方向的一步, 于是测试了芯片坐标方向并记录了下来; 该芯片和qmc5883L方向并不一致; 结果 qmc5883P的datasheet给出来如下说明, Y为笔者添加的; 但是这个方向是按照datasheet的example设置的结果: //Define the sign for X Y and Z axis qmc5883p_write_reg(0x2

时有限 4119

总结:SpringBoot内嵌Tomcat原理

SpringBoot内嵌Tomcat原理

w2009211777的专栏 3499

详解ReID的各部分组成及Trick——基于FastReID

这一系列博客将基于京东开源的FastReID进行扩充,详细介绍了ReID的各个组成部分,一些有用的Trick,评价指标,常用数据集等,详细内容见下方的链接,总结不易,如有理解不正确之处,麻烦各位批评指正。 一、FastReID的中的baseline文件配置 二、Training strategy 三、Pre-processing 四、Backbone 五、Aggregation 六、Head 七、Loss 八、Distance Metric 九、Post-processing 十、Evaluation 十一

藏晖的博客 9165

手写简单版SpringMVC

手写简单版SpringMVC

qq_34874784的博客 315

一文讲透 .claude/ 文件夹:Claude Code 团队配置指南和最佳实践

本文系统梳理了ClaudeCode配置框架,旨在解决实际落地中的常见困惑。文章从五层作用域体系(组织策略、命令行参数、本地覆盖、项目级、用户级)切入,详细解析了CLAUDE.md、rules、skills、agents等核心组件的定位与配合关系。重点强调了"确定性规则"与"概率性建议"的分层设计:权限控制和安全边界应通过settings.json和hooks实现,而工作约定和编码规范适合放在CLAUDE.md。文中提供了可直接套用的最小配置方案,并总结了10大常见踩坑

978

混沌系统在图像加密中的应用(随机性测试之FIPS 140-2测试和SP800-22测试)

本节内容我们将学习混沌序列的随机性测试,那么前面讲了,混沌系统产生的随机序列,它的随机性到底好不好,除了看相图、分岔图、指数图以外,还有一个非常重要的指标,那就是FIPS 140-2测试和SP800-22测试。(1)保证密码学模块的安全性:密码学模块在加密和解密敏感信息时使用随机数生成器来增加对手动解密和猜测攻击的抵抗力。通过进行FIPS 140-2测试,可以验证密码学模块是否符合安全标准,确保其实施和设计的安全性,以有效地保护敏感信息。

weixin_42207434的博客 2085

Spring Boot 2.0中嵌入式Web容器(如Tomcat)对HTTP2的支持详解

Spring Boot应用往往作为服务发布,这里对HTTP2的支持,主要是对通过嵌入式Web容器支持HTTP2。 1. 在最新的Spring Boot 2.0.3.RELEASE中,集成的三种嵌入式Web容器及其版本如下: Tomcat 8.5.31  (Servlet 3.1) Undertow 1.4.25.Final(Servlet 3.1) Jetty 9.4.11.v201806...

成长的足迹 9850

IC设计新手必看:如何正确使用去耦电容(decap)避免电源噪声?

本文深入探讨了IC设计中去耦电容(decap)的应用技巧,从核心原理到布局实现,帮助新手工程师有效抑制电源噪声。文章详细解析了MIM、MOM等电容类型的特性与选择策略,并提供了先进的布局技巧和验证方法,特别适用于28nm以下先进工艺的电路设计挑战。

weixin_30555125的博客 114

springboot去掉内置tomcat使用外部tomcat容器

springboot去掉内置tomcat使用外部tomcat容器 最近springboot项目想去掉内置的tomcat,进而使用外置的tomcat容器进行开发和部署,这边我分享下。 (1)启动入口部分Application public class XXXXXXApplication extends SpringBootServletInitializer { //原来的入口注掉 ...

u013437446的博客 7180

华为昇腾310P3+deepseek蒸馏版性能调优:FP16精度优化全记录

本文详细介绍了在华为昇腾310P3硬件环境下优化DeepSeek蒸馏版模型FP16精度的关键技术路径。通过分层量化策略、内存分配优化和并行计算配置,显著提升模型推理性能,实现83%的并发处理能力提升,同时保持98.7%的原始模型准确率。

weixin_29074409的博客 348

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Spring Boot 内置 Web 容器教程:从入门到容器选择指南

容器适用场景优势Spring Boot 4 支持情况​​Tomcat​​传统 Web 应用、企业级应用、需要稳定性和广泛社区支持成熟稳定、功能完整、文档丰富、安全更新及时✅ 完全支持 (推荐)​​Jetty​​微服务、云原生应用、资源受限环境、需要快速启动启动快、内存占用低、长连接支持好✅ 完全支持 (推荐替代方案)​​Undertow​​高并发 API、需要极致性能的微服务高吞吐量、低内存占用、异步 I/O 性能优异❌ ​​Spring Boot 4 已移除支持​​​。

Rysxt_的博客 1039

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Spring Boot内嵌Tomcat原理

基于Spring Boot 2.x,详细进行了Spring Boot项目的启动源码中的内嵌Tomcat的原理分析

终生学习践行者 3936

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

使用外部容器运行spring-boot项目:不使用spring-boot内置容器让spring-boot项目运行在外部tomcat容器中

前言:本项目基于maven构建 spring-boot项目可以快速构建web应用,其内置的tomcat容器也十分方便我们的测试运行; spring-boot项目需要部署在外部容器中的时候,spring-boot导出的war包无法再外部容器(tomcat)中运行或运行报错,本章就是详细讲解如何解决这个问题 1、pom.xml一览 &lt;project xmlns="http://maven....

qq_34258948的博客 907

Tomcat 是什么?有什么功能和作用?为什么启动 Spring 或 Spring Boot 项目需要 Tomcat?

本文的内容是博主学习并记录关于 Tomcat 的基本知识,介绍了 Tomcat 为什么是一个 Web 应用服务器,为什么是 Servlet 容器,同时总结了 Tomcat 的一些功能原理,并详细介绍了 Tomcat 在 Spring 和SpringBoot 项目中的使用原理。本文不涉及安装和使用说明。

青灯文案的博客 1万+

Spring Boot内嵌的Tomcat的定制和优化

SpringBoot默认集成了tomcat、jetty、undertow 三种容器,本文讲解内置Tomcat的定制和优化 修改配置文件application.properties 在org.springframework.boot.autoconfigure.web.ServerProperties类中有Server的相关配置,源码如下: @ConfigurationProperties( ...

飞月程序人生 3348

Spring Boot系列之修改内置Tomcat版本

背景 在 spring boot 出来之前,或者没有使用 spring boot 时,Java EE 开发时如果选择 tomcat servlet,需要自己指定 tomcat 版本;此处没有考虑那种直接把打包的 war 直接扔到本地安装的任意版本的 tomcat,然后启动外置 tomcat 的情况。 使用 spring boot (内置 tomcat)时,一般情况下,完全没有必要去修改 tomcat 的版本,就算是生产环境使用的 spring boot 内置版本,也是最好使用 spring boot 的内置

drhrht的博客 1562

SpringBoot内置容器替换指南

在之前传统的Spring应用中我们都会采用外部容器来运行应用,但是在Spring Boot 中与传统应用的不同就说在Spring Boot应用中不需要额外的应用服务器也可以运行。这是是因为在Spring Boot应用中内置了一个内部容器,所以我们在项目启动的时候只需要启动Jar包即可。那么在Spring Boot中自带了那些内置的容器呢?并且如何使用这些内置容器呢?

2501_93873871的博客 1008

Spring Boot 内置容器选型(Tomcat/Undertow)

文章目录Spring Boot 容器选型(Tomcat/Undertow)TomcatUndertow参考 Spring Boot 容器选型(Tomcat/Undertow) spring boot内置容器性能比较(Jetty、Tomcat、Undertow) 参考URL: https://blog.csdn.net/syx1065001748/article/details/98883727 通过测试发现,在高并发系统中,Tomcat相对来说比较弱。在相同的机器配置下,模拟相等的请求数,Undertow在

西京刀客 3435
上一篇: Spring Boot2.0之纯手写框架
下一篇: Spring Boot2.0之注解方式启动Springmvc
Art&Code
博客等级 码龄7年 77粉丝 554原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值