温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java Servlet如何工作

发布时间:2026-09-19 18:50:39 来源:亿速云 阅读:89 作者:小樊 栏目:编程语言

Java Servlet 是运行在 Servlet 容器(如 Tomcat) 中的 Java 程序,用来处理 HTTP 请求并生成响应,是 Java Web 的基础技术。下面从整体流程、生命周期、核心机制三个层面说明它是如何工作的。


一、Servlet 在 Web 中的角色

浏览器
  ↓ HTTP 请求
Web 服务器 (如 Nginx)
  ↓
Servlet 容器 (Tomcat)
  ↓
Servlet
  ↓
返回 HTML / JSON 等响应

Servlet 不直接和浏览器通信,而是:

  • 由 Servlet 容器(Tomcat) 接收请求
  • 容器创建/调用 Servlet
  • Servlet 处理请求并返回响应

二、Servlet 的工作流程(一次请求全过程)

1️⃣ 浏览器发送请求

http://localhost:8080/hello

2️⃣ Servlet 容器接收请求

Tomcat:

  • 解析 URL
  • 根据 web.xml 或注解找到对应的 Servlet

3️⃣ 调用 Servlet 方法

  • 如果是第一次访问 → 初始化 Servlet
  • 否则 → 直接调用 service()

4️⃣ Servlet 处理请求

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

5️⃣ 返回响应

  • 写 HTML / JSON
  • 容器把响应发回浏览器

三、Servlet 生命周期(重点)

Servlet 容器管理 Servlet 的生命周期:

1️⃣ 加载和实例化

  • Tomcat 启动时或首次访问时
  • 创建 Servlet 实例(单例)

2️⃣ 初始化:init()

public void init() { }
  • 只执行一次
  • 用于加载配置、连接数据库

3️⃣ 处理请求:service()

protected void service(HttpServletRequest req, HttpServletResponse resp)
  • 每次请求都会调用
  • 根据请求类型调用:
    • doGet
    • doPost

4️⃣ 销毁:destroy()

public void destroy() { }
  • Tomcat 关闭时执行
  • 释放资源

✅ Servlet 是线程不安全的(单例多线程)


四、核心对象说明

HttpServletRequest

  • 封装请求信息
  • 常用方法:
request.getParameter("name");
request.getHeader("User-Agent");

HttpServletResponse

  • 封装响应信息
response.getWriter().write("Hello");
response.setContentType("text/html");

五、示例 Servlet

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
        resp.setContentType("text/html");
        resp.getWriter().write("Hello Servlet");
    }
}

访问:

http://localhost:8080/hello

六、Servlet 与 Spring MVC 的关系

  • Servlet 是底层技术
  • Spring MVC 的 DispatcherServlet 本身就是一个 Servlet
  • 你写的 Controller 最终由 Servlet 调度
浏览器 → DispatcherServlet → Controller

七、一句话总结

Servlet 是运行在 Tomcat 中的 Java 类,由容器管理生命周期,用来接收 HTTP 请求并返回响应。

如果你愿意,我也可以:

  • 用 流程图 讲
  • 对比 Servlet vs Spring Boot
  • 讲 线程安全问题
  • 写 一个完整可运行示例

你想深入哪一块?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手