Java Web 开发的基础核心仍然围绕 Servlet 技术展开,尤其在理解底层原理、面试、以及需要手写/维护老项目时,Servlet 是绕不过去的基石。即使现在主流项目几乎都用 Spring Boot + Spring MVC,掌握 Servlet 仍然是理解整个 Java Web 技术脉络的关键。
下面给你一个清晰、实用的学习路径与核心知识点总结(2025-2026 视角,兼容 Servlet 3.0/4.0/5.0+ 特性):
1. Java Web 开发整体技术栈定位(2026视角)
| 层级 | 主流技术栈(2025-2026) | 学习 Servlet 的意义 | 建议掌握程度 |
|---|---|---|---|
| 表现层 | Vue3 / React / 前后端分离 | 理解 HTTP 请求如何到达后端 | 了解 |
| 控制层 | Spring MVC / Spring Boot | Servlet 是 Spring MVC 的底层实现 | 精通 |
| Web 核心 | Servlet / Filter / Listener | Java Web 的真正基石 | 非常熟练 |
| 视图层 | Thymeleaf / 前端框架接管 | 早期用 JSP,现在基本不用 | 了解即可 |
| 服务器 | Tomcat 10+ / Undertow / Jetty | Servlet 容器 | 熟练配置 |
2. Servlet 核心知识点清单(强烈建议按这个顺序掌握)
第一阶段:快速入门(1-3天)
- 什么是 Servlet?(Server + Applet → 运行在服务器端的 Java 小程序)
- Servlet 容器(Tomcat/Jetty/Undertow)的作用
- 第一个 Servlet 程序(两种写法): 方式1:传统 web.xml 配置(理解原理必备)
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/html;charset=UTF-8");
PrintWriter out = resp.getWriter();
out.write("<h1>你好,Servlet!当前时间:" + new Date() + "</h1>");
}
}
<!-- web.xml -->
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.example.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
方式2:Servlet 3.0+ 注解方式(现代主流)
@WebServlet(urlPatterns = "/hello", loadOnStartup = 1)
public class HelloServlet extends HttpServlet {
// 同上
}
- 必会:doGet / doPost / service 方法区别
- 请求乱码 & 响应乱码的正确处理方式(2025年仍然有人踩坑)
第二阶段:核心技术深入(7-14天)
| 核心技术 | 重点掌握内容 | 面试/实战高频考点 |
|---|---|---|
| Servlet 生命周期 | init → service → destroy(单例、多线程) | 为什么是单例?线程安全怎么保证? |
| HttpServletRequest | 获取参数、请求头、Cookie、Session、转发、重定向、获取真实IP | getParameter vs getParameterValues vs getInputStream |
| HttpServletResponse | 设置状态码、响应头、重定向、输出流(字节/字符)、缓存控制 | 如何禁止浏览器缓存?如何做文件下载? |
| 请求转发 vs 重定向 | forward vs sendRedirect(地址栏是否变化、是否共享request域) | 经典面试题:登录成功后用哪个? |
| 会话技术 | Cookie vs Session(JSESSIONID) | Session 失效机制、分布式 Session 怎么搞? |
| Filter | 拦截器链、FilterChain.doFilter()、注解配置、执行顺序 | 实现统一编码、权限控制、日志记录 |
| Listener | ServletContextListener、HttpSessionListener、ServletRequestListener | 实现在线人数统计、应用启动时加载配置 |
| 文件上传下载 | commons-fileupload(老项目) / Servlet 3.0 自带 Part 接口 | 多文件上传、进度条、前端如何配合 |
| 异步 Servlet | AsyncContext(Servlet 3.0+)、@WebServlet(asyncSupported = true) | 长连接、Server Push、聊天室实现 |
第三阶段:高级 & 架构认知(理解原理)
- Servlet 容器如何加载和调用 Servlet?(Tomcat 源码角度:Engine → Host → Context → Wrapper)
- Servlet 3.1 非阻塞 IO(ServletInputStream、ServletOutputStream 的 isReady())
- Servlet 4.0 HTTP/2 支持(Server Push 已较少使用)
- Servlet 5.0(Jakarta EE 9+)命名空间变更(javax → jakarta)
- Filter、Listener、Servlet 的加载顺序与执行顺序规则
3. 推荐学习资料(2025-2026 仍然有效)
- 最推荐入门到中级:B站/抖音搜索 “尚硅谷 Servlet” 或 “动力节点 Servlet” (视频仍然是最高效)
- 最经典书籍:《Servlet与JSP核心编程》(第2版)虽然老,但原理部分不过时
- 现代写法参考:廖雪峰官网 Java Web 教程(仍然维护得不错)
- 实战小项目建议(按难度递增):
- 简易登录 + 验证码 + 记住我(Cookie)
- 图书管理系统(增删改查 + 分页 + 条件查询)
- 文件上传下载系统 + 在线预览
- 简易聊天室(异步 Servlet + JSON)
4. 一句话总结学习建议
“先用最原始的方式把 Servlet 跑通,再去理解 Spring MVC 为什么那么设计,最后再去感慨 Spring Boot 帮我们省了多少事。”
你现在是刚入门、准备面试、还是已经在维护老项目?
告诉我你的具体情况,我可以给你更聚焦的下一阶段学习建议或代码示例。