Java EEservlet API.docx
- 文档编号:30770140
- 上传时间:2023-08-23
- 格式:DOCX
- 页数:50
- 大小:36.69KB
Java EEservlet API.docx
《Java EEservlet API.docx》由会员分享,可在线阅读,更多相关《Java EEservlet API.docx(50页珍藏版)》请在冰豆网上搜索。
JavaEEservletAPI
目录
1Servet资料2
1.1绪言2
1.2谁需要读这份文档2
1.3JavaServletAPI的组成2
1.4有关规范2
1.5有关JavaServlets3
1.6JavaServlet概论3
1.7Servlet的生命周期5
1.8Servlet的解析和载入5
1.9Servlet的初始化5
1.10Servlet处理请求5
1.11多线程和映射6
1.12Servlet的卸载6
1.13Servlet映射技术6
1.14通过类名调用Servlet7
1.15Servlet环境7
1.16HTTP会话8
1.17建立Session8
2API介绍9
2.1RequestDispatcher接口9
2.2Servlet接口。
10
2.3ServletConfig接口11
2.4ServletContext接口11
2.5ServletRequest接口15
2.6ServletResponse接口17
2.7SingleThreadModel接口18
2.8GenericServlet类18
2.9ServletInputStream类19
2.10ServletOutputStream类19
2.11ServletException类20
2.12UnavailableException类22
2.13HttpServletRequest接口23
2.14HttpServletResponse接口25
2.15HttpSession接口28
2.16HttpSessionBindingListener接口30
2.17HttpSessionContext接口30
2.18Cookie类30
2.19HttpServlet类\32
2.20HttpSessionBindingEvent类34
2.21HttpUtils类35
Servet资料
绪言
这是一份关于2.1版JavaServletAPI的说明文档,作为对这本文档的补充,你可以到
谁需要读这份文档
这份文档描述了JavaServletAPI的最新版本2.1版。
所以,这本书对于Servlet的开发者及servlet引擎的开发者同样适用。
JavaServletAPI的组成
JavaServletAPI由两个软件包组成:
一个是对应HTTP的软件包,另一个是不对应HTTP的通用的软件包。
这两个软件包的同时存在使得JavaServletAPI能够适应将来的其他请求-响应的协议。
这份文档以及刚才提及的Javadoc格式的文档都描述了这两个软件包,Javadoc格式的文档还描述了你应该如何使用这两个软件包中的所有方法。
有关规范
你也许对下面的这些Internet规范感兴趣,这些规范将直接影响到ServletAPI的发展和执行。
你可以从http:
//info.internet.isi.edu/7c/in-notes/rfc/.cache找到下面提到的所有这些RFC规范。
RFC1738统一资源定位器(URL)
RFC1808相关统一资源定位器
RFC1945超文本传输协议--HTTP/1.0
RFC2045多用途Internet邮件扩展(多用途网际邮件扩充协议(MIME))第一部分:
Internet信息体格式
RFC2046多用途Internet邮件扩展(多用途网际邮件扩充协议(MIME))第二部分:
媒体类型
RFC2047多用途网际邮件扩充协议(MIME)(多用途Internet邮件扩展)第三部分:
信息标题扩展用于非ASCII文本
RFC2048多用途Internet邮件扩展(多用途网际邮件扩充协议(MIME))第四部分:
注册步骤
RFC2049多用途Internet邮件扩展(多用途网际邮件扩充协议(MIME))第五部分:
一致性标准和例子
RFC2068超文本传输协议--HTTP/1.1
RFC2069一个扩展HTTP:
摘要访问鉴定
RFC2109HTTP状态管理机制
RFC2145HTTP版本号的使用和解释
RFC2324超文本CoffeePot控制协议(HTCPCP/1.0)
万维网协会(http:
//www.w3.org)管理着这些协议的规范和执行。
有关JavaServlets
JavaTMservlets是一个不受平台约束的Java小程序,它可以被用来通过多种方法扩充一个Web服务器的功能。
你可以把Servlet理解成Server上的applets,它被编译成字节码,这样它就可以被动态地载入并用效地扩展主机的处理能力。
Servlet与applets不同的地方是,它不运行在Web浏览器或其他图形化的用户界面上。
Servlet通过servlet引擎运行在Web服务器中,以执行请求和响应,请求、响应的典型范例是HTTP协议。
一个客户端程序,可以是一个Web浏览器,或者是非其他的可以连接上Internet的程序,它会访问Web服务器并发出请求。
这个请求被运行在Web服务器上的Servlet引擎处理,并返回响应到Servlet。
Servlet通过HTTP将这个响应转发到客户端。
在功能上,Servlet与CGI、NSAPI有点类似,但是,与他们不同的是:
Servlet具有平台无关性。
JavaServlet概论
Servlet与其他普通的server扩展机制有以下进步:
因为它采用了不同的进程处理模式,所以它比CGI更快。
它使用了许多Web服务器都支持的标准的API。
它继承了Java的所有优势,包括易升级以及平台无关性。
它可以调用Java所提供的大量的API的功能模块。
这份文档说明了JavaServletAPI的类和接口的方法。
有关更多的信息,请参看下面的API说明。
Servlet的生命周期
一个Javaservlet具有一个生命周期,这个生命周期定义了一个Servlet如何被载入并被初始化,如何接收请求并作出对请求的响应,如何被从服务中清除。
Servlet的生命周期被javax.servlet.Servlet这个接口所定义。
所有的JavaServlet都会直接地或间接地执行javax.servlet.Servlet接口,这样它才能在一个Servlet引擎中运行。
Servlet引擎是Web服务器按照JavaServletAPI定制的扩展。
Servlet引擎提供网络服务,能够理解MIME请求,并提供一个运行Servlet的容器。
javax.servlet.Servlet接口定义了在Servlet的生命周期中特定时间以及特定顺序被调用的方法。
Servlet的解析和载入
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处理请求
Servlet被初始化之后,它已经可以处理来自客户端的请求,每一个来自客户端的请求都被描述成一个ServletRequest对象,Servlet的响应被描述成一个ServletResponse对象。
当客户端发出请求时,Servlet引擎传递给Servlet一个ServletRequest对象和一个ServletResponse对象,这两个对象作为参数传递到service()方法中。
Servlet也可以执行ServletRequest接口和ServletResponse接口。
ServletRequest接口使得Servlet有权使用客户端发出的请求。
Servlet可以通过ServletInputStream对象读取请求信息。
ServletResponse接口允许Servlet建立响应头和状态代码。
通过执行这个接口,Servlet有权使用ServletOutputStream类来向客户端返回数据。
多线程和映射
在多线程的环境下,Servlet必须能处理许多同时发生的请求。
例外的情况是这个Servlet执行了SingleThreadModel接口,如果是那样的话,Servlet只能同时处理一个请求。
Servlet依照Servlet引擎的映射来响应客户端的请求。
一个映射对包括一个Servlet实例以及一个Servlet返回数据的URL,例如:
HelloServletwith/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映射技术
作为一个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服务应用,你必须能够识别一个连续的来自远端的客户机的唯一的请求。
随着时间的过去,发展了许多会话跟踪的技术,但是使用起来都比较麻烦。
JavaServletAPI提供了一个简单的接口,通过这个接口,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检杳什么类被绑定或被取消绑定。
这个接口的方法会通报被绑定或被取消绑定的对象。
API对象的说明
这一部分包含了对JavaServletAPI的全部类和接口的详细说明。
这个说明与JavadocAPI差不多,但是这份文档提供了更多的信息。
API包含了两个软件包,十二个接口和九个类。
软件包:
javax.servlet
所包含的接口:
RequestDispatcher;Servlet;ServletConfig;ServletContext;ServletRequest;ServletResponse;SingleThreadModel。
所包含的类:
GenericServlet;ServletInputStream;ServletOutputStream;ServletException;UnavailableException。
API介绍
RequestDispatcher接口
定义:
publicinterfaceRequestDispatcher;
定义一个对象,从客户端接收请求,然后将它发给服务器的可用资源(例如Servlet、CGI、HTML文件、JSP文件)。
Servlet引擎创建requestdispatcher对象,用于封装由一个特定的URL定义的服务器资源。
这个接口是专用于封装Servlet的,但是一个Servlet引擎可以创建requestdispatcher对象用于封装任何类型的资源。
requestdispatcher对象是由Servlet引擎建立的,而不是由Servlet开发者建立的。
方法
1、forward
publicvoidforward(ServletRequestrequest,ServletReponseresponse)
throwsServletException,IOException;
被用来从这个Servlet向其它服务器资源传递请求。
当一个Servlet对响应作了初步的处理,并要求其它的对象对此作出响应时,可以使用这个方法。
当request对象被传递到目标对象时,请求的URL路径和其他路径参数会被调整为反映目标对象的目标URL路径。
如果已经通过响应返回了一个ServletOutputStream对象或PrintWriter对象,这个方法将不能使用,否则,这个方法会抛出一个IllegalStateException。
2、include
publicvoidinclude(ServletRequestrequest,ServletResponseresponse)
throwsServletException,IOException
用来包括发送给其他服务器资源的响应的内容。
本质上来说,这个方法反映了服务器端的内容。
请求对象传到目标对象后会反映调用请求的请求URL路径和路径信息。
这个响应对象只能调用这个Servlet的ServletOutputStream对象和PrintWriter对象。
一个调用include的Servlet不能设置头域,如果这个Servlet调用了必须设置头域的方法(例如cookie),这个方法将不能保证正常使用。
作为一个Servlet开发者,你必须妥善地解决那些可能直接存储头域的方法。
例如,即使你使用会话跟踪,为了保证session的正常工作,你必须在一个调用include的Servlet之外开始你的session
Servlet接口。
定义
publicinterfaceServlet
这个接口定义了一个Servlet:
一个在Web服务器上继承了这个功能的Java类。
方法
1、init
publicvoidinit(ServletConfigconfig)throwsServletException;
Servlet引擎会在Servlet实例化之后,置入服务之前精确地调用init方法。
在调用service方法之前,init方法必须成功退出。
如果init方法抛出一个ServletException,你不能将这个Servlet置入服务中,如果init方法在超时范围内没完成,我们也可以假定这个Servlet是不具备功能的,也不能置入服务中。
2、service
publicvoidservice(ServletRequestrequest,ServletResponseresponse)
throwsServletException,IOException;
Servlet引擎调用这个方法以允许Servlet响应请求。
这个方法在Servlet未成功初始化之前无法调用。
在Servlet被初始化之前,Servlet引擎能够封锁未决的请求。
在一个Servlet对象被卸载后,直到一个新的Servelt被初始化,Servlet引擎不能调用这个方法
3、destroy
publicvoiddestroy();
当一个Servlet被从服务中去除时,Servlet引擎调用这个方法。
在这个对象的service方法所有线程未全部退出或者没被引擎认为发生超时操作时,destroy方法不能被调用。
4、getServletConfig
publicServletConfiggetServletConfig();
返回一个ServletConfig对象,作为一个Servlet的开发者,你应该通过init方法存储ServletConfig对象以便这个方法能返回这个对象。
为了你的便利,GenericServlet在执行这个接口时,已经这样做了。
5、getServletInfo
publicStringgetServletInfo();
允许Servlet向主机的Servlet运行者提供有关它本身的信息。
返回的字符串应该是纯文本格式而不应有任何标志(例如HTML,XML等)。
ServletConfig接口
定义
publicinterfaceServletConfig
这个接口定义了一个对象,通过这个对象,Servlet引擎配置一个Servlet并且允许Servlet获得一个有关它的ServletContext接口的说明。
每一个ServletConfig对象对应着一个唯一的Servlet。
方法
1、getInitParameter
publicStringgetInitParameter(Stringname);
这个方法返回一个包含Servlet指定的初始化参数的String。
如果这个参数不存在,返加空值。
2、getInitParameterNames
publicEnumerationgetInitParameterNames();
这个方法返回一个列表String对象,该对象包括Servlet的所有初始化参数名。
如果Servlet没有初始化参数,getInitParameterNames返回一个空的列表。
3、getServletContext
publicServletContextgetServletContext();
返回这个Servlet的ServletContext对象。
ServletContext接口
定义
publicinterfaceServletContext
定义了一个Servlet的环境对象,通过这个对象,Servlet引擎向Servlet提供环境信息。
一个Servlet的环境对象必须至少与它所驻留的主机是一一对应的。
在一个处理多个虚拟主机的Servlet引擎中(例如,使用了HTTP1.1的主机头域),每一个虚拟主机必须被视为一个单独的环境。
此外,Servlet引擎还可以创建对应于一组Servlet的环境对象。
方法
1、getAttribute
publicObjectgetAttr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java EEservlet API