news 2026/6/10 15:32:40

Tomcat由浅入深:从零搭建Spring Boot内嵌Tomcat应用(附避坑指南)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Tomcat由浅入深:从零搭建Spring Boot内嵌Tomcat应用(附避坑指南)

视频看了几百小时还迷糊?关注我,几分钟让你秒懂!


一、为什么我们要学 Tomcat?

在 Java Web 开发中,Tomcat 是最常用、最轻量的 Servlet 容器。它不仅能独立运行 Web 应用,还能被Spring Boot 内嵌使用,省去部署 WAR 包的繁琐步骤。

📌 真实需求场景

假设你正在开发一个后台管理系统,需要提供 RESTful 接口供前端调用。你不想花时间配置 Nginx + 外部 Tomcat,只想“写完代码直接运行”,那么 Spring Boot + 内嵌 Tomcat 就是你的最佳选择!


二、Tomcat 是什么?能干啥?

  • 本质:一个开源的Java HTTP 服务器 + Servlet 容器
  • 作用
    • 接收 HTTP 请求(如GET /api/user
    • 调用对应的 Java 类(Servlet 或 Controller)
    • 返回响应(JSON、HTML 等)
  • Spring Boot 默认内嵌 Tomcat,启动时自动启动 Web 服务

✅ 优势:无需单独安装 Tomcat,打包成 JAR 直接运行!


三、动手实战:用 Spring Boot 快速跑起一个内嵌 Tomcat 服务

1️⃣ 创建 Spring Boot 项目(Maven)

<!-- pom.xml --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.2.0</version> </parent> <dependencies> <!-- Web Starter 自动引入内嵌 Tomcat --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>

💡 注意:spring-boot-starter-web默认依赖tomcat-embed-core,无需额外配置!


2️⃣ 编写一个简单 Controller

// UserController.java package com.example.demo.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class UserController { @GetMapping("/hello") public String sayHello() { return "Hello from embedded Tomcat!"; } }

3️⃣ 启动主类

// DemoApplication.java package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }

4️⃣ 运行 & 测试

终端执行:

mvn spring-boot:run

浏览器访问:
👉 http://localhost:8080/hello

✅ 输出:Hello from embedded Tomcat!

🎉 恭喜!你已经成功运行了一个基于内嵌 Tomcat 的 Spring Boot 应用!


四、自定义 Tomcat 配置(端口、线程数等)

虽然默认配置够用,但生产环境常需调整。

✅ 正确做法:通过application.yml配置

# application.yml server: port: 9090 # 修改端口 tomcat: max-threads: 200 # 最大工作线程数 min-spare-threads: 10 # 最小空闲线程 connection-timeout: 5000 # 连接超时(毫秒)

🔍 原理:Spring Boot 会自动将这些配置注入到内嵌的 Tomcat 实例中。


五、反例警告 ❌ —— 新手常犯的错误

❌ 反例1:手动 new Tomcat 实例(完全没必要!)

// 错误示范!不要这样做! public class BadExample { public static void main(String[] args) throws Exception { Tomcat tomcat = new Tomcat(); tomcat.setPort(8080); // ... 手动添加 Context、Servlet... tomcat.start(); tomcat.getServer().await(); } }

⚠️ 问题:绕过 Spring Boot 自动配置,失去 AOP、事务、Bean 管理等核心能力!


❌ 反例2:在webapps目录放文件(内嵌模式不生效!)

很多教程教你在外部 Tomcat 的webapps放 WAR 包,但在Spring Boot 内嵌模式下,这个目录根本不存在

✅ 正确做法:所有资源通过 Spring 的@RestControllerstatic/目录提供。


❌ 反例3:试图修改server.xml(内嵌 Tomcat 没有这个文件!)

内嵌 Tomcat 的配置全部通过 Java 或 YAML 完成,没有conf/server.xml

若真需深度定制(如加 Valve),应通过TomcatServletWebServerFactory编程式配置。


六、高级技巧:如何替换内嵌 Tomcat?

虽然 Tomcat 是默认容器,但你也可以换成 Jetty 或 Undertow:

<!-- 排除 Tomcat,引入 Jetty --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency>

💡 适用场景:微服务追求极致启动速度(Jetty 更轻量)


七、注意事项总结 ⚠️

事项说明
不要混用外部 Tomcat 和内嵌 TomcatSpring Boot 默认内嵌,除非明确要打 WAR 部署
静态资源放src/main/resources/static/不要试图模仿传统webapps结构
配置优先用application.yml而非硬编码或 XML
生产环境务必调优线程池默认max-threads=200,高并发需评估
日志看logs/spring.log或控制台内嵌 Tomcat 不生成catalina.out

八、结语

Tomcat 并不神秘——在 Spring Boot 时代,它只是一个“藏在背后的引擎”。你只需专注业务逻辑,剩下的交给框架!

视频看了几百小时还迷糊?关注我,几分钟让你秒懂!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 0:13:34

AI骨骼检测在教育领域的应用:体育课动作规范检测系统

AI骨骼检测在教育领域的应用&#xff1a;体育课动作规范检测系统 1. 技术背景与教育痛点 在传统体育教学中&#xff0c;教师往往需要通过肉眼观察学生的动作是否标准&#xff0c;例如广播体操、篮球投篮或田径起跑姿势。这种方式存在明显的主观性和局限性&#xff1a;教师难以…

作者头像 李华
网站建设 2026/6/10 6:09:05

AI手势识别如何实现毫秒级响应?极速推理实战解析

AI手势识别如何实现毫秒级响应&#xff1f;极速推理实战解析 1. 引言&#xff1a;AI 手势识别与追踪的现实挑战 随着人机交互技术的不断演进&#xff0c;AI手势识别正逐步从实验室走向消费级应用。无论是智能车载系统、AR/VR设备&#xff0c;还是智能家居控制&#xff0c;用户…

作者头像 李华
网站建设 2026/6/10 13:35:35

AI人脸隐私卫士安全机制解析:数据零上传保障方案

AI人脸隐私卫士安全机制解析&#xff1a;数据零上传保障方案 1. 技术背景与隐私挑战 在数字化时代&#xff0c;图像和视频内容的传播空前频繁。无论是社交媒体分享、企业宣传素材&#xff0c;还是公共监控系统&#xff0c;人脸信息作为最敏感的生物特征之一&#xff0c;正面临…

作者头像 李华
网站建设 2026/6/10 12:59:22

HunyuanVideo-Foley成本控制:高性价比GPU选型建议

HunyuanVideo-Foley成本控制&#xff1a;高性价比GPU选型建议 随着AIGC技术在音视频生成领域的深入应用&#xff0c;腾讯混元于2025年8月28日宣布开源其端到端视频音效生成模型——HunyuanVideo-Foley。该模型实现了从视频画面与文本描述到高质量音效的自动映射&#xff0c;用…

作者头像 李华
网站建设 2026/6/9 17:18:00

毕业设计SpringBoot的高校教师教研信息填报系统

博主介绍&#xff1a;✌ 专注于Java,python,✌关注✌私信我✌具体的问题&#xff0c;我会尽力帮助你。一、研究目的本研究旨在设计并实现一个基于SpringBoot的高校教师教研信息填报系统&#xff0c;以提升高校教师教研工作的信息化管理水平。具体研究目的如下&#xff1a;提高教…

作者头像 李华
网站建设 2026/6/10 12:59:57

开箱即用!Qwen3-4B-Instruct-2507一键部署方案

开箱即用&#xff01;Qwen3-4B-Instruct-2507一键部署方案 随着大模型在推理、编程、多语言理解等任务中的广泛应用&#xff0c;高效、稳定且易于部署的模型版本成为开发者关注的核心。通义千问团队最新推出的 Qwen3-4B-Instruct-2507 模型&#xff0c;在通用能力、长上下文支…

作者头像 李华