Java Servlet API 说明文档

有关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 检杳什么类被绑定或被取消绑定。这个接口的方法
会通报被绑定或被取消绑定的对象。
Java Servlet API 说明文档(2.1a 版)(二)
API 对象的说明/r
这一部分包含了对Java Servlet API 的全部类和接口的详细说明。这个说明与
Javadoc API 差不多,但是这份文档提供了更多的信息。
API 包含了两个软件包,十二个接口和九个类。
软件包:javax.servlet
所包含的接口:RequestDispatcher;Servlet;ServletConfig;ServletContext;
ServletRequest;ServletResponse;SingleThreadModel。
所包含的类: GenericServlet ; ServletInputStream ; ServletOutputStream ;
ServletException;UnavailableException。
一、RequestDispatcher 接口:
定义:
public interface RequestDispatcher;
定义一个对象,从客户端接收请求,然后将它发给服务器的可用资源(例如
Servlet、CGI、HTML 文件、JSP 文件)。Servlet 引擎创建request dispatcher 对
象,用于封装由一个特定的URL 定义的服务器资源。
这个接口是专用于封装Servlet 的,但是一个Servlet 引擎可以创建request
dispatcher 对象用于封装任何类型的资源。
request dispatcher 对象是由Servlet 引擎建立的,而不是由Servlet 开发者建立的。
方法
1、forward
public void forward(ServletRequest request, ServletResponse response)
throws ServletException, IOException;
被用来从这个Servlet 向其它服务器资源传递请求。当一个Servlet 对响应作了
初步的处理,并要求其它的对象对此做出响应时,可以使用这个方法。
当request 对象被传递到目标对象时,请求的URL 路径和其他路径参数会被调
整为反映目标对象的目标URL 路径。
如果已经通过响应返回了一个ServletOutputStream 对象或PrintWriter 对象,这
个方法将不能使用,否则,这个方法会抛出一个IllegalStateException。
2、include
public void include(ServletRequest request, ServletResponse response)
throws ServletException, IOException
用来包括发送给其他服务器资源的响应的内容。本质上来说,这个方法反映了
服务器端的内容。
请求对象传到目标对象后会反映调用请求的请求URL 路径和路径信息。这个响
应对象只能调用这个Servlet 的ServletOutputStream 对象和PrintWriter 对象。
一个调用include 的Servlet 不能设置头域,如果这个Servlet 调用了必须设置头
域的方法(例如cookie),这个方法将不能保证正常使用。作为一个Servlet 开
发者,你必须妥善地解决那些可能直接存储头域的方法。例如,即使你使用会
话跟踪,为了保证session 的正常工作,你必须在一个调用include 的Servlet 之
外开始你的session
二、Servlet 接口。
定义/r
public interface Servlet
这个接口定义了一个Servlet:一个在Web 服务器上继承了这个功能的Java 类。
方法
1、init
public void init(ServletConfig config) throws ServletException;
Servlet 引擎会在Servlet 实例化之后,置入服务之前精确地调用init 方法。在调
用service 方法之前,init 方法必须成功退出。
如果init 方法抛出一个ServletException,你不能将这个Servlet 置入服务中,如
果init 方法在超时范围内没完成,我们也可以假定这个Servlet 是不具备功能的,
也不能置入服务中。
2、service
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException;
Servlet 引擎调用这个方法以允许Servlet 响应请求。这个方法在Servlet 未成功
初始化之前无法调用。在Servlet 被初始化之前,Servlet 引擎能够封锁未决的请
求。
在一个Servlet 对象被卸载后,直到一个新的Servlet 被初始化,Servlet 引擎不
能调用这个方法
3、destroy
public void destroy();
当一个Servlet 被从服务中去除时,Servlet 引擎调用这个方法。在这个对象的
service 方法所有线程未全部退出或者没被引擎认为发生超时操作时,destroy 方
法不能被调用。
4、getServletConfig
public ServletConfig getServletConfig();
返回一个ServletConfig 对象,作为一个Servlet 的开发者,你应该通过init 方法
存储ServletConfig 对象以便这个方法能返回这个对象。为了你的便利,
GenericServlet 在执行这个接口时,已经这样做了。
5、getServletInfo
public String getServletInfo();
允许Servlet 向主机的Servlet 运行者提供有关它本身的信息。返回的字符串应
该是纯文本格式而不应有任何标志(例如HTML,XML 等)。
三、ServletConfig 接口
定义/r
public interface ServletConfig
这个接口定义了一个对象,通过这个对象,Servlet 引擎配置一个Servlet 并且允
许Servlet 获得一个有关它的ServletContext 接口的说明。每一个ServletConfig
对象对应着一个唯一的Servlet。
方法
1、getInitParameter
public String getInitParameter(String name);
这个方法返回一个包含Servlet 指定的初始化参数的String。如果这个参数不存
在,返加空值。
2、getInitParameterNames
public Enumeration getInitParameterNames();
这个方法返回一个列表String 对象,该对象包括Servlet 的所有初始化参数名。
如果Servlet 没有初始化参数,getInitParameterNames 返回一个空的列表。
3、getServletContext
public ServletContext getServletContext();
返回这个Servlet 的ServletContext 对象。
四、ServletContext 接口
定义/r
public interface ServletContext
定义了一个Servlet 的环境对象,通过这个对象,Servlet 引擎向Servlet 提供环
境信息。
一个Servlet 的环境对象必须至少与它所驻留的主机是一一对应的。在一个处理
多个虚拟主机的Servlet 引擎中(例如,使用了HTTP1.1 的主机头域),每一个
虚拟主机必须被视为一个单独的环境。此外,Servlet 引擎还可以创建对应于一
组Servlet 的环境对象。
方法
1、getAttribute
public Object getAttribute(String name);
返回Servlet 环境对象中指定的属性对象。如果该属性对象不存在,返回空值。
这个方法允许访问有关这个Servlet 引擎的在该接口的其他方法中尚未提供的
附加信息。
2、getAttributeNames
public Enumeration getAttributeNames();
返回一个Servlet 环境对象中可用的属性名的列表。
3、getContext
public ServletContext getContext(String uripath);
返回一个Servlet 环境对象,这个对象包括了特定URI 路径的Servlets 和资源,
如果该路径不存在,则返回一个空值。URI 路径格式是/dir/dir/filename.ext。
为了安全,如果通过这个方法访问一个受限制的Servlet 的环境对象,会返回一
个空值。
4、getMajorVersion
public int getMajorVersion();
返回Servlet 引擎支持的Servlet API 的主版本号。例如对于2.1 版,这个方法会
返回一个整数2。
5、getMinorVersion
public int getMinorVersion();
返回Servlet 引擎支持的Servlet API 的次版本号。例如对于2.1 版,这个方法会
返回一个整数2。
6、getMimeType
public String getMimeType(String file);
返回指定文件的MIME 类型,如果这种MIME 类型未知,则返回一个空值。
MIME 类型是由Servlet 引擎的配置决定的。
7、getRealPath
public String getRealPath(String path);
一个符合URL 路径格式的指定的虚拟路径的格式是:/dir/dir/filename.ext。用这
个方法,可以返回与一个符合该格式的虚拟路径相对应的真实路径的String。
这个真实路径的格式应该适合于运行这个Servlet 引擎的计算机(包括其相应的
路径解析器)。
不管是什么原因,如果这一从虚拟路径转换成实际路径的过程不能执行,该方
法将会返回一个空值。
8、getResource
public URL getResource(String uripath);
返回一个URL 对象, 该对象反映位于给定的URL 地址( 格式:
/dir/dir/filename.ext)的Servlet 环境对象已知的资源。无论URLStreamHandlers
对于访问给定的环境是不是必须的,Servlet 引擎都必须执行。如果给定的路径
的Servlet 环境没有已知的资源,该方法会返回一个空值。
这个方法和java.lang.Class 的getResource 方法不完全相同。java.lang.Class 的
getResource 方法通过装载类来寻找资源。而这个方法允许服务器产生环境变量
给任何资源的任何Servlet,而不必依赖于装载类、特定区域等等。
9、getResourceAsStream
public InputStream getResourceAsStream(String uripath);
返回一个InputStream 对象,该对象引用指定的URL 的Servlet 环境对象的内容。
如果没找到Servlet 环境变量,就会返回空值,URL 路径应该具有这种格式:
/dir/dir/filename.ext。
这个方法是一个通过getResource 方法获得URL 对象的方便的途径。请注意,
当你使用这个方法时,meta-information(例如内容长度、内容类型)会丢失。
10、getRequestDispatcher
public RequestDispatcher getRequestDispatcher(String uripath);
如果这个指定的路径下能够找到活动的资源(例如一个Servlet,JSP 页面,CGI
等等)就返回一个特定URL 的RequestDispatcher 对象,否则,就返回一个空值,
Servlet 引擎负责用一个request dispatcher 对象封装目标路径。这个request
dispatcher 对象可以用来完全请求的传送。
11、getServerInfo
public String getServerInfo();
返回一个String 对象,该对象至少包括Servlet 引擎的名字和版本号。
12、log
public void log(String msg);
public void log(String msg, Throwable t);
public void log(Exception exception, String msg); // 这种用法将被取消/r
写指定的信息到一个Servlet 环境对象的log 文件中。被写入的log 文件由Servlet
引擎指定,但是通常这是一个事件log。当这个方法被一个异常调用时,log 中
将包括堆栈跟踪。
13、setAttribute
public void setAttribute(String name, Object o);
给予Servlet 环境对象中你所指定的对象一个名称。
14、removeAttribute
public void removeAttribute(String name);
从指定的Servlet 环境对象中删除一个属性。
注:以下几个方法将被取消/r
15、getServlet
public Servlet getServlet(String name) throws ServletException;
最初用来返回一个指定名称的Servlet,如果没找到就返回一个空值。如果这个
Servlet 能够返回,这就意味着它已经被初始化,而且已经可以接受service 请求。
这是一个危险的方法。当调用这个方法时,可能并不知道Servlet 的状态,这就
可能导致有关服务器状态的问题。而允许一个Servlet 访问其他Servlet 的这个
方法也同样的危险。
现在这个方法返回一个空值,为了保持和以前版本的兼容性,现在这个方法还
没有被取消。在以后的API 版本中,该方法将被取消。
16、getServletNames
public Enumeration getServletNames();
最初用来返回一个String 对象的列表,该列表表示了在这个Servlet 环境下所有
已知的Servlet 对象名。这个列表总是包含这个Servlet 自身。
基于与上一个方法同样的理由,这也是一个危险的方法。
现在这个方法返回一个空的列表。为了保持和以前版本的兼容性,现在这个方
法还没有被取消。在以后的API 版本中,该方法将被取消。
17、getServlets
public Enumeration getServlets();
最初用来返回在这个Servelet 环境下所有已知的Servlet 对象的列表。这个列表
总是包含这个Servlet 自身。
基于与getServlet 方法同样的理由,这也是一个危险的方法。
现在这个方法返回一个空的列表。为了保持和以前版本的兼容性,现在这个方
法还没有被取消。在以后的API 版本中,该方法将被取消。
五、ServletRequest 接口
定义/r
public interface ServletRequest
定义一个Servlet 引擎产生的对象,通过这个对象,Servlet 可以获得客户端请求
的数据。这个对象通过读取请求体的数据提供包括参数的名称、值和属性以及
输入流的所有数据。
方法
1、getAttribute
public Object getAttribute(String name);
返回请求中指定属性的值,如果这个属性不存在,就返回一个空值。这个方法
允许访问一些不提供给这个接口中其他方法的请求信息以及其他Servlet 放置
在这个请求对象内的数据。
2、getAttributeNames
public Enumeration getAttributeNames();
返回包含在这个请求中的所有属性名的列表。
3、getCharacterEncoding
public String getCharacterEncoding();
返回请求中输入内容的字符编码类型,如果没有定义字符编码类型就返回空值。
4、getContentLength
public int getContentLength();
请求内容的长度,如果长度未知就返回-1。
5、getContentType
public String getContentType();
返回请求数据体的MIME 类型,如果类型未知返回空值。
6、getInputStream
public ServletInputStream getInputStream() throws IOException;
返回一个输入流用来从请求体读取二进制数据。如果在此之前已经通过
getReader 方法获得了要读取的结果,这个方法会抛出一个IllegalStateException。
7、getParameter
public String getParameter(String name);
以一个String 返回指定的参数的值,如果这个参数不存在返回空值。例如,在
一个HTTP Servlet 中,这个方法会返回一个指定的查询语句产生的参数的值或
一个被提交的表单中的参数值。如果一个参数名对应着几个参数值,这个方法
只能返回通过getParameterValues 方法返回的数组中的第一个值。因此,如果这
个参数有(或者可能有)多个值,你只能使用getParameterValues 方法。
8、getParameterNames
public Enumeration getParameterNames();
返回所有参数名的String 对象列表,如果没有输入参数,该方法返回一个空值。
9、getParameterValues
public String[] getParameterValues(String name);
通过一个String 对象的数组返回指定参数的值,如果这个参数不存在,该方法
返回一个空值。
10、getProtocol
public String getProtocol();
返回这个请求所用的协议,其形式是协议/主版本号.次版本号。例如对于一个
HTTP1.0 的请求,该方法返回HTTP/1.0。
11、getReader
public BufferedReader getReader() throws IOException;
这个方法返回一个buffered reader 用来读取请求体的实体,其编码方式依照请
求数据的编码方式。如果这个请求的输入流已经被getInputStream 调用获得,
这个方法会抛出一个IllegalStateException。
12、getRemoteAddr
public String getRemoteAddr();
返回发送请求者的IP 地址。
13、getRemoteHost
public String getRemoteHost();
返回发送请求者的主机名称。如果引擎不能或者选择不解析主机名(为了改善
性能),这个方法会直接返回IP 地址。
14、getScheme
public String getScheme();
返回请求所使用的URL 的模式。例如,对于一个HTTP 请求,这个模式就是
http。
15、getServerName
public String getServerName();
返回接收请求的服务器的主机名。
16、getServerPort
public int getServerPort();
返回接收请求的端口号。
17、setAttribute
public void setAttribute(String name, Object object);
这个方法在请求中添加一个属性,这个属性可以被其他可以访问这个请求对象
的对象(例如一个嵌套的Servlet)使用。
注:以下方法将被取消/r
getRealPath
public String getRealPath(String path);
返回与虚拟路径相对应的真实路径,如果因为某种原因,这一过程不能进行,
该方法将返回一个空值。
这个方法和ServletContext 接口中的getRealPath 方法重复。在2.1 版中,
ServletContext 接口将阐明一个Servlet 所能用的所有的路径的映射。该方法执
行的结果将会与ServletContext 中getRealPath 方法的结果完全一样。
六、ServletResponse 接口
定义/r
public interface ServletResponse
定义一个Servlet 引擎产生的对象,通过这个对象,Servlet 对客户端的请求作出
响应。这个响应应该是一个MIME 实体,可能是一个HTML 页、图象数据或其
他MIME 的格式。
方法
1、getCharacterEncoding
public String getCharacterEncoding();
返回MIME 实体的字符编码。这个字符编码可以是指定的类型,也可以是与请
求头域所反映的客户端所能接受的字符编码最匹配的类型。在HTTP 协议中,
这个信息被通过Accept-Charset 传送到Servlet 引擎。
有关字符编码和MIME 的更多信息请参看RFC 2047。
2、getOutputStream
public ServletOutputStream getOutputStream() throws IOException;
返回一个记录二进制的响应数据的输出流。
如果这个响应对象已经调用getWriter,将会抛出IllegalStateException。
3、getWriter
public PrintWriter getWriter throws IOException;
这个方法返回一个PrintWriter 对象用来记录格式化的响应实体。如果要反映使
用的字符编码,必须修改响应的MIME 类型。在调用这个方法之前,必须设定
响应的content 类型。
如果没有提供这样的编码类型,会抛出一个UnsupportedEncodingException,如
果这个响应对象已调用getOutputStream,会抛出一个getOutputStream。
4、setContentLength
public void setContentLength(int length);
设置响应的内容的长度,这个方法会覆盖以前对内容长度的设定。
为了保证成功地设定响应头的内容长度,在响应被提交到输出流之前必须调用
这个方法。
5、setContentType
public void setContentType(String type);
这个方法用来设定响应的content 类型。这个类型以后可能会在另外的一些情况
下被隐式地修改,这里所说的另外的情况可能当服务器发现有必要的情况下对
MIME 的字符设置。
为了保证成功地设定响应头的content 类型,在响应被提交到输出流之前必须调
用这个方法。
七、SingleThreadModel 接口
定义/r
public interface SingleThreadModel;
这是一个空接口,它指定了系统如何处理对同一个Servlet 的调用。如果一个
Servlet 被这个接口指定,那么在这个Servlet 中的service 方法中将不会有两个
线程被同时执行。
Servlet 可以通过维持一个各自独立的Servlet 实例池,或者通过只让Servlet 的
service 中只有一个线程的方法来实现这个保证。
八、GenericServlet 类/r
public abstract class GenericServlet implements Servlet,
ServletConfig, Serializable;
这个类的存在使得编写Servlet 更加方便。它提供了一个简单的方案,这个方案
用来执行有关Servlet 生命周期的方法以及在初始化时对ServletConfig 对象和
ServletContext 对象进行说明。
方法
1、destroy
public void destroy();
在这里destroy 方法不做任何其他的工作。
2、getInitParameter
public String getInitParameter(String name);
这是一个简便的途径,它将会调用ServletConfig 对象的同名的方法。
3、getInitParameterNames
public Enumeration getInitParameterNames();
这是一个简便的途径,它将会调用ServletConfig 对象的同名的方法。
4、getServletConfig
public ServletConfig getServletConfig();
返回一个通过这个类的init 方法产生的ServletConfig 对象的说明。
5、getServletContext
public ServletContext getServletContext();
这是一个简便的途径,它将会调用ServletConfig 对象的同名的方法。
6、getServletInfo
public String getServletInfo();
返回一个反映Servlet 版本的String。
7、init
public void init() throws ServletException;
public void init(ServletConfig config) throws ServletException;
init(ServletConfig config)方法是一个对这个Servlet 的生命周期进行初始化的简
便的途径。
init()方法是用来让你对GenericServlet 类进行扩充的,使用这个方法时,你不需
要存储config 对象,也不需要调用super.init(config)。
init(ServletConfig config)方法会存储config 对象然后调用init()。如果你重载了
这个方法,你必须调用super.init(config),这样GenericServlet 类的其他方法才
能正常工作。
8、log
public void log(String msg);
public void log(String msg, Throwable cause);
通过Servlet content 对象将Servlet 的类名和给定的信息写入log 文件中。
9、service
public abstract void service(ServletRequest request, ServletResponse
response) throws ServletException, IOException;
这是一个抽象的方法,当你扩展这个类时,为了执行网络请求,你必须执行它。
九、ServletInputStream 类/r
定义/r
public abstract class ServletInputStream extends InputStream
这个类定义了一个用来读取客户端的请求信息的输入流。这是一个Servlet 引擎
提供的抽象类。一个Servlet 通过使用ServletRequest 接口获得了对一个
ServletInputStream 对象的说明。
这个类的子类必须提供一个从InputStream 接口读取有关信息的方法。
方法
1、readLine
public int readLine(byte[] b, int off, int len) throws IOException;
从输入流的指定的偏移量开始将指定长度的字节读入到指定的数组中。如果该
行所有请求的内容都已被读取,这个读取的过程将结束。如果是遇到了新的一
行,新的一行的首个字符也将被读入到数组中。
十、ServletOutputStream 类/r
定义/r
public abstract class ServletOutputStream extends OutputStream
这是一个由Servlet 引擎使用的抽象类。Servlet 通过使用ServletResponse 接口
的使用获得了对一个这种类型的对象的说明。利用这个输出流可以将数据返回
到客户端。
这个类的子类必须提供一个向OutputStream 接口写入有关信息的方法。
在这个接口中,当一个刷新或关闭的方法被调用时。所有数据缓冲区的信息将
会被发送到客户端,也就是说响应被提交了。请注意,关闭这种类型的对象时
不一定要关闭隐含的socket 流。
方法
1、print
public void print(String s) throws IOException;
public void print(boolean b) throws IOException;
public void print(char c) throws IOException;
public void print(int i) throws IOException;
public void print(long l) throws IOException;
public void print(float f) throws IOException;
public void print(double d) throws IOException;
输出变量到输出流中
2、println
public void println() throws IOException;
public void println(String s) throws IOException;
public void println(boolean b) throws IOException;
public void println(char c) throws IOException;
public void println(int i) throws IOException;
public void println(long l) throws IOException;
public void println(float f) throws IOException;
public void println(double d) throws IOException;
输出变量到输出流中,并增加一个回车换行符/r
十一、ServletException 类/r
定义/r
public class ServletException extends Exception
当Servlet 遇到问题时抛出的一个异常。
构造函数
public ServletException();
public ServletException(String message);
public ServletException(String message, Throwable cause);
public ServletException(Throwable cause);
构造一个新的ServletException,如果这个构造函数包括一个Throwable 参数,
这个Throwable 对象将被作为可能抛出这个异常的原因。
方法
1、getRootCause
public Throwable getRootCause();
如果配置了抛出这个异常的原因,这个方法将返回这个原因,否则返回一个空
值。
十二、UnavailableException 类/r
定义/r
public class UnavailableException extends ServletException
不论一个Servlet 是永久地还是临时地无效,都会抛出这个异常。Servlet 会记录
这个异常以及Servlet 引擎所要采取的相应措施。
临时的无效是指Servlet 在某一时间由于一个临时的问题而不能处理请求。例
如,在另一个不同的应用层的服务(可能是数据库)无法使用。这个问题可能
会自行纠正或者需要采取其他的纠正措施。
永久的无效是指除非管理员采取措施,这个Servlet 将不能处理客户端的请求。
例如,这个Servlet 配置信息丢失或Servlet 的状态被破坏。
Servlet 引擎可以安全地处理包括永久无效在内的这两种异常,但是对临时无效
的正常处理可以使得Servlet 引擎更健壮。特别的,这时对Servlet 的请求只是
被阻止(或者是被延期)一段时间,这显然要比在service 自己重新启动前完全
拒绝请求更为科学。
构造函数
public UnavailableException(Servlet servlet, String message);
public UnavailableException(int seconds, Servlet servlet,
String message);
构造一个包含指定的描述信息的新的异常。如果这个构造函数有一个关于秒数
的参数,这将给出Servlet 发生临时无效后,能够重新处理请求的估计时间。如
果不包含这个参数,这意味着这个Servlet 永久无效。
方法
1、getServlet
public Servlet getServlet();
返回报告无效的Servlet。这被Servlet 引擎用来识别受到影响的Servlet。
2、getUnavailableSeconds
public int getUnavailableSeconds();
返回Servlet 预期的无效时间,如果这个Servlet 是永久无效,返回-1。
3、isPermanent
public boolean isPermanent();
如果这个Servlet 永久无效,返回布尔值true,指示必须采取一些管理行动以使
得这个Servlet 可用。
Java Servlet API 说明文档(2.1a 版)(三)
软件包:javax.servlet.http
所包含的接口: HttpServletRequest ; HttpServletResponse ; HttpSession ;
HttpSessionBindingListener;HttpSessionContext。
所包含的类:Cookie;HttpServlet;HttpSessionBindingEvent;HttpUtils。
一、HttpServletRequest 接口
定义/
public interface HttpServletRequest extends ServletRequest;
用来处理一个对Servlet 的HTTP 格式的请求信息。
方法
1、getAuthType
public String getAuthType();
返回这个请求的身份验证模式。
2、getCookies
public Cookie[] getCookies();
返回一个数组,该数组包含这个请求中当前的所有cookie。如果这个请求中没
有cookie,返回一个空数组。
3、getDateHeader
public long getDateHeader(String name);
返回指定的请求头域的值,这个值被转换成一个反映自1970-1-1 日(GMT)以
来的精确到毫秒的长整数。
如果头域不能转换,抛出一个IllegalArgumentException。如果这个请求头域不
存在,这个方法返回-1。
4、getHeader
public String getHeader(String name);
返回一个请求头域的值。(译者注:与上一个方法不同的是,该方法返回一个字
符串)
如果这个请求头域不存在,这个方法返回-1。
5、getHeaderNames
public Enumeration getHeaderNames();
该方法返回一个String 对象的列表,该列表反映请求的所有头域名。
有的引擎可能不允许通过这种方法访问头域,在这种情况下,这个方法返回一
个空的列表。
6、getIntHeader
public int getIntHeader(String name);
返回指定的请求头域的值,这个值被转换成一个整数。
如果头域不能转换,抛出一个IllegalArgumentException。如果这个请求头域不
存在,这个方法返回-1。
7、getMethod
public String getMethod();
返回这个请求使用的HTTP 方法(例如:GET、POST、PUT)
8、getPathInfo
public String getPathInfo();
这个方法返回在这个请求的URL 的Servlet 路径之后的请求URL 的额外的路径
信息。如果这个请求URL 包括一个查询字符串,在返回值内将不包括这个查询
字符串。这个路径在返回之前必须经过URL 解码。如果在这个请求的URL 的
Servlet 路径之后没有路径信息。这个方法返回空值。
9、getPathTranslated
public String getPathTranslated();
这个方法获得这个请求的URL 的Servlet 路径之后的额外的路径信息,并将它
转换成一个真实的路径。在进行转换前,这个请求的URL 必须经过URL 解码。
如果在这个URL 的Servlet 路径之后没有附加路径信息。这个方法返回空值。
10、getQueryString
public String getQueryString();
返回这个请求URL 所包含的查询字符串。一个查询字串符在一个URL 中由一
个“?”引出。如果没有查询字符串,这个方法返回空值。
11、getRemoteUser
public String getRemoteUser
返回作了请求的用户名,这个信息用来作HTTP 用户论证。
如果在请求中没有用户名信息,这个方法返回空值。
12、getRequestedSessionId
public String getRequestedSessionId();
返回这个请求相应的session id。如果由于某种原因客户端提供的session id 是
无效的,这个session id 将与在当前session 中的session id 不同,与此同时,将
建立一个新的session。
如果这个请求没与一个session 关联,这个方法返回空值。
13、getRequestURI
public String getRequestURI();
从HTTP 请求的第一行返回请求的URL 中定义被请求的资源的部分。如果有一
个查询字符串存在,这个查询字符串将不包括在返回值当中。例如,一个请求
通过/catalog/books?id=1 这样的URL 路径访问,这个方法将返回/catalog/books。
这个方法的返回值包括了Servlet 路径和路径信息。
如果这个URL 路径中的的一部分经过了URL 编码,这个方法的返回值在返回
之前必须经过解码。
14、getServletPath
public String getServletPath();
这个方法返回请求URL 反映调用Servlet 的部分。例如,一个Servlet 被映射到
/catalog/summer 这个URL 路径,而一个请求使用了/catalog/summer/casual 这样
的路径。所谓的反映调用Servlet 的部分就是指/catalog/summer。
如果这个Servlet 不是通过路径匹配来调用。这个方法将返回一个空值。
15、getSession
public HttpSession getSession();
public HttpSession getSession(boolean create);
返回与这个请求关联的当前的有效的session。如果调用这个方法时没带参数,
那么在没有session 与这个请求关联的情况下,将会新建一个session。如果调用
这个方法时带入了一个布尔型的参数,只有当这个参数为真时,session 才会被
建立。
为了确保session 能够被完全维持。Servlet 开发者必须在响应被提交之前调用该
方法。
如果带入的参数为假,而且没有session 与这个请求关联。这个方法会返回空值。
16、isRequestedSessionIdValid
public boolean isRequestedSessionIdValid();
这个方法检查与此请求关联的session 当前是不是有效。如果当前请求中使用的
session 无效,它将不能通过getSession 方法返回。
17、isRequestedSessionIdFromCookie
public boolean isRequestedSessionIdFromCookie();
如果这个请求的session id 是通过客户端的一个cookie 提供的,该方法返回真,
否则返回假。
18、isRequestedSessionIdFromURL
public boolean isRequestedSessionIdFromURL();
如果这个请求的session id 是通过客户端的URL 的一部分提供的,该方法返回
真,否则返回假。请注意此方法与isRequestedSessionIdFromUrl 在URL 的拼写
上不同。
以下方法将被取消//r
19、isRequestedSessionIdFromUrl
public boolean isRequestedSessionIdFromUrl();
该方法被isRequestedSessionIdFromURL 代替。
二、HttpServletResponse 接口
定义//r
public interface HttpServletResponse extends ServletResponse
描述一个返回到客户端的HTTP 回应。这个接口允许Servlet 程序员利用HTTP
协议规定的头信息。
成员变量
public static final int SC_CONTINUE = 100;
public static final int SC_SWITCHING_PROTOCOLS = 101;
public static final int SC_OK = 200;
public static final int SC_CREATED = 201;
public static final int SC_ACCEPTED = 202;
public static final int SC_NON_AUTHORITATIVE_INFORMATION = 203;
public static final int SC_NO_CONTENT = 204;
public static final int SC_RESET_CONTENT = 205;
public static final int SC_PARTIAL_CONTENT = 206;
public static final int SC_MULTIPLE_CHOICES = 300;
public static final int SC_MOVED_PERMANENTLY = 301;
public static final int SC_MOVED_TEMPORARILY = 302;
public static final int SC_SEE_OTHER = 303;
public static final int SC_NOT_MODIFIED = 304;
public static final int SC_USE_PROXY = 305;
public static final int SC_BAD_REQUEST = 400;
public static final int SC_UNAUTHORIZED = 401;
public static final int SC_PAYMENT_REQUIRED = 402;
public static final int SC_FORBIDDEN = 403;
public static final int SC_NOT_FOUND = 404;
public static final int SC_METHOD_NOT_ALLOWED = 405;
public static final int SC_NOT_ACCEPTABLE = 406;
public static final int SC_PROXY_AUTHENTICATION_REQUIRED = 407;
public static final int SC_REQUEST_TIMEOUT = 408;
public static final int SC_CONFLICT = 409;
public static final int SC_GONE = 410;
public static final int SC_LENGTH_REQUIRED = 411;
public static final int SC_PRECONDITION_FAILED = 412;
public static final int SC_REQUEST_ENTITY_TOO_LARGE = 413;
public static final int SC_REQUEST_URI_TOO_LONG = 414;
public static final int SC_UNSUPPORTED_MEDIA_TYPE = 415;
public static final int SC_INTERNAL_SERVER_ERROR = 500;
public static final int SC_NOT_IMPLEMENTED = 501;
public static final int SC_BAD_GATEWAY = 502;
public static final int SC_SERVICE_UNAVAILABLE = 503;
public static final int SC_GATEWAY_TIMEOUT = 504;
public static final int SC_HTTP_VERSION_NOT_SUPPORTED = 505;
以上HTTP 产状态码是由HTTP/1.1 定义的。
方法
1、addCookie
public void addCookie(Cookie cookie);
在响应中增加一个指定的cookie。可多次调用该方法以定义多个cookie。为了
设置适当的头域,该方法应该在响应被提交之前调用。
2、containsHeader
public boolean containsHeader(String name);
检查是否设置了指定的响应头。
3、encodeRedirectURL
public String encodeRedirectURL(String url);
对sendRedirect 方法使用的指定URL 进行编码。如果不需要编码,就直接返回
这个URL。之所以提供这个附加的编码方法,是因为在redirect 的情况下,决
定是否对URL 进行编码的规则和一般情况有所不同。所给的URL 必须是一个
绝对URL。相对URL 不能被接收,会抛出一个IllegalArgumentException。
所有提供给sendRedirect 方法的URL 都应通过这个方法运行,这样才能确保会
话跟踪能够在所有浏览器中正常运行。
4、encodeURL
public String encodeURL(String url);
对包含session ID 的URL 进行编码。如果不需要编码,就直接返回这个URL。
Servlet 引擎必须提供URL 编码方法,因为在有些情况下,我们将不得不重写
URL,例如,在响应对应的请求中包含一个有效的session,但是这个session
不能被非URL 的(例如cookie)的手段来维持。
所有提供给Servlet 的URL 都应通过这个方法运行,这样才能确保会话跟踪能
够在所有浏览器中正常运行。
5、sendError
public void sendError(int statusCode) throws IOException;
public void sendError(int statusCode, String message) throws
IOException;
用给定的状态码发给客户端一个错误响应。如果提供了一个message 参数,这
将作为响应体的一部分被发出,否则,服务器会返回错误代码所对应的标准信
息。
调用这个方法后,响应立即被提交。在调用这个方法后,Servlet 不会再有更多
的输出。
6、sendRedirect
public void sendRedirect(String location) throws IOException;
使用给定的路径, 给客户端发出一个临时转向的响应
(SC_MOVED_TEMPORARILY)。给定的路径必须是绝对URL。相对URL 将
不能被接收,会抛出一个IllegalArgumentException。
这个方法必须在响应被提交之前调用。调用这个方法后,响应立即被提交。在
调用这个方法后,Servlet 不会再有更多的输出。
7、setDateHeader
public void setDateHeader(String name, long date);
用一个给定的名称和日期值设置响应头,这里的日期值应该是反映自1970-1-1
日(GMT)以来的精确到毫秒的长整数。如果响应头已经被设置,新的值将覆
盖当前的值。
8、setHeader
public void setHeader(String name, String value);
用一个给定的名称和域设置响应头。如果响应头已经被设置,新的值将覆盖当
前的值。
9、setIntHeader
public void setIntHeader(String name, int value);
用一个给定的名称和整形值设置响应头。如果响应头已经被设置,新的值将覆
盖当前的值。
10、setStatus
public void setStatus(int statusCode);
这个方法设置了响应的状态码,如果状态码已经被设置,新的值将覆盖当前的
值。
以下的几个方法将被取消/
11、encodeRedirectUrl
public String encodeRedirectUrl(String url);
该方法被encodeRedirectURL 取代。
12、encodeUrl
public String encodeUrl(String url);
该方法被encodeURL 取代。
13、setStatus
public void setStatus(int statusCode, String message);
这个方法设置了响应的状态码,如果状态码已经被设置,新的值将覆盖当前的
值。如果提供了一个message,它也将会被作为响应体的一部分被发送。
三、HttpSession 接口
定义/
public interface HttpSession
这个接口被Servlet 引擎用来实现在HTTP 客户端和HTTP 会话两者的关联。这
种关联可能在多外连接和请求中持续一段给定的时间。session 用来在无状态的
HTTP 协议下越过多个请求页面来维持状态和识别用户。
一个session 可以通过cookie 或重写URL 来维持。
方法
1、getCreationTime
public long getCreationTime();
返回建立session 的时间,这个时间表示为自1970-1-1 日(GMT)以来的毫秒
数。
2、getId
public String getId();
返回分配给这个session 的标识符。一个HTTP session 的标识符是一个由服务器
来建立和维持的唯一的字符串。
3、getLastAccessedTime
public long getLastAccessedTime();
返回客户端最后一次发出与这个session 有关的请求的时间,如果这个session
是新建立的,返回-1。这个时间表示为自1970-1-1 日(GMT)以来的毫秒数。
4、getMaxInactiveInterval
public int getMaxInactiveInterval();
返加一个秒数,这个秒数表示客户端在不发出请求时,session 被Servlet 引擎维
持的最长时间。在这个时间之后,Servlet 引擎可能被Servlet 引擎终止。如果这
个session 不会被终止,这个方法返回-1。
当session 无效后再调用这个方法会抛出一个IllegalStateException。
5、getValue
public Object getValue(String name);
返回一个以给定的名字绑定到session 上的对象。如果不存在这样的绑定,返回
空值。
当session 无效后再调用这个方法会抛出一个IllegalStateException。
6、getValueNames
public String[] getValueNames();
以一个数组返回绑定到session 上的所有数据的名称。
当session 无效后再调用这个方法会抛出一个IllegalStateException。
7、invalidate
public void invalidate();
这个方法会终止这个session。所有绑定在这个session 上的数据都会被清除。并
通过HttpSessionBindingListener 接口的valueUnbound 方法发出通告。
8、isNew
public boolean isNew();
返回一个布尔值以判断这个session 是不是新的。如果一个session 已经被服务
器建立但是还没有收到相应的客户端的请求,这个session 将被认为是新的。这
意味着,这个客户端还没有加入会话或没有被会话公认。在他发出下一个请求
时还不能返回适当的session 认证信息。
当session 无效后再调用这个方法会抛出一个IllegalStateException。
9、putValue
public void putValue(String name, Object value);
以给定的名字,绑定给定的对象到session 中。已存在的同名的绑定会被重置。
这时会调用HttpSessionBindingListener 接口的valueBound 方法。
当session 无效后再调用这个方法会抛出一个IllegalStateException。
10、removeValue
public void removeValue(String name);
取消给定名字的对象在session 上的绑定。如果未找到给定名字的绑定的对象,
这个方法什么也不做。这时会调用HttpSessionBindingListener 接口的
valueUnbound 方法。
当session 无效后再调用这个方法会抛出一个IllegalStateException。
11、setMaxInactiveInterval
public int setMaxInactiveInterval(int interval);
设置一个秒数,这个秒数表示客户端在不发出请求时,session 被Servlet 引擎维
持的最长时间。
以下这个方法将被取消/
12、getSessionContext
public HttpSessionContext getSessionContext();
返回session 在其中得以保持的环境变量。这个方法和其他所有
HttpSessionContext 的方法一样被取消了。
四、HttpSessionBindingListener 接口
定义/
public interface HttpSessionBindingListener
这个对象被加入到HTTP 的session 中,执行这个接口会通告有没有什么对象被
绑定到这个HTTP session 中或被从这个HTTP session 中取消绑定。
方法
1、valueBound
public void valueBound(HttpSessionBindingEvent event);
当一个对象被绑定到session 中,调用此方法。HttpSession.putValue 方法被调用
时,Servlet 引擎应该调用此方法。
2、valueUnbound
public void valueUnbound(HttpSessionBindingEvent event);
当一个对象被从session 中取消绑定,调用此方法。HttpSession.removeValue 方
法被调用时,Servlet 引擎应该调用此方法。
五、HttpSessionContext 接口
定义/
此接口将被取消/
public interface HttpSessionContext
这个对象是与一组HTTP session 关联的单一的实体。
这个接口由于安全的原因被取消,它出现在目前的版本中仅仅是为了兼容性的
原因。这个接口的方法将模拟以前的版本的定义返回相应的值。
方法
1、getSession
public HttpSession getSession(String sessionId);
当初用来返回与这个session id 相关的session。现在返回空值。
2、getIds
public Enumeration getIds();
当初用来返回这个环境下所有session id 的列表。现在返回空的列表。
六、Cookie 类/
定义/
public class Cookie implements Cloneable
这个类描述了一个cookie , 有关cookie 的定义你可以参照Netscape
Communications Corporation 的说明,也可以参照RFC 2109。
构造函数
public Cookie(String name, String value);
用一个name-value 对定义一个cookie。这个name 必须能被HTTP/1.1 所接受。
以字符$开头的name 被RFC 2109 保留。
给定的name 如果不能被HTTP/1.1 所接受, 该方法抛出一个
IllegalArgumentException。
方法
1、getComment
public String getComment();
返回描述这个cookie 目的的说明,如果未定义这个说明,返回空值。
2、getDomain
public String getDomain();
返回这个cookie 可以出现的区域,如果未定义区域,返回空值。
3、getMaxAge
public int getMaxAge();
这个方法返回这个cookie 指定的最长存活时期。如果未定义这个最长存活时期,
该方法返回-1。
4、getName
public String getName();
该方法返回cookie 名。
5、getPath
public String getPath();
返回这个cookie 有效的所有URL 路径的前缀,如果未定义,返回空值。
6、getSecure
public boolean getSecure();
如果这个cookie 只通过安全通道传输返回真,否则返回假。
7、getValue
public String getValue();
该方法返回cookie 的值。
8、getVersion
public int getVersion();
返回cookie 的版本。版本1 由RFC 2109 解释。版本0 由Netscape Communications
Corporation 的说明解释。新构造的cookie 默认使用版本0。
9、setComment
public void setComment(String purpose);
如果一个用户将这个cookie 提交给另一个用户,必须通过这个说明描述这个
cookie 的目的。版本0 不支持这个属性。
10、setDomain
public void setDomain(String pattern);
这个方法设置cookie 的有效域的属性。这个属性指定了cookie 可以出现的区域。
一个有效域以一个点开头(.foo.com),这意味着在指定的域名解析系统的区域
中(可能是www.foo.com 但不是a.b.foo.com)的主机可以看到这个cookie。默
认情况是,cookie 只能返回保存它的主机。
11、setMaxAge
public void setMaxAge(int expiry);
这个方法设定这个cookie 的最长存活时期。在该存活时期之后,cookie 会被终
目。负数表示这个cookie 不会生效,0 将从客户端删除这个cookie。
12、setPath
public void setPath(String uri);
这个方法设置cookie 的路径属性。客户端只能向以这个给定的路径String 开头
的路径返回cookie。
13、setSecure
public void setSecure(boolean flag);
指出这个cookie 只能通过安全通道(例如HTTPS)发送。只有当产生这个cookie
的服务器使用安全协议发送这个cookie 值时才能这样设置。
14、setValue
public void setValue(String newValue);
设置这个cookie 的值,对于二进制数据采用BASE64 编码。
版本0 不能使用空格、{}、()、=、,、“ ”、/、?、@、: 以及;。
15、setVersion
public void setVersion(int v);
设置cookie 的版本号
七、HttpServlet 类/
定义/
public class HttpServlet extends GenericServlet implements
Serializable
这是一个抽象类,用来简化HTTP Servlet 写作的过程。它是GenericServlet 类
的扩充,提供了一个处理HTTP 协议的框架。
在这个类中的service 方法支持例如GET、POST 这样的标准的HTTP 方法。这
一支持过程是通过分配他们到适当的方法(例如doGet、doPost)来实现的。
方法
1、doDelete
protected void doDelete(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException;
被这个类的service 方法调用,用来处理一个HTTP DELETE 操作。这个操作允
许客户端请求从服务器上删除URL。这一操作可能有负面影响,对此用户就负
起责任。
这一方法的默认执行结果是返回一个HTTP BAD_REQUEST 错误。当你要处理
DELETE 请求时,你必须重载这一方法。
2、doGet
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException;
被这个类的service 方法调用,用来处理一个HTTP GET 操作。这个操作允许客
户端简单地从一个HTTP 服务器“获得”资源。对这个方法的重载将自动地支
持HEAD 方法。
GET 操作应该是安全而且没有负面影响的。这个操作也应该可以安全地重复。
这一方法的默认执行结果是返回一个HTTP BAD_REQUEST 错误。
3、doHead
protected void doHead(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException;
被这个类的service 方法调用,用来处理一个HTTP HEAD 操作。默认的情况是,
这个操作会按照一个无条件的GET 方法来执行,该操作不向客户端返回任何数
据,而仅仅是返回包含内容长度的头信息。
与GET 操作一样,这个操作应该是安全而且没有负面影响的。这个操作也应该
可以安全地重复。
这个方法的默认执行结果是自动处理HTTP HEAD 操作,这个方法不需要被一
个子类执行。
4、doOptions
protected void doOptions(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException;
被这个类的service 方法调用,用来处理一个HTTP OPTION 操作。这个操作自
动地决定支持哪一种HTTP 方法。例如,一个Servlet 写了一个HttpServlet 的子
类并重载了doGet 方法,doOption 会返回下面的头:
Allow: GET,HEAD,TRACE,OPTIONS
你一般不需要重载这个方法。
5、doPost
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException;
被这个类的service 方法调用,用来处理一个HTTP POST 操作。这个操作包含
请求体的数据,Servlet 应该按照他行事。
这个操作可能有负面影响。例如更新存储的数据或在线购物。
这一方法的默认执行结果是返回一个HTTP BAD_REQUEST 错误。当你要处理
POST 操作时,你必须在HttpServlet 的子类中重载这一方法。
6、doPut
protected void doPut(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException;
被这个类的service 方法调用,用来处理一个HTTP PUT 操作。这个操作类似于
通过FTP 发送文件。
这个操作可能有负面影响。例如更新存储的数据或在线购物。
这一方法的默认执行结果是返回一个HTTP BAD_REQUEST 错误。当你要处理
PUT 操作时,你必须在HttpServlet 的子类中重载这一方法。
7、doTrace
protected void doTrace(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException;
被这个类的service 方法调用,用来处理一个HTTP TRACE 操作。这个操作的
默认执行结果是产生一个响应,这个响应包含一个反映trace 请求中发送的所有
头域的信息。
当你开发Servlet 时,在多数情况下你需要重载这个方法。
8、getLastModified
protected long getLastModified(HttpServletRequest request);
返回这个请求实体的最后修改时间。为了支持GET 操作,你必须重载这一方法,
以精确地反映最后修改的时间。这将有助于浏览器和代理服务器减少装载服务
器和网络资源,从而更加有效地工作。返回的数值是自1970-1-1 日(GMT)以
来的毫秒数。
默认的执行结果是返回一个负数,这标志着最后修改时间未知,它也不能被一
个有条件的GET 操作使用。
9、service
protected void service(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException;
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException;
这是一个Servlet 的HTTP-specific 方案,它分配请求到这个类的支持这个请求
的其他方法。
当你开发Servlet 时,在多数情况下你不必重载这个方法。
八、HttpSessionBindingEvent 类/
定义/
public class HttpSessionBindingEvent extends EventObject
这个事件是在监听到HttpSession 发生绑定和取消绑定的情况时连通
HttpSessionBindingListener 的。这可能是一个session 被终止或被认定无效的结
果。
事件源是HttpSession.putValue 或HttpSession.removeValue。
构造函数
public HttpSessionBindingEvent(HttpSession session, String name);
通过引起这个事件的Session 和发生绑定或取消绑定的对象名构造一个新的
HttpSessionBindingEvent。
方法
1、getName
public String getName();
返回发生绑定和取消绑定的对象的名字。
2、getSession
public HttpSession getSession();
返回发生绑定和取消绑定的session 的名字。
九、HttpUtils 类/
定义/
public class HttpUtils
收集HTTP Servlet 使用的静态的有效的方法。
方法
1、getRequestURL
public static StringBuffer getRequestURL(HttpServletRequest request);
在服务器上重建客户端用来建立请求的URL。这个方法反映了不同的协议(例
如http 和https)和端口,但不包含查询字符串这个方法返回一个StringBuffer
而不是一个String,这样URL 可以被Servlet 开发者有效地修改。
2、parsePostData
public static Hashtable parsePostData(int len,
ServletInputstream in);
解析一个包含MIME 类型application/x-www-form-urlencoded 的数据的流,并创
建一个具有关键值-数据对的hash table。这里的关键值是字符串,数据是该字
符串所对应的值的列表。一个关键值可以在POST 的数据中出现一次或多次。
这个关键值每出现一次,它的相应的值就被加入到hash table 中的字符串所对应
的值的列表中。从POST 数据读出的数据将经过URL 解码,+将被转换为空格
以十六进制传送的数据(例如%xx)将被转换成字符。
当POST 数据无效时,该方法抛出一个IllegalArgumentException。
3、parseQueryString
public static Hashtable parseQueryString(String s);
解析一个查询字符串,并创建一个具有关键值-数据对的hash table。这里的数
据是该字符串所对应的值的列表。一个关键值可以出现一次或多次。这个关键
值每出现一次,它的相应的值就被加入到hash table 中的字符串所对应的值的列
表中。
从查询字符串读出的数据将经过URL 解码,+将被转换为空格以十六进制传送
的数据(例如%xx)将被转换成字符。
当查询字符串无效时,该方法抛出一个IllegalArgumentException。
Java Servlet API 说明文档(2.1a 版)(四)
术语表/r
bytecode
字节码:由Java 编译器和Java 解释程序生成的机器代码。
cookie
由Web 服务器建立的数据,该数据存储在用户的计算机上,提供了一个Web
站点跟踪用户的参数并存储在用户自己硬盘上的方法。
HTTP
超文本传输协议。一个请求响应协议用来连接WWW 服务器向客户端浏览器传
输HTML 页面。
输入流对象/r
一个对象,由ServletInputStream 类定义,被Servlet 用来从客户端读取请求。
映射/r
由Servlet 实例和Servlet 返回数据的URL 组成的一对,例如,HelloServlet 和
/hello/index.html。
输出流对象/r
一个对象,由ServletOutputStream class 类定义,被Servlet 用来向客户端返回数
据。
request dispatcher object
由RequestDispatcher 接口定义的一个对象,用来从客户端接收请求,并将其发
送到Web 服务器上可用的其他资源(例如Servlet、CGI、HTML 文件或JSP 文
件)。
sandboxed servlet
在一个安全性约束下运行的Servlet。
servlet
一个小的,具有平台无关性的,没有图形用户界面的Java 程序。它可以在许多
方面扩充Web 服务的功能。
servlet configuration object
ServletConfig 接口定义的一个对象,用来配置一个Servlet。
servlet context object
ServletContext 接口定义的一个对象。给予Servlet 有关Servlet 引擎的信息。
servlet 引擎/r
由Web 服务器提供商制作的一个环境,可以允许Servlet 在具体的Web 服务器
上运行。
servlet 请求对象
由ServletRequest 接口定义的一个对象,允许Servlet 获得用关客户端请求的数
据。
servlet response object
由ServletResponse 接口定义的一个对象,允许Servlet 作出响应。
servlet runner
Java Servlet Developer’s Kit (JSDK)中的sun.servlet.http.HttpServer 过程,它使
得Servlet 得以运行。
会话跟踪
在一个Web 应用程序中,识别一个从同一个客户端发出的连续的唯一的请求的
能力。
SSL
加密套接字协议层。一个安全协议,用来在Iternet 上的客户端浏览器和服务器
交换密钥和加密数据。
URI
统一资源标识。定义一个Internet 地址,它是一个URL 的超集。
URL
统一资源路径。这个地址定义了到达一个WWW 上的文件的路线,通常由协议
前缀、域名、目录名和文件名组成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值