java servlet3.1规范解读系列一:servlet概述

1.1 什么是 Servlet?

Servlet 是基于 Java 技术的 web 组件,容器托管的,用于生成动态内容。像其他基于 Java 的组件技术一样,Servlet 也是基于平台无关的 Java 类格式,被编译为平台无关的字节码,可以被基于 Java 技术的 web server动态加载并运行。容器,有时候也叫做 servlet 引擎,是 web server 为支持 servlet 功能扩展的部分。客户端通过 Servlet 容器实现的请求/应答模型与 Servlet 交互。

 

1.2 什么是 Servlet 容器?

Servlet 容器是 web server 或 application server 的一部分,提供基于请求/响应发送模型的网络服务,解码基于 MIME 的请求,并且格式化基于 MIME 的响应。 Servlet 容器也包含了管理 Servlet 生命周期。Servlet 容器可以嵌入到宿主的 web server 中,或者通过 Web Server 的本地扩展 API 单独作为附加组件安装。Servelt 容器也可能内嵌或安装到包含 web 功能的 application server 中。

所有 Servlet 容器必须支持基于 HTTP 协议的请求/响应模型,比如像基于 HTTPS( HTTP over SSL)协议的请求/应答模型可以选择性的支持。容器必须实现的 HTTP 协议版本包含 HTTP/1.0 和 HTTP/1.1。因为容器或许支持 RFC2616 (HTTP/1.1)描述的缓存机制,缓存机制可能在将客户端请求交给 Servlet 处理之前修改它们,也可能在将 Servlet 生成的响应发送给客户端之前修改它们,或者可能根据 RFC2616 规范直接对请求作出响应而不交给 Servlet 进行处理。

Servlet 容器应该使 Servlet 执行在一个安全限制的环境中。在 Java 平台标准版( J2SE, v.1.3 或更高) 或者Java 平台企业版(Java EE, v.1.3 或更高) 的环境下,这些限制应该被放置在 Java 平台定义的安全许可架构中。比如,高端的 application server 为了保证容器的其他组件不受到负面影响可能会限制 Thread 对象的创建。

 

这个是规范中一开始就对servlet的定义。从最新的规范中,我们要知道:

1: web应用在主机中是怎么工作的?

以下是一个典型的事件序列:

1、客户端(如 web 浏览器)发送一个 HTTP 请求到 web 服务器;

2、 Web 服务器接收到请求并且交给 servlet 容器处理, servlet 容器可以运行在与宿主 web 服务器同一个进程中,也可以是同一主机的不同进程,或者位于不同的主机的 web 服务器中,对请求进行处理。

3、 servlet 容器根据 servlet 配置选择相应的 servlet,并使用代表请求和响应对象的参数进行调用。

4、 servlet 通过请求对象得到远程用户, HTTP POST 参数和其他有关数据可能作为请求的一部分随请求一起发送过来。 Servlet 执行我们编写的任意的逻辑,然后动态产生响应内容发送回客户端。发送数据到客户端是通过响应对象完成的。

5、一旦 servlet 完成请求的处理, servlet 容器必须确保响应正确的刷出,并且将控制权还给宿主 Web 服务器

 

java servlet3.1规范解读系列一:servlet概述

2: 联系spring boot jar包启动web,这里做了什么说明?

请注意规范中的这句话:

Servlet 容器可以嵌入到宿主的 web server 中,或者通过 Web Server 的本地扩展 API 单独作为附加组件安装。Servelt 容器也可能内嵌或安装到包含 web 功能的 application server 中。

怎么理解呢:

通过 Web Server 的本地扩展 API 单独作为附加组件安装: 这种方式类似于tomcat 等web容器

Servlet 容器可以嵌入到宿主的 web server 中: spring boot jar包就是这种方式

3: 缓存机制

这里先不说缓存机制的实现,看到这里油门应该有一些想法?网络优化,系统优化?提供访问速度?静态资源缓存? 等等。这种在我们日常编写代码中,比较少考虑的事情,是不是应该多想想呢?