Servlet
是一个基于 Java 技术的 Web 组件,它被容器(Container)管理,并可以生成动态的内容。Servlet 本质上是 Java Class,这些 Class 可以被基于 Java 的 Web 服务器动态的加载和运行。容器(Container,也被称为 Servlet 引擎)是提供 Servlet 功能的 Web 服务器扩展。Servlet 通过一个被 Servlet 容器实现的 request
/ response
规范来与 Web 客户端交互。
Web 服务器(或者应用服务器)通过发送和响应请求、解码基于 MIME
的请求、格式化基于 MIME 的响应来提供网络服务,Servlet 容器就是它们的其中一个部分。Servlet 容器还包含并且管理 Servlet 的整个生命周期。
Servlet 容器可以构建到主机的 Web 服务器中,也可以作为一个附加的组件通过服务器的本地扩展 API 和服务器相连接。Servlet 还可以内置或者安装到启用 Web 功能的应用服务器中。
Servlet 容器必须至少支持 http 协议,对于基于 http 协议的其他协议(例如:https)可以选择支持或不支持。
下面是一个典型的事件的序列:
客户端(例如:浏览器)连接到 Web 服务器并发送一个 HTTP 请求。
请求被 Web 服务器接收并由 Servlet 容器处理。对于处理请求的 Servlet 容器来说,它可以在与 Web 服务器相同的进程中运行,或者在与 Web 服务器同一个主机上的不同进程中运行,也可以在其他主机上运行,不妨碍处理客户端发送过来的请求。
Servlet 容器将会根据其配置来决定调用哪一个 Servlet 来处理请求并相应内容。
Servlet 使用请求对象来找出以下内容:
Servlet 执行代码编写的任何逻辑,并生成响应数据,通过 Response 对象发送回客户端。
一旦 Servlet 将 Request 处理完成,Servlet 容器在确保 Response 内容在适当的时候输出到响应流后,就会将控制权给回到 Web 服务器。
在功能上来说,Servlet 提供了比 CGI 程序更高级别的抽象,但是比 Web 框架(如 JavaServer Faces)提供的抽象级别要低。
与其他的服务器扩展机制相比,Servlet 有以下优势:
Java Servlet API 4.0 是 Java EE 中必需的 API。为了在 Java EE 环境中运行,Servlet 容器以及部署到其中的 Servlet 必须满足在 Java EE 中描述的额外的要求。