一、概述
1.1 什么是 Servlet
Servlet
是一个基于 Java 技术的 Web 组件,它被容器(Container)管理,并可以生成动态的内容。Servlet 本质上是 Java Class,这些 Class 可以被基于 Java 的 Web 服务器动态的加载和运行。容器(Container,也被称为 Servlet 引擎)是提供 Servlet 功能的 Web 服务器扩展。Servlet 通过一个被 Servlet 容器实现的 request
/ response
规范来与 Web 客户端交互。
1.2 什么是 Servlet 容器(Container)
Web 服务器(或者应用服务器)通过发送和响应请求、解码基于 MIME
的请求、格式化基于 MIME 的响应来提供网络服务,Servlet 容器就是它们的其中一个部分。Servlet 容器还包含并且管理 Servlet 的整个生命周期。
关于
MIME
的知识请参考:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types
Servlet 容器可以构建到主机的 Web 服务器中,也可以作为一个附加的组件通过服务器的本地扩展 API 和服务器相连接。Servlet 还可以内置或者安装到启用 Web 功能的应用服务器中。
Servlet 容器必须至少支持 http 协议,对于基于 http 协议的其他协议(例如:https)可以选择支持或不支持。
1.3 例子说明
下面是一个典型的事件的序列:
-
客户端(例如:浏览器)连接到 Web 服务器并发送一个 HTTP 请求。
-
请求被 Web 服务器接收并由 Servlet 容器处理。对于处理请求的 Servlet 容器来说,它可以在与 Web 服务器相同的进程中运行,或者在与 Web 服务器同一个主机上的不同进程中运行,也可以在其他主机上运行,不妨碍处理客户端发送过来的请求。
-
Servlet 容器将会根据其配置来决定调用哪一个 Servlet 来处理请求并相应内容。
-
Servlet 使用请求对象来找出以下内容:
- 客户端用户是谁
- POST 请求的参数是什么
- 其他相关的数据
Servlet 执行代码编写的任何逻辑,并生成响应数据,通过 Response 对象发送回客户端。
-
一旦 Servlet 将 Request 处理完成,Servlet 容器在确保 Response 内容在适当的时候输出到响应流后,就会将控制权给回到 Web 服务器。
1.4 比较 Servlet 和其他技术
在功能上来说,Servlet 提供了比 CGI 程序更高级别的抽象,但是比 Web 框架(如 JavaServer Faces)提供的抽象级别要低。
与其他的服务器扩展机制相比,Servlet 有以下优势:
- Servlet 大部分情况下比 CGI 脚本更快,因为它们使用不同的进程模型。
- Servlet 使用的是被 Web 服务器支持的标准 API。
- Servlet 有 Java 编程语言的所有优势,包括易用性开发和平台无关性(跨平台)。
- Servlet 可以访问可用于 Java 平台的大量的 API。
1.5 Servlet 与 Java 平台企业版的关系
Java Servlet API 4.0 是 Java EE 中必需的 API。为了在 Java EE 环境中运行,Servlet 容器以及部署到其中的 Servlet 必须满足在 Java EE 中描述的额外的要求。
1.6 与 Java Servlet API 2.5 的兼容性
1.6.1 处理注解
在 Servlet 规范 2.5 版本中,在部署时 metadata-complete
仅影响注解的扫描。2.5 版本的 Servlet 规范中没有 web-fragments
的概念。到了 3.0 及之后的版本中,有了 web-fragments
的概念,metadata-complete
就影响指定的部署信息和 Web 片段的扫描。描述符的版本一定__不__要影响容器扫描注解。大多数容器的实现必须扫描在配置中支持的注解,除非额外指定 metadata-complete
。
本篇完。
Servlet 规范一开始读起来有些概念没有接触过就不理解,等以后多读几次再回来完善。