-
Servlet是什么?
Servlet是一个基于Java的组件,它由容器管理并输出动态内容。像其它基于Java技术的组件一样,servlets是平台独立的Java classes,它被编译为独立于平台的字节码,能在Web server中动态地加载、执行。
容器 - 又称之为servlet engines, 是提供servlet功能的Web server扩展。Servlets通过servlet容器实现的request/response模型与Web client交互。 -
Servlet容器是什么?
一个servlet容器是一个Web server或者应用服务器的一部分,它提供在requests和responses之上的网络服务,解码基于MIME的requests以及格式化基于MIME的responses. 同时,容器也通过servlet的生命周期来管理这些servlets。
一个servlet容器能内建于主机Web服务器中, 或者通过Web服务器的native extension API作为一个额外的组件安装到Web服务器中。
所有的servlet容器必须为requests和responses支持HTTP协议,但是其它基于request/response的协议,如HTTPS(HTTP over SSL)可以被支持。Servlet容器必须实现的HTTP规范的http协议版本是HTTP/1.0和HTTP/1.1。因为容器可能有RFC2616(HTTP/1.1)中描述的缓存机制,它可能在Request发送到servlet之前在client端修改requests,在把response发送回client之前修改response,或者遵循RFC2616,可以在响应request时,不把他们发送给servlet。
一个容器可以把安全限制添加在servlet执行的环境中。在Java Platform, Standard Edition (J2SE, v.13 or above) 或者Java Platform, Enterprise Edition (Java EE,v.1.3 or above) 环,这些限制应该由Java Platform允许的架构来添加。例如,高端的应用服务器可以限制线程对象的创建,以此来保证容器中其它组件不受影响。
Java SE 6是当下Java Platform必须内建servlet 容器的最低版本。
-
示例
以下是一个事件典型的处理流程:- 客户端访问Web服务器并发送一个HTTP请求。
- Web服务器接收到这个请求,并转交给servlet容器。这个servlet容器能与主机Web服务器运行在同一个进程、同一主机不同进程或者在不同主机上。
- servlet容器根据servlet配置决定应该触发哪个servlet,并且带着能代表request和response的对象去调用它。
- servlet使用request对象找出远端用户是谁、参数是啥和其它相关数据。servlet执行好逻辑代码之后,产生数据送回client。servlet通过response把数据发送回client。
-
比较Servlets与其它相关技术
功能上来讲,servlets介于Common Gateway Interface - (CGI) 程序和专有的服务器扩展,比如Netscape Server API (NSAPI) 或者Apache Modules。相比其它的服务器扩展,servlets有下述优势:
- 由于使用不同的进程模型,servlets通常比CGI程序快。
- Servlets使用一套被很多Web服务器支持的标准API。
- servlet包括Java编程语言的所有优势,包括易于开发和平台独立性。
- servlets能使用Java Platform提供大量的API。
-
与Java Platform,Enterprise Edition的关系
Java Servlet API v.3.0是Java Platform,Enterprise Edition v.6 必须的API。为了在Java EE环境中执行,部署在它下面的Servlet容器和servlet必须满足Java EE specification 中描述的额外要求。 -
Servlet 3.0 与 Java Servlet Specification Version 2.5的兼容性
- Listener ordering
在这个版本发布之前,listeners随机触发。到了3.0版本,listener触发的顺序被定义在 web.xml,web-fragment.xml 和 annotations中。
- Listener ordering
- 处理annotations
在Servlet2.5, metadata-complete仅仅在部署的时候影响annotations的扫描。web-fragments符号在servlet2.5中并不存在。然而在servlet3.0, metadata-complete在部署时影响扫描所有的annotations和web-fragments。一个web应用中,描述符的版本不能影响你要扫描哪个annotations。specification特殊版本的实现你定要扫描配置中所有支持的annotations,除非指明了具体metadata-complete。
翻译自 Java Servlet Specification
Version 3.0 Rev a
Author:Rajiv Mordani
Date: December 2010
网友评论