Servlet 概述
简单来说,Servlet 就是跑在服务器上的 Java 程序,充当客户端(通常是浏览器)和后端逻辑之间的中间层。它的主要职责是扩展服务器功能、处理 HTTP 请求并生成响应。
为什么需要 Servlet?
相比静态 HTML,Servlet 能根据参数或数据库结果动态生成内容。它驻留内存,处理速度快,且具备平台独立性。作为 JSP、Spring MVC 等框架的基石,它的功能非常强大。
Servlet 与 CGI 的比较
| 特性 | CGI | Servlet |
|---|---|---|
| 进程模型 | 每个请求创建新进程 | 多线程处理(轻量级) |
| 性能 | 启动慢,资源消耗大 | 启动快,资源消耗小 |
| 平台 | 依赖语言/平台 | 基于 Java,跨平台 |
| 持久性 | 无 | 驻留内存,可保持状态 |
Servlet 在 Web 应用中的位置
浏览器 (HTTP Request) -> Web Server (Tomcat, Jetty) -> Servlet Container -> Servlet | Servlet (HTTP Response) <- Servlet Container <- Web Server <- 浏览器 (HTTP Response)
- Web 服务器: 处理网络连接。
- Servlet 容器: 管理生命周期,常见如 Tomcat、Jetty。
- Servlet: 业务逻辑单元。
Servlet API 核心
Servlet API 主要由两个包组成,Jakarta EE 9+ 后包名从 javax.servlet 迁移至 jakarta.servlet。
javax.servlet / jakarta.servlet 包
包含协议无关的核心接口,如 Servlet(生命周期)、ServletContext(应用范围共享)、ServletRequest 等。
javax.servlet.http / jakarta.servlet.http 包
提供 HTTP 特有接口,如 HttpServlet、HttpServletRequest、HttpServletResponse 和 HttpSession。
Servlet 生命周期
生命周期由容器管理,包含三个关键方法:
init(ServletConfig config)
实例创建后、首次请求前调用一次。用于一次性初始化,如读取配置或建立连接池。注意不要在此处直接创建数据库连接,建议使用连接池管理。


