Java Web开发基础与Servlet核心技术

Java Web 开发的基础核心仍然围绕 B/S 架构HTTP 协议Web 服务器(如 Tomcat)和 Servlet 技术展开。尽管 2025–2026 年主流企业项目几乎全部使用 Spring Boot + Spring MVC(其底层仍然是 Servlet),但彻底理解 Servlet 是真正读懂 Spring Web、掌握请求处理流程、调试底层问题、应对面试的核心前提。

下面给你一个清晰、实用的学习路径和核心知识点总结(基于当前主流用法 + 面试/生产常见考点)。

一、Java Web 基础必须掌握的概念(前置知识)

顺序内容建议掌握程度为什么重要
1B/S 与 C/S 架构对比理解明白 Web 应用的基本交互模型
2HTTP/1.1、HTTP/2、HTTP/3 协议重点掌握请求/响应结构、常见状态码、请求方法、请求头/响应头所有 Web 交互的基础
3常见的 Web 服务器Tomcat(主流)、Jetty、UndertowServlet 必须运行在容器中
4静态资源 vs 动态资源理解区别Servlet 主要负责动态内容
5Web 应用目录结构(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 管理):

  1. 创建(只执行一次)
  • 构造方法
  • init() 方法
  1. 服务(每次请求都执行)
  • service() → 根据方法分发到 doGet / doPost / doPut 等
  1. 销毁(容器关闭时执行一次)
  • 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 年实用路线)

  1. 环境搭建(IDEA + Tomcat 10.x / 11.x + Servlet 6.0 / Jakarta EE 9+)
  2. Hello Servlet(注解方式)
  3. Request & Response 完整使用(参数、中文、请求转发、重定向)
  4. 会话管理(Cookie + Session)
  5. 过滤器 Filter(统一编码、登录拦截)
  6. 文件上传下载
  7. 手写简单 MVC(Servlet + JSP / Servlet + JSON)
  8. 对比 Spring MVC 底层实现(DispatcherServlet 其实是一个超级 Servlet)

最后建议

  • 短期目标(1–3 周):彻底搞懂 Servlet + Tomcat + HTTP,能手写登录、注册、文件上传模块
  • 长期目标:把 Servlet 当作“底层协议”,真正理解 Spring MVC / Spring Boot Web 的每一行源码为什么那么写

你现在是刚入门、准备面试、还是已经在项目中遇到 Servlet 相关问题?可以告诉我你的具体情况,我可以给你更针对性的代码案例或重点讲解某个难点。

文章已创建 4802

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部