和田地区网站建设_网站建设公司_加载速度优化_seo优化
2026/1/13 16:02:44 网站建设 项目流程

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


一、为什么我们要学 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 时代,它只是一个“藏在背后的引擎”。你只需专注业务逻辑,剩下的交给框架!

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询