Java Web 开发的基础核心仍然围绕 B/S 架构、HTTP 协议、Web 服务器(如 Tomcat)和 Servlet 技术展开。尽管 2025–2026 年主流企业项目几乎全部使用 Spring Boot + Spring MVC(其底层仍然是 Servlet),但彻底理解 Servlet 是真正读懂 Spring Web、掌握请求处理流程、调试底层问题、应对面试的核心前提。
下面给你一个清晰、实用的学习路径和核心知识点总结(基于当前主流用法 + 面试/生产常见考点)。
一、Java Web 基础必须掌握的概念(前置知识)
| 顺序 | 内容 | 建议掌握程度 | 为什么重要 |
|---|---|---|---|
| 1 | B/S 与 C/S 架构对比 | 理解 | 明白 Web 应用的基本交互模型 |
| 2 | HTTP/1.1、HTTP/2、HTTP/3 协议 | 重点掌握请求/响应结构、常见状态码、请求方法、请求头/响应头 | 所有 Web 交互的基础 |
| 3 | 常见的 Web 服务器 | Tomcat(主流)、Jetty、Undertow | Servlet 必须运行在容器中 |
| 4 | 静态资源 vs 动态资源 | 理解区别 | Servlet 主要负责动态内容 |
| 5 | Web 应用目录结构(Maven 标准) | 必须熟练 | src/main/webapp、WEB-INF、classes、lib 等 |
二、Servlet 核心技术(最重要部分)
Servlet 是 Java Web 的基石,几乎所有现代 Java Web 框架(Spring MVC、Jakarta EE 等)的底层都是 Servlet。
1. Servlet 是什么?生命周期是怎样的?
Servlet(Server Applet)是用 Java 写的运行在服务器端的程序,主要任务:
接收 HTTP 请求 → 处理业务 → 生成响应(HTML/JSON/文件等)
生命周期(面试必考,Tomcat 管理):
- 创建(只执行一次)
- 构造方法
- init() 方法
- 服务(每次请求都执行)
- service() → 根据方法分发到 doGet / doPost / doPut 等
- 销毁(容器关闭时执行一次)
- destroy()
创建时机(web.xml 或注解):
- load-on-startup > 0:容器启动时创建(数字越小越先创建)
- load-on-startup 未配置或 ≤0:第一次访问时创建
2. Servlet 3.0+ 主流写法(强烈推荐,摒弃 web.xml)
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(urlPatterns = {"/hello", "/hi"}) // 支持多个路径
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
// 1. 设置响应类型(非常重要!)
resp.setContentType("text/html;charset=UTF-8");
// 2. 写出内容(推荐使用 PrintWriter)
resp.getWriter().write("<h1>你好,Java Web!当前时间:" + new java.util.Date() + "</h1>");
}
}
3. 核心对象(每天都要用)
| 对象 | 主要作用 | 常用方法(高频) | 作用域/生命周期 |
|---|---|---|---|
| HttpServletRequest | 获得请求相关信息 | getParameter、getParameterMap、getHeader、getRequestURI、getMethod、getSession() | 一次请求 |
| HttpServletResponse | 控制响应内容、状态码、头信息 | setContentType、getWriter、sendRedirect、setStatus、addCookie | 一次请求 |
| HttpSession | 会话跟踪(登录状态、购物车) | getAttribute、setAttribute、invalidate() | 一次会话(默认30分钟) |
| ServletContext | 整个Web应用全局数据、域对象 | getAttribute、setAttribute、getRealPath() | 整个应用生命周期 |
| RequestDispatcher | 服务器端转发(forward) | forward() | — |
4. 重要特性(生产 & 面试高频)
- 请求转发 vs 重定向(区别必考)
| 特性 | forward(转发) | redirect(重定向) |
|---|---|---|
| 地址栏变化 | 不变 | 变化 |
| 请求次数 | 1次 | 2次(浏览器再发一次) |
| 是否共享request | 是 | 否 |
| 能转发的位置 | WEB-INF下也能 | 不能访问WEB-INF |
| 典型场景 | 登录校验、数据准备后跳页面 | 登录成功后跳转主页、PRG模式 |
- 中文乱码(最常见bug) GET 请求:Tomcat 8+ 默认 UTF-8,通常无需处理
POST 请求:必须在获取参数前设置
req.setCharacterEncoding("UTF-8"); // 只对 POST 有效
- 文件上传(Servlet 3.0+ 原生支持)
@MultipartConfig
@WebServlet("/upload")
public class UploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Part filePart = req.getPart("file"); // name="file"
String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString();
filePart.write("/uploads/" + fileName);
}
}
- 过滤器 Filter(权限控制、日志、编码统一处理)
- 监听器 Listener(ServletContextListener、HttpSessionListener 最常用)
5. 推荐学习顺序(2026 年实用路线)
- 环境搭建(IDEA + Tomcat 10.x / 11.x + Servlet 6.0 / Jakarta EE 9+)
- Hello Servlet(注解方式)
- Request & Response 完整使用(参数、中文、请求转发、重定向)
- 会话管理(Cookie + Session)
- 过滤器 Filter(统一编码、登录拦截)
- 文件上传下载
- 手写简单 MVC(Servlet + JSP / Servlet + JSON)
- 对比 Spring MVC 底层实现(DispatcherServlet 其实是一个超级 Servlet)
最后建议
- 短期目标(1–3 周):彻底搞懂 Servlet + Tomcat + HTTP,能手写登录、注册、文件上传模块
- 长期目标:把 Servlet 当作“底层协议”,真正理解 Spring MVC / Spring Boot Web 的每一行源码为什么那么写
你现在是刚入门、准备面试、还是已经在项目中遇到 Servlet 相关问题?可以告诉我你的具体情况,我可以给你更针对性的代码案例或重点讲解某个难点。