目录

1、什么是 Web 服务器?

2、什么是 Servlet 容器?

3、什么是 Servlet?

4、Servlet 容器和 Web 服务器如何处理一个请求的?

5、JVM 的作用


我们简单的谈一谈关于 Web 服务器, Servlet 容器及其与 JVM 的关系。其实 Servlet 容器只不过是一个 Java 程序。

1、什么是 Web 服务器?

想要了解什么是 Servlet 容器,首先需要知道什么是 Web 服务器。

Web 服务器使用 HTTP 协议传输数据。在一般情况下,用户在浏览器(客户端)中键入 URL(例如www.baidu.com/static.html),并获取要读取的网页。所以服务器所做的就是向客户机发送一个网页。信息的交换采用指定请求和响应消息的格式的 HTTP 协议。

2、什么是 Servlet 容器?

正如我们看到的,用户/客户端只能从服务器请求静态网页。如果用户希望根据自己的输入阅读网页,那么这还不够好。Servlet 容器的基本思想是使用 Java 动态生成服务器端的网页。所以 Servlet 容器本质上是与 Servlet 交互的 Web 服务器的一部分。

“Servlet 容器”是一个装载一堆 Servlet 对象的“器具”(容器),并且具备管理这些对象的功能。

3、什么是 Servlet?

Servlet 是 javax.servlet 包中定义的接口。它声明了 Servlet 生命周期的三个基本方法:init()、service() 和 destroy()。它们由每个 Servlet Class(在 SDK 中定义或自定义)实现,并由服务器在特定时机调用。

  • init() 方法在 Servlet 生命周期的初始化阶段调用。它被传递一个实现 javax.servlet.ServletConfig 接口的对象,该接口允许 Servlet 从 Web 应用程序访问初始化参数。
  • service() 方法在初始化后对每个请求进行调用。每个请求都在自己的独立线程中提供服务。Web容器为每个请求调用 Servlet 的 service() 方法。service() 方法确认请求的类型,并将其分派给适当的方法来处理该请求。
  • destroy() 方法在销毁 Servlet 对象时调用,用来释放所持有的资源。

从 Servlet 对象的生命周期中,我们可以看到 Servlet 类是由类加载器动态加载到容器中的。每个请求都在自己的线程中,Servlet 对象可以同时服务多个线程(线程不安全的)。当它不再被使用时,会被 JVM 垃圾收集。
像任何Java程序一样,Servlet 在 JVM 中运行。为了处理复杂的 HTTP 请求,Servlet 容器出现了。Servlet 容器负责 Servlet 的创建、执行和销毁。

4、Servlet 容器和 Web 服务器如何处理一个请求的?

  1. Web 服务器接收 HTTP 请求。
  2. Web 服务器将请求转发到 Servlet 容器。
  3. 如果对应的 Servlet 不在容器中,那么将被动态检索并加载到容器的地址空间中。
  4. 容器调用 init() 方法进行初始化(仅在第一次加载 Servlet 时调用一次)。
  5. 容器调用 Servlet 的 service() 方法来处理 HTTP 请求,即读取请求中的数据并构建响应。Servlet 将暂时保留在容器的地址空间中,可以继续处理其它 HTTP 请求。
  6. Web 服务器将动态生成的结果返回到浏览器/客户端。

5、JVM 的作用

Servlet 允许 JVM 在处理每个请求时使用单独的 Java 线程,这是 Servlet 容器的一个主要优点。每个 Servlet 是一个 Java 类,具有响应 HTTP 请求的特殊元素。

Servlet 容器的主要功能是将请求转发到正确的 Servlet 进行处理,并在 JVM 处理完后将动态生成的结果返回到正确的位置。

在大多数情况下, Servlet 容器在单个 JVM 中运行,但是当容器需要多个 JVM 时,会有一些其它的解决方案。

 

英文原文:https://dzone.com/articles/what-servlet-container

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐