# 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 对象。 **ServletContext 是一个接口，它定义了 servlet 可以用来与 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 Request，则 service（）方法会通过使用请求参数调用 doGet（）方法将请求分派给 doGet（）方法。类似地，诸如 Post，Head，Put 等的请求被 servlet 的 service（）方法分派给相应的处理程序 doPost（），doHead（），doPut（）等。
![Http Servlet](img/800e239048bf09e4171bc1a7b1b429a7.jpg)

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