Java Servlet 规范 版本 2.4 (1)

Chap.1 概述

1.1 什么是Servlet?

Servlet是一种基于Java技术的Web组件,由容器管理,产生动态内容。像其他基于Java技术的组件一样,servlet是平台无关的Java类,它被编译成平台中立的字节码,由支持Java技术的Web服务器动态的加载和执行。容器,有时称为Servlet引擎,是提供Servlet功能的Web服务器扩展。Servlet与Web客户端通过由Servlet容器实现的请求/响应模式交互。

1.2 什么是Servlet容器?

Servlet容器是Web服务器或应用程序服务器的一部分,它通过发送请求和响应来提供网络服务,解码基于MIME的请求,编码基于MIME的响应。Servlet容器还通过servlet的生命周期控制和管理servlet。

Servlet容器可以被构建到Web服务器主机,或者通过服务器本地的扩展API作为附加组件被安装到Web服务器中。Servlet容器也可以被构建到或者可能被安装到支持Web的应用程序服务器上。

所有的servlet容器必须支持HTTP作为请求和响应的协议,但是额外的基于请求/响应的协议,例如HTTPS(SSL之上的HTTP)也可以支持。容器必须实现的HTTP规范的版本是HTTP/1.0和HTTP/1.1。因为容器可能有RFC 2616(HTTP 1.1)中描述的缓存机制,它可以在客户端请求被传送到servlet之前修改请求,也可以在响应发送到客户端之前修改响应,或者也可以使用与RFC 2616一致的方式不将请求传送到servlet来响应请求。

Servlet容器可以在servlet执行的环境中设置安全限制。在Java 2平台标准版(Java EE, v.1.3 或者以上) 或Java 2平台企业版(Java EE, v.1.3 或者以上) 环境中,这些限制应该通过使用Java 2平台定义的权限架构来设置。例如,高级的应用程序服务器可能限制线程对象的创建,来保证容器中的其他组件不受到负面影响。

J2SE 1.3是在Java平台下构建servlet容器的最低版本。

1.3 例子

以下是事件的典型序列:
1. 客户端(例如Web浏览器)访问Web服务器,创建HTTP请求。
2. 请求被Web服务器接收,并且传递到servlet容器。Servlet容器可以和Web服务器主机运行在同一个进程中,或者在同一个主机的不同进程中,或者是不同主机的不同进程中来处理请求。
3. Servlet容器根据servlet配置确定调用哪个servlet,同时使用表示请求和响应的对象调用它。
4. Servlet使用request对象查找远程用户是谁,请求中传递了什么HTTP POST参数,以及其他相关数据。Servlet执行程序的逻辑,同时生成数据发送回客户端。它通过响应对象将数据发送回客户端。
5. 一旦servlet完成处理请求,servlet容器保证响应被正确的刷新,同时将控制权交回Web服务器主机。

1.4 比较Servlet和其他技术

在功能上,servlet介于公共网关接口(CGI)和专用服务器扩展,例如Netscape Server API(NSAPI)或Apache Modules之间。
Servlet与其他服务器扩展机制相比,有以下优势:
•通常比CGI脚本更快,因为它使用不同的处理模型。
•使用很多Web服务器支持的标准API。
•有Java编程语言的所有优点,包括易于开发和平台独立。
•可以访问大量的Java平台上有效的API。

1.5 与Java 2平台企业版的关系

Java Servlet API v.2.4是Java 2平台企业版v1.4必须的API。Servlet容器和部署在其中的servlet,为了在J2EE环境中执行,必须遵循在J2EE规范中描述的额外的要求。

1.6 与Java Servlet Version 2.3规范的兼容性

本节描述了采用了本版本规范的兼容性问题。

1.6.1 HttpSessionListener.sessionDestroyed

在以前版本的规范中,这个方法定义为:通知session无效。
在2.4版本中,这个方法变成:通知session将要变成无效。
这样在session无效之前进行通知。如果代码假定以前的状态,那么必须修改成新的状态。

1.6.2 ServletRequest 方法 getRemotePort, getLocalName,getLocalAddr, getLocaPort

在本版本的规范中,以下的方法被加入到ServletRequest接口中。

public int getRemotePort()
    返回发送请求的客户端或者最后代理的IP源端口。

public java.lang.String getLocalName()
    返回接收请求的IP接口的主机名称。

public java.lang.String getLocalAddr()
    返回接收请求的接口的IP地址。

public int getLocalPort()
    返回接收请求的接口的IP端口号。

    
注意,这个附加变化变化导致一些情况下代码不兼容,例如,当开发者实现ServletRequest 接口时。在这种情况下,需要保证所有的新方法都被实现。

你可能感兴趣的:(servlet)