# Servlet 的工作原理

> 原文： [https://beginnersbook.com/2013/05/working-of-servlets/](https://beginnersbook.com/2013/05/working-of-servlets/)

在我开始解释 servlet 如何工作之前，让我们熟悉这三个术语。

**Web 服务器**：它可以处理客户端发送的 HTTP 请求，并通过 HTTP 响应响应请求。

**Web 应用（webapp）**：我在本指南中将其称为 webapp。基本上该项目是您的 Web 应用，它是 servlet 的集合。

**Web 容器**：也称为 Servlet 容器和 Servlet 引擎。它是 Web Server 的一部分，与 Servlet 交互。这是管理 Servlet 生命周期的 Web Server 的主要组件。

> 您会发现本指南的某些部分已在 [servlet 生命周期指南](https://beginnersbook.com/2013/05/servlet-life-cycle/)中介绍，但本指南主要介绍 servlet 应用（webapp）的工作，而不是生命周期的步骤。我强烈建议您阅读本文，深入了解 servlet 的实际工作原理。

## Servlet 如何工作？

1）当 Web 服务器（例如 Apache Tomcat）启动时，servlet 容器部署并加载所有 servlet。在此步骤中，Servlet 容器创建`ServletContext`对象。`ServletContex`是一个接口，它定义了可以用来与 servlet 容器**通信的方法集。

**注**：**每个 webapp** 只有一个`ServletContext`，这对所有 servlet 都是通用的。`ServletContext`有几个有用的方法，如`addListener()`，`addFilter()`等。现在我不解释它们，因为我将在一个关于`ServletContext`的单独文本中介绍它们。

2）一旦加载了 servlet，servlet 容器就会创建 servlet 类的实例。对于每个实例化的 servlet，调用其`init()`方法。

3）客户端（用户浏览器）向某个端口上的 Web 服务器发送 Http 请求。每次 Web 服务器收到请求时，servlet 容器都会创建`HttpServletRequest`和`HttpServletResponse`对象。`HttpServletRequest`对象提供对请求信息的访问，`HttpServletResponse`对象允许我们在将 http 响应发送到客户端之前对其进行格式化和更改。

servlet 容器生成一个新线程，该线程为每个客户端请求调用`service()`方法。`service()`方法根据请求类型将请求调度到正确的处理程序方法。

例如，如果服务器收到`Get`请求，则`service()`方法会通过使用请求参数调用`doGet()`方法将请求分派给`doGet()`方法。类似地，诸如`Post`，`Head`，`Put`等的请求被 servlet 的`service()`方法分派给相应的处理程序`doPost()`，`doHead()`，`doPut()`等。

![Http Servlet](img/800e239048bf09e4171bc1a7b1b429a7.jpg)

4）当 servlet 容器关闭时，它会卸载所有 servlet 并为每个初始化的 servlet 调用`destroy()`方法。