概述

什么是Servlet

Servlet 是一个基于Java 的Web组件,由容器管理生成的动态内容。就像其他的Java组件一样,Servlet是平台无关的Java类所编译成的字节码,可以被动态加载在基于的Java Web容器之中。
容器,有时候也被乘坐Servlet引擎,是一些提供Servlet功能的 Web服务器扩展。 Servlet 和Web 客户端通过 Servlet容器所实现的请求/应答的范式来完成交互。

什么是Servlet容器

Servlet容器是Web或者应用服务器的一部分,它提供一些网络服务:比如发送请求和应答,解码基于MIME的请求,格式化基于MIME的应答等。一个Sevlet容器同时也通过Servlet的生命周期及管理这些Servlet。

Servlet容器可以构建在Web 服务器或者作为一个Web服务器的附加组件通过本地扩展API安装到Web服务器上。Sevrlet容器也能够构建或者安装到支持Web的应用服务器上。

所有的Servlet容器必须支持HTTP中的请求和应答,其他的基于请求/应答的协议则可能支持比如HTTPS。容器必须实现的HTTP SPEC包括HTTP/1.0和HTTP/1.1。因为容器也许会有RFC2616(HTTP/1.1)中所描述的缓存机制,容器也许会在将请求送到Servlet之前改变客户端所发送的请求,也可能在应答发送到客户端之前修改Servlet产生的应答,或者可能不将请求发送到Servlet就回应了客户端,这些都在符合RFC2616的情况下。

Servlet容器也许会放置安全限制到Servlet的执行环境中去。在J2SE或是J2EE环境中,这些限制应该用Java平台的权限架构来设置。比如,高端应用服务应该限制创建Thread对象来确保其他组件正常。

针对这一版本来说, Java SE 7是 Servlet容器能够允许的最低版本。

一个例子

下面是一些典型事件的序列:

  1. 一个客户端(比如浏览器)访问一个Web服务器产生一个 HTTP 请求。
  2. Web服务器接受了请求,并且将其移交给Servlet容器。Servlet容器可以运行在同一个Web服务器的同一进程或者不同进程,或者不同Web服务器上,只要能够处理请求。
  3. Servlet容器来决定哪一个Servlet来调用,这都取决于Servlet的配置,然后调用Servlet,同时还有对应的代表请求和应答的对象。
  4. Servlet通过请求对象来找到发送请求的客户端信息,一些参数和其他一些相关的数据也在是request中的一部分。Servlet会执行一些程序员实现的逻辑以及生成一些信息返回给客户端。Servlet会将这些信息通过应答对象返回给客户端。
  5. 一旦Servlet处理完请求,Servlet容器确保正确刷新响应,并将控制返回给Web服务器。

比较Servlet和其他的技术

在功能上来说,Servlet 位于CGI程序和一些专业的服务器扩展模块之间。
Servlets 有如下优于其他服务器扩展机制:

  • Servlet 比CGI脚本要快得多,因为使用了不同的进程模型
  • Servlet 使用了标准的API,被很多Web服务器所支持
  • Servlet 有所有Java的语言优势,包括易于开发和平台无关
  • Servlet 可以使用大量 Java平台的API

Servlet与 Java企业版的关系

Java Servlet API v3.1 是Java企业版 7 所需要的API。Servlet容器和其中运行的Servlet必须满足一些额外的Java EE SPEC描述的运行在Java EE环境的的需求。

与 Servlet 2.5 SPEC 的兼容性

处理注解

在Servlet 2.5,metadata-complete只影响注释在部署时的扫描。Web-fragments概念在2.5中还不存在。然而在Servlet 3.0和之后,metadata-complete影响扫描所有的注释,注释会在部署时指定部署信息和web-fragments。描述符的版本,必须不影响Web应用中扫描的注解。特殊实现的版本,必须扫描所有的配置中支持的注解,除非metadata-complete是特指的。

Logo

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

更多推荐