Servlet 是 JavaEE 规范中用于处理 Web 请求的核心组件,它本质是 Java 编写的服务器端程序,负责 接收客户端 请求、 处理业务逻辑并 返回响应。以下是其核心概念和工作原理:
1. 核心概念
- Servlet 规范:由 JavaEE 定义(如 javax.servlet 包),提供统一接口(如 HttpServlet)。
- Servlet 容器:如 Tomcat、Jetty,负责加载和管理 Servlet 的生命周期。
- 请求处理流程:
客户端请求 → 容器接收 → 路由到对应 Servlet → 执行 service() 方法 → 返回响应
2. 核心接口与类
JDK中是没有的,需要去引servlet依赖包
- Servlet 接口:所有 Servlet 必须实现,定义生命周期方法(init()、service()、destroy())。
- HttpServlet 类:常用的抽象类,简化 HTTP 请求处理(如 doGet()、doPost())。
- ServletContext:代表应用上下文,存储全局配置。
- HttpServletRequest / HttpServletResponse:封装请求和响应数据。
3. 工作原理
容器启动:加载并初始化 Servlet。
请求到达:容器将请求封装为 HttpServletRequest 对象。
路由匹配:根据 URL 映射到具体 Servlet。
执行逻辑:调用 service() 方法(或 doGet()/doPost())。
返回响应:通过 HttpServletResponse 设置内容、状态码等。
4. 生命周期
实例化:容器启动时或首次请求时创建 Servlet 实例。
初始化:调用 init(ServletConfig) 方法。
服务请求:每次请求调用 service() 方法。
销毁:容器关闭时调用 destroy() 方法。
5. 与现代框架的关系
- Spring MVC:基于 Servlet 构建,通过 DispatcherServlet 统一处理请求。
- Spring Boot:内嵌 Servlet 容器(如 Tomcat),自动配置 DispatcherServlet。
替代方案:Reactive 编程(如 WebFlux)基于 Netty,不依赖 Servlet 规范。
6. 优缺点
- 优点
跨平台、可移植
线程安全(需开发者控制)
与 JavaEE 生态无缝集成 - 缺点
原生 API 繁琐(需手动处理请求参数、编码等)
学习曲线较陡
不适合高并发场景(依赖线程池)
7. 常见应用场景
处理表单提交
REST API 接口
会话管理(如 Session、Cookie)
文件上传下载
过滤器(Filter)和监听器(Listener)
Servlet 是 Java Web 开发的基础,尽管现代框架(如 Spring Boot)隐藏了大部分细节,但理解其原理有助于排查问题和优化性能。
声明:本文仅供自己学习使用