Servlet 容器与过滤器 超详细讲解
目录
一、Servlet 容器(Servlet Container)
1. 是什么?
2. 核心作用(必须掌握)
3. Servlet 生命周期(容器全权控制)
4. 工作流程(HTTP 请求完整链路)
5. 总结一句话
二、过滤器(Filter)
1. 是什么?
2. 核心特点
3. 过滤器能做什么?(高频场景)
4. 过滤器工作原理
5. 过滤器生命周期
三、实战:写一个过滤器(最常用的 2 个案例)
环境
案例 1:统一编码过滤器(解决中文乱码)
案例 2:登录校验过滤器(未登录禁止访问)
四、Servlet 容器 + 过滤器 完整工作流程(终极总结图)
五、核心区别与关系(一句话秒懂)
总结
本文会用通俗易懂、层层递进的方式,把这两个 Java Web 核心概念讲透,从是什么、做什么、工作原理、使用场景到实战代码全覆盖,新手也能完全看懂。
一、Servlet 容器(Servlet Container)
1. 是什么?
Servlet 容器 = Web 服务器 + Servlet 运行环境它是一个专门负责管理、运行、销毁 Servlet的服务器程序,是 Java Web 程序的运行载体。
常见的 Servlet 容器:
- Tomcat(最主流、最常用)
- Jetty
- Undertow
- WebLogic、WebSphere(企业级)
简单理解:没有 Servlet 容器,Servlet 代码就无法运行,就像手机没有操作系统,APP 无法运行一样。
2. 核心作用(必须掌握)
Servlet 容器干 4 件最关键的事:
- 接收 HTTP 请求浏览器发来请求,容器先接住,解析请求头、请求参数、Cookie 等。
- 找到对应的 Servlet根据 URL 匹配,找到你写的 Servlet 类。
- 管理 Servlet 生命周期负责创建、初始化、调用、销毁 Servlet(全程不用你手动 new 对象)。
- 返回 HTTP 响应把 Servlet 处理完的结果封装成 HTTP 响应,返回给浏览器。
3. Servlet 生命周期(容器全权控制)
容器严格按照这个流程管理 Servlet:
- 加载:第一次请求时加载类
- 实例化:容器创建 Servlet 对象(单例)
- 初始化:调用
init()方法(只执行 1 次) - 服务:调用
service()→ 再分发给doGet()/doPost()(每次请求都执行) - 销毁:服务器关闭时调用
destroy()
4. 工作流程(HTTP 请求完整链路)
浏览器 → HTTP 请求 → Servlet 容器 → 解析请求 → 匹配 Servlet → 执行 Servlet 业务代码 → 生成响应 → 容器返回 HTTP 响应 → 浏览器5. 总结一句话
Servlet 容器就是 Servlet 的 “管家”+“服务器”,负责接收请求、调度 Servlet、返回响应。
二、过滤器(Filter)
1. 是什么?
Filter = 请求 / 响应的 “拦截器”“门卫”“中间件”它可以在请求到达 Servlet 之前和响应返回浏览器之前做统一处理。
