Spring Servlet 容器是什么、干什么用?

Servlet 是JavaEE的一套Web规范接口

Servlet容器就是实现这套规范的服务器软件,最常见:Tomcat、Jetty、Undertow。

通俗大白话

浏览器发HTTP请求(http://xxx/api/xxx),请求先到达 Servlet容器,容器解析http报文,再把请求交给Spring框架处理;Spring处理完,结果再还给Servlet容器,容器组装成HTTP响应返回浏览器。

Servlet容器 = Web服务器,负责网络层IO、HTTP协议解析;Spring负责业务、Controller、IOC。

SpringBoot两种模式

1️⃣ 内嵌Servlet容器(最常用,我们平时开发)

Spring‑boot‑starter‑web 默认自带 内嵌Tomcat

你打jar包直接java -jar就能跑,不用单独装Tomcat软件,就是内嵌Servlet容器。 可选替换:Jetty、Undertow,替换starter即可。

2️⃣ 外部Servlet容器(传统war包部署)

把项目打成war,放到外部独立Tomcat服务器里面运行。此时Tomcat就是外部Servlet容器。


Servlet容器主要职责(核心干什么)

  1. 监听端口,接收TCP网络请求(比如8080端口) 接收浏览器/客户端发过来的http请求,处理Socket网络通信。
  2. 解析HTTP协议 把原始http字节流,解析成 HttpServletRequest 对象;把Spring返回的数据封装成 HttpServletResponse。 Spring MVC 根本不处理TCP、HTTP报文,这活全部交给Servlet容器。
  3. 管理Servlet、Filter、Listener生命周期 DispatcherServlet本质就是一个Servlet! SpringMVC的入口 DispatcherServlet 注册到Servlet容器,容器收到请求,转发给 DispatcherServlet,再进入Spring的MVC流程。
javascript 复制代码
浏览器HTTP请求
    ↓
Servlet容器(Tomcat) 解析http、socket
    ↓ 转发请求
DispatcherServlet(SpringMVC的Servlet)
    ↓
Spring:HandlerMapping → Controller → Service
    ↓ 返回结果
DispatcherServlet
    ↓
Servlet容器组装http响应报文
    ↓
返回浏览器
  1. 线程池管理:容器开启工作线程,每个http请求分配一条线程执行。
  2. 处理异常、编码、session管理、文件上传基础能力。

✔分工记忆: Servlet容器:管网络、HTTP协议、Socket; Spring(MVC):管路由、Controller、业务逻辑、IOC容器。

面试常问:Spring IOC容器 和 Servlet容器区别

很多人搞混两个容器:

  1. Spring IOC容器(Spring容器) :管理所有Bean:Controller、Service、Repository,做依赖注入。属于业务对象容器
  2. Servlet容器(Tomcat/Jetty) :web服务器,处理http网络请求。属于web运行环境容器

SpringBoot启动的时候:先启动Servlet容器(Tomcat),再启动Spring IOC容器;把DispatcherServlet注册进Tomcat,打通两者。

补充关键点

  1. SpringBoot3 web场景默认就是内嵌Tomcat作为Servlet容器
  2. 可以排除tomcat,换成 undertow/jetty作为Servlet容器。
html 复制代码
<!-- 排除tomcat,使用undertow示例 -->
<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‑undertow</artifactId>
</dependency>
  1. 非web项目,没有Servlet容器,IOC容器独立运行。

极简总结

Servlet容器(Tomcat)是http服务器,负责接收、解析网络请求; 它把请求转发给SpringMVC的DispatcherServlet,之后交给Spring IOC容器里面写的Controller、Service执行业务。

SpringBoot Web 完整请求链路

  1. 客户端浏览器发送 HTTP 请求,到达Tomcat (Servlet 容器) 的 8080 端口;
  2. Tomcat Connector 接收 socket,解析 http 协议,封装 HttpServletRequestHttpServletResponse 对象;
  3. Tomcat 把请求转发给注册好的 DispatcherServlet(SpringMVC 唯一 Servlet)
  4. DispatcherServlet 接收请求,调用 HandlerMapping,根据 url 匹配到对应的 Controller 方法;
  5. 通过 HandlerAdapter 适配器执行 Controller 方法;
  6. Controller 调用 Service、Dao 完成业务逻辑;
  7. 方法返回结果,如果是@RestController,直接封装 ResponseBody;普通页面走 ViewResolver 视图解析;
  8. 结果交还给 DispatcherServlet;
  9. DispatcherServlet 把结果写入HttpServletResponse
  10. Tomcat (Servlet 容器) 组装完整 HTTP 响应报文,通过 Socket 返回浏览器。
相关推荐
2601_962073812 天前
Spring全面详解(基础版)
java·后端·spring
凤山老林2 天前
Spring Boot 集成 Spring Vault:集中式密钥管理与动态凭证轮换
spring boot·后端·spring·vault·集中式秘钥管理
catino2 天前
spring-Bean
java·后端·spring
AIGC小尼2 天前
2026 最新实战|SpringCloud 微服务整合 SpringAI 完整落地教程(RAG 知识库 + 限流降级 + 跨服务调用)
spring·spring cloud·微服务
2601_962055812 天前
Spring全部注解
java·后端·spring
Supersist2 天前
【Spring】 BeanFactory 和 ApplicationContext 体系结构
后端·spring
Sam_Deep_Thinking2 天前
聊聊开闭原则,以及它在Spring里的样子
java·后端·spring·程序员·开闭原则
SQL-First布道者2 天前
⚡ Spring JDBC 完整体系 · 第 5 讲 · Spring Boot Starter JDBC
java·spring boot·spring·mybatis·spring jdbc
木井巳2 天前
【JavaEE】Spring Web MVC 入门
java·spring boot·spring·servlet·java-ee