Servlet 自学路线图
基础准备与环境搭建
在开始学习 Servlet 之前,你需要具备以下基础知识和工具:
-
Java 基础:

- 熟练掌握 Java SE,特别是面向对象编程(类、对象、继承、多态)。
- 了解异常处理、集合框架(
List,Map等)、I/O 流。 - 了解 Java Web 应用的目录结构(
WEB-INF,classes,lib)。
-
开发环境:
- JDK: 安装并配置好 JDK (建议 JDK 8 或更高版本)。
- IDE: IntelliJ IDEA (强烈推荐) 或 Eclipse,IDEA 对 Maven/Gradle 和 Web 开发的支持更好。
- Web 服务器: Apache Tomcat,这是最常用、最适合初学者的 Servlet 容器,你需要学会下载、安装和配置它。
- 构建工具: Maven 或 Gradle,用于管理项目依赖和构建项目,强烈建议使用 Maven,它可以自动下载 Servlet API 等库。
实践:
- 创建一个标准的 Maven Web 项目。
- 在 IDEA 中配置 Tomcat 服务器,并能成功运行一个简单的 "Hello World" 页面。
Servlet 核心概念与 API
这是学习的核心部分,你需要理解 Servlet 是什么以及它的生命周期。
-
什么是 Servlet?

- 概念:一个运行在 Web 服务器端的 Java 小程序,用于接收和响应来自客户端(通常是浏览器)的 HTTP 请求。
- 作用:处理业务逻辑,动态生成 HTML、XML 或 JSON 等内容返回给客户端。
-
Servlet 生命周期
- 这是 Servlet 最关键的概念,务必理解。
init(ServletConfig config):- 何时调用:Servlet 实例被创建后,只调用一次。
- 作用:进行初始化操作,比如加载配置文件、建立数据库连接等。
service(ServletRequest req, ServletResponse res):- 何时调用:每次客户端请求到达时,都会调用一次。
- 作用:根据请求类型(GET, POST 等)调用相应的
doGet(),doPost()等方法。通常我们不会重写这个方法。
destroy():- 何时调用:当 Servlet 实例被销毁时(例如服务器关闭或应用被卸载),只调用一次。
- 作用:进行资源清理,比如关闭数据库连接、释放文件句柄等。
-
核心 API 与常用类
javax.servlet.http.HttpServlet: 你需要继承的抽象类,它已经实现了service方法,并根据请求方法(GET/POST等)分发到doGet,doPost等方法,你只需要重写这些方法即可。HttpServletRequest: 请求对象,封装了客户端的所有信息,如请求头、请求参数、Cookie、Session 等。- 常用方法:
getParameter(),getMethod(),getRequestURI(),getHeader(),getSession()。
- 常用方法:
HttpServletResponse: 响应对象,用于向客户端生成响应。- 常用方法:
getWriter()(获取字符输出流,用于输出文本内容),getOutputStream()(获取字节输出流,用于输出图片、文件等),setContentType()(设置响应内容的类型,如text/html; charset=UTF-8)。
- 常用方法:
实践:
- 创建一个
HelloServlet类,继承HttpServlet。 - 重写
doGet方法,使用response.getWriter().println("Hello, Servlet!");向浏览器输出内容。 - 在
web.xml文件中配置Servlet的映射(<servlet>和<servlet-mapping>),或者使用 注解@WebServlet(现代方式)。 - 通过浏览器访问该 Servlet,观察输出结果。
处理请求与响应
这是日常开发中最常用的部分。
-
获取请求参数
- 处理 HTML 表单(
<form method="get/post">)提交的数据。 - 使用
request.getParameter("参数名")获取单个值。 - 使用
request.getParameterValues("参数名")获取复选框等同一名称的多个值。
- 处理 HTML 表单(
-
请求转发 与 重定向
- 请求转发 (
RequestDispatcher.forward()):- 特点:在服务器端完成,客户端的地址栏不会改变,共享同一个
request和response对象。 - 场景:多个 Servlet 协同完成一个请求,Servlet 处理业务逻辑后,转发到一个 JSP 页面进行数据展示。
- 特点:在服务器端完成,客户端的地址栏不会改变,共享同一个
- 重定向 (
response.sendRedirect()):- 特点:服务器返回一个 302 状态码和新的 Location,客户端会向新地址重新发起请求,地址栏会改变,无法共享
request中的数据(除非使用 Session)。 - 场景:用户登录成功后跳转到主页、表单提交后跳转到成功页面(防止表单重复提交)。
- 特点:服务器返回一个 302 状态码和新的 Location,客户端会向新地址重新发起请求,地址栏会改变,无法共享
- 请求转发 (
-
处理中文乱码
- GET 请求乱码: 在 Tomcat 8+ 中,默认已解决,如果是旧版本,需要修改
server.xml中 Connector 的URIEncoding="UTF-8"。 - POST 请求乱码: 在获取参数前,调用
request.setCharacterEncoding("UTF-8");,更通用的做法是使用一个过滤器。
- GET 请求乱码: 在 Tomcat 8+ 中,默认已解决,如果是旧版本,需要修改
实践:
- 创建一个包含用户名和密码输入框的 HTML 登录页面。
- 创建一个
LoginServlet,接收 POST 请求,获取用户名和密码,并打印到控制台。 - 实现登录成功后重定向到欢迎页面,登录失败后转发回登录页面并提示错误信息。
进阶主题
当你掌握了基础后,可以学习这些更强大的功能。
-
Cookie 与 Session
- Cookie: 客户端技术,数据存储在浏览器中,用于记录少量、不敏感的信息(如“记住我”)。
- Session: 服务器端技术,数据存储在服务器上,通过一个唯一的
JSESSIONID(通常存在 Cookie 中)来关联,用于保存用户的登录状态、购物车等敏感信息。 - 实践: 实现一个简单的“记住我”功能(使用 Cookie),以及一个用户登录后显示欢迎信息的页面(使用 Session)。
-
过滤器
- 概念:可以拦截客户端的请求和响应,对请求进行预处理,对响应进行后处理。
- 作用:统一编码处理、用户权限验证、日志记录等。
- 使用
@WebFilter注解或web.xml配置。 - 实践: 编写一个字符编码过滤器,解决所有 POST 请求的乱码问题。
-
监听器
- 概念:用于监听 Web 应用中的事件,如 ServletContext、HttpSession、ServletRequest 的创建和销毁。
- 作用:在 Web 应用启动时加载初始化数据(如读取配置文件到内存)、统计在线人数等。
- 实践: 编写一个监听器,在 Web 应用启动时,在控制台打印 "Application is starting up..."。
项目实战
理论学完后,通过一个完整的项目来巩固所学知识。
项目:简易的待办事项管理应用
- 功能:
- 查看待办事项列表。
- 添加新的待办事项。
- 删除待办事项。
- 技术栈:
- 后端:Servlet + JDBC
- 数据库:MySQL (或 H2 内存数据库)
- 前端:简单的 HTML + CSS (不涉及 JavaScript,保持简单)
- 步骤:
- 创建数据库和数据表
todo_item(id,task,is_completed)。 - 创建
DBUtil工具类,管理数据库连接。 - 创建
TodoServlet:doGet: 从数据库查询所有待办事项,转发到一个list.jsp页面展示。doPost: 处理添加新任务的表单提交,将任务存入数据库,然后重定向到TodoServlet的doGet方法。
- 创建
DeleteServlet:接收要删除的任务 ID,从数据库删除,然后重定向回列表页面。 - 创建
list.jsp页面,使用 JSTL 和 EL 表达式(如果学了的话)来展示任务列表和表单。
- 创建数据库和数据表
推荐资源
- 视频教程:
- Bilibili: 搜索“Servlet入门”、“黑马程序员 JavaWeb”等,有大量免费且优质的中文视频教程。
- 尚硅谷、黑马程序员 的 JavaWeb 系列课程非常经典。
- 在线文档:
- Oracle 官方文档: 最权威的资料,但可能比较枯燥。
- 菜鸟教程、W3Cschool: 提供快速入门和代码示例。
- 书籍:
- 《Head First Servlets & JSP》: 图文并茂,非常适合初学者建立概念。
- 《Java Web开发详解》: 内容比较全面和深入。
- 博客与社区:
- CSDN、掘金、思否: 搜索具体问题,通常能找到高质量的解决方案和文章。
学习建议
- 多动手,少看视频: 视频是引导,但真正的知识是在自己敲代码、解决问题中获得的,每学一个知识点,立刻动手写一个 Demo。
- 理解原理,而非死记代码: 不要只复制粘贴代码,要问自己“为什么这里要这样写?”,
request.getRequestDispatcher()和response.sendRedirect()的区别。 - 学会调试: 学会使用 IDE 的断点调试功能,可以让你清晰地看到程序的执行流程和变量变化,这是排查问题的利器。
- 从
web.xml到注解: 先学会用web.xml配置,理解其背后的原理,然后过渡到使用@WebServlet,@WebFilter等注解,这更符合现代开发习惯。 - 拥抱框架: 学完 Servlet 后,你会对 Web 请求的整个生命周期有深刻理解,这时再去学习 Spring MVC 或 Spring Boot,你会发现很多概念(如 DispatcherServlet, Interceptor)都是 Servlet 思想的延伸和封装,学习起来会事半功倍。
祝你学习顺利!
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。