欢迎光临
我们一直在努力

Java Servlet API说明文档(2.1a版)(一)-JSP教程,Jsp/Servlet

建站超值云服务器,限时71元/月

绪言

这是一份关于2.1版java servlet api的说明文档,作为对这本文档的补充,你可以到http://java.sun.com/products/servlet/index.html下面下载javadoc格式的文档。

谁需要读这份文档

这份文档描述了java servlet api的最新版本2.1版。所以,这本书对于servlet的开发者及servlet引擎的开发者同样适用。

java servlet api的组成

java servlet api由两个软件包组成:一个是对应http的软件包,另一个是不对应http的通用的软件包。这两个软件包的同时存在使得java servlet api能够适应将来的其他请求-响应的协议。

这份文档以及刚才提及的javadoc格式的文档都描述了这两个软件包,javadoc格式的文档还描述了你应该如何使用这两个软件包中的所有方法。

有关规范

你也许对下面的这些internet规范感兴趣,这些规范将直接影响到servlet api的发展和执行。你可以从http://info.internet.isi.edu/7c/in-notes/rfc/.cache 找到下面提到的所有这些rfc规范。

rfc 1738 统一资源定位器(url)

rfc 1808 相关统一资源定位器

rfc 1945 超文本传输协议–http/1.0

rfc 2045 多用途internet邮件扩展(多用途网际邮件扩充协议(mime))第一部分:internet信息体格式

rfc 2046 多用途internet邮件扩展(多用途网际邮件扩充协议(mime))第二部分:媒体类型

rfc 2047 多用途网际邮件扩充协议(mime)(多用途internet邮件扩展)第三部分:信息标题扩展用于非ascii文本

rfc 2048 多用途internet邮件扩展(多用途网际邮件扩充协议(mime))第四部分: 注册步骤

rfc 2049 多用途internet邮件扩展(多用途网际邮件扩充协议(mime))第五部分:一致性标准和例子

rfc 2068 超文本传输协议 — http/1.1

rfc 2069 一个扩展http:摘要访问鉴定

rfc 2109 http状态管理机制

rfc 2145 http 版本号的使用和解释

rfc 2324 超文本coffee pot控制协议 (htcpcp/1.0)

万维网协会(http://www.w3.org)管理着这些协议的规范和执行。

有关java servlets

javatm servlets是一个不受平台约束的java小程序,它可以被用来通过多种方法扩充一个web服务器的功能。你可以把servlet理解成server上的applets,它被编译成字节码,这样它就可以被动态地载入并用效地扩展主机的处理能力。

servlet与applets不同的地方是,它不运行在web浏览器或其他图形化的用户界面上。servlet通过servlet引擎运行在web服务器中,以执行请求和响应,请求、响应的典型范例是http协议。

一个客户端程序,可以是一个web浏览器,或者是非其他的可以连接上internet的程序,它会访问web服务器并发出请求。这个请求被运行在web服务器上的servlet引擎处理,并返回响应到servlet。servlet通过http将这个响应转发到客户端。

在功能上,servlet与cgi、nsapi有点类似,但是,与他们不同的是:servlet具有平台无关性。

java servlet概论

servlet与其他普通的server扩展机制有以下进步:

因为它采用了不同的进程处理模式,所以它比cgi更快。

它使用了许多web服务器都支持的标准的api。

它继承了java的所有优势,包括易升级以及平台无关性。

它可以调用java所提供的大量的api的功能模块。

这份文档说明了java servlet api的类和接口的方法。有关更多的信息,请参看下面的api说明。

servlet的生命周期

一个java servlet具有一个生命周期,这个生命周期定义了一个servlet如何被载入并被初始化,如何接收请求并作出对请求的响应,如何被从服务中清除。servlet的生命周期被javax.servlet.servlet这个接口所定义。

所有的java servlet都会直接地或间接地执行javax.servlet.servlet接口,这样它才能在一个servlet引擎中运行。servlet引擎是web 服务器按照java servlet api定制的扩展。servlet引擎提供网络服务,能够理解mime请求,并提供一个运行servlet的容器。

javax.servlet.servlet接口定义了在servlet的生命周期中特定时间以及特定顺序被调用的方法。

servlet的解析和载入\r

servlet引擎解析并载入一个servlet,这个过程可以发生在引擎启动时,需要一个servlet去响应请求时,以及在此之间的任何时候。

servlet引擎利用java类载入工具载入一个servlet,servlet引擎可以从一个本地的文件系统、一个远程的文件系统以及网络载入servlet。

servlet的初始化

servlet引擎载入servlet后,servlet引擎必须对servlet进行初始化,在这一过程中,你可以读取一些固定存储的数据、初始化jdbc的连接以及建立与其他资源的连接。

在初始化过程中,javax.servlet.servlet接口的init()方法提供了servlet的初始化信息。这样,servlet可以对自己进行配置。

init()方法获得了一个servlet配置对象(servletconfig)。这个对象在servlet引擎中执行,并允许servlet通过它获处相关参数。这个对象使得servlet能够访问servletcontext对象。

servlet处理请求\r

servlet被初始化之后,它已经可以处理来自客户端的请求,每一个来自客户端的请求都被描述成一个servletrequest对象,servlet的响应被描述成一个servletresponse对象。

当客户端发出请求时,servlet引擎传递给servlet一个servletrequest对象和一个servletresponse对象,这两个对象作为参数传递到service()方法中。

servlet也可以执行servletrequest接口和servletresponse接口。servletrequest接口使得servlet有权使用客户端发出的请求。servlet可以通过servletinputstream对象读取请求信息。

servletresponse接口允许servlet建立响应头和状态代码。通过执行这个接口,servlet有权使用servletoutputstream类来向客户端返回数据。

多线程和映射\r

在多线程的环境下,servlet必须能处理许多同时发生的请求。例外的情况是这个servlet执行了singlethreadmodel接口,如果是那样的话,servlet只能同时处理一个请求。

servlet依照servlet引擎的映射来响应客户端的请求。一个映射对包括一个servlet实例以及一个servlet返回数据的url,例如:helloservlet with /hello/index.html。

然而,一个映射可能是由一个url和许多servlet实例组成,例如:一个分布式的servlet引擎可能运行在不止一个的服务器中,这样的话,每一个服务器中都可能有一个servlet实例,以平衡进程的载入。作为一个servlet的开发者,你不能假定一个servlet只有一个实例。

servlet的卸载

servlet引擎并不必需保证一个servlet在任何时候或在服务开启的任何时候都被载入。servlet引擎可以自由的在任何时候使用或清除一个servlet。因此,我们不能依赖一个类或实例来存储重要的信息。

当servlet引擎决定卸载一个servlet时(例如,如果这个引擎被关闭或者需要让资源),这个引擎必须允许servlet释放正在使用的资源并存储有关资料。为了完成以上工作,引擎会调用servlet的destroy()方法。

在卸载一个servlet之前,servlet引擎必须等待所有的service()方法完成或超时结束(servlet引擎会对超时作出定义)。当一个servlet被卸载时,引擎将不能给servlet发送任何请求。引擎必须释放servlet并完成无用存储单元的收集

servlet映射技术\r

作为一个servlet引擎的开发者,你必须对于如何映射客户端的请求到servlet有大量的适应性。这份说明文档不规定映射如何发生。但是,你必须能够自由地运用下面的所有技术:

映射一个servlet到一个url

例如,你可以指定一个特殊的servlet它仅被来自/feedback/index.html的请求调用。

映射一个servlet到以一个指定的目录名开始的所有url

例如,你可以映射一个servlet到/catalog,这样来自/catalog/、 /catalog/garden和/catalog/housewares/index.html的请求都会被映射到这个servlet。但是来自/catalogtwo 或/catalog.html的请求没被映射。

映射一个servlet到所有以一个特定的字段结尾的所有url

例如,你可以映射一个来自于所有以in.thtml结尾的请求到一个特定的servlet。

映射一个servlet到一个特殊的url /servlet/servlet_name。

例如,如果你建立了一个名叫listattributes的servlet,你可以通过使用/servlet/listattributes来访问这个servlet。

通过类名调用servlet

例如,如果servlet引擎接收了来自/servlet/com.foo.servlet.mailservlet的请求,servlet引擎会载入这个com.foo.servlet.mailservlet类,建立实例,并通过这个servlet来处理请求。

servlet环境

servletcontext接口定义了一个servlet环境对象,这个对象定义了一个在servlet引擎上的servlet的视图。通过使用这个对象,servlet可以记录事件、得到资源并得到来自servlet引擎的类(例如requestdispatcher对象)。一个servlet只能运行在一个servlet环境中,但是不同的servlet可以在servlet引擎上有不同的视图。

如果servlet引擎支持虚拟主机,每个虚拟主机有一个servlet环境。一个servlet环境不能在虚拟主机之间共享。

servlet引擎能够允许一个servlet环境有它自己的活动范围。

例如,一个servlet环境是属于bank应用的,它将被映射到/bank目录下。在这种情况下,一个对getcontext方法的调用会返回/bank的servlet环境。

http会话

http是一个没有状态的协议。要建立一个有效的web服务应用,你必须能够识别一个连续的来自远端的客户机的唯一的请求。随着时间的过去,发展了许多会话跟踪的技术,但是使用起来都比较麻烦。

java servlet api提供了一个简单的接口,通过这个接口,servlet引擎可以有效地跟踪用户的会话。

建立session

因为http是一个请求-响应协议,一个会话在客户机加入之前会被认为是一个新的会话。加入的意思是返回会话跟踪信息到服务器中,指出会话已被建立。在客户端加入之前,我们不能判断下一个客户端请求是目前会话的一部分。

在下面的情况下,session会被认为是新的session。

客户端的session在此之前还不知道

客户端选择不加入session,例如,如果客户端拒绝接收来自服务器的cookie

作为一个servlet的开发者,你必须决定你的web应用是否处理客户机不加入或不能加入session。服务器会在web服务器或servlet规定的时间内维持一个session对象。当session终止时,服务器会释放session对象以及所有绑定在session上的对象。

绑定对象到session中

如果有助于你处理应用的数据需求,你也许需要绑定对象到session中,你可以通过一个唯一的名字绑定任何的对象到session中,这时,你需要使用httpsession对象。任何绑定到session上的对象都可以被处理同一会话的servlet调用。

有些对象可能需要你知道什么时候会被放置到session中或从session中移开。你可以通过使用httpsessionbindinglistener接口获得这些信息。当你的应用存储数据到session中,或从session中清除数据,servlet都会通过httpsessionbindinglistener检杳什么类被绑定或被取消绑定。这个接口的方法会通报被绑定或被取消绑定的对象。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » Java Servlet API说明文档(2.1a版)(一)-JSP教程,Jsp/Servlet
分享到: 更多 (0)