目录
第一部分
一、RequestDispatcher 接口
二、Servlet 接口
三、ServletConfig 接口
四、ServletContext 接口
五、ServletRequest 接口
六、ServletResponse 接口
七、SingleThreadModel 接口
八、GenericServlet 类
九、ServletInputStream 类
十、ServletOutputStream 类
十一、ServletException 类
十二、UnavailableException 类
第二部分
一、HttpServletRequest 接口
二、HttpServletResponse 接口
三、HttpSession 接口
四、HttpSessionBindingListener 接口
五、HttpSessionContext 接口
六、Cookie 类
七、HttpServlet 类
八、HttpSessionBindingEvent 类
九、HttpUtils 类
术语表
1
Java Servlet 中文 API
Java Servlet API 的组成
Java Servlet API 由两个软件包组成:一个是对应 HTTP 的软件包,另一个是不对应 HTTP 的通用的软件包。这两个软件包的同
时存在使得 Java Servlet API 能够适应将来的其他请求-响应的协议。
这份文档以及刚才提及的 Javadoc 格式的文档都描述了这两个软件包,Javadoc 格式的文档还描述了你应该如何使用这两个软
件包中的所有方法。
有关 Java Servlets
JavaTM servlets 是一个不受平台约束的 Java 小程序,它可以被用来通过多种方法扩充一个 Web 服务器的功能。你可以把
Servlet 理解成 Server 上的 applets,它被编译成字节码,这样它就可以被动态地载入并用效地扩展主机的处理能力。(servlet
是 java 服务器端小程序)
Servlet 与 applets 不同的地方是,它不运行在 Web 浏览器或其他图形化的用户界面上。Servlet 通过 servlet 引擎运行在 Web
服务器中,以执行请求和响应,请求、响应的典型范例是 HTTP 协议。
一个客户端程序,可以是一个 Web 浏览器,或者是非其他的可以连接上 Internet 的程序,它会访问 Web 服务器并发出请求。
这个请求被运行在 Web 服务器上的 Servlet 引擎处理,并返回响应到 Servlet。Servlet 通过 HTTP 将这个响应转发到客户端。
在功能上,Servlet 与 CGI、NSAPI 有点类似,但是,与他们不同的是:Servlet 具有平台无关性。
API 对象的说明
这一部分包含了对 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, ServletReponse 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),这个方法将
2
不能保证正常使用。作为一个 Servlet 开发者,你必须妥善地解决那些可能直接存储头域的方法。例如,即使你使用会话跟踪,
为了保证 session 的正常工作,你必须在一个调用 include 的 Servlet 之外开始你的 session
二、Servlet 接口。
定义
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 对象被卸载后,直到一个新的 Servelt 被初始化,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 接口
定义
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 对象。
3
四、ServletContext 接口 方法
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 对象的方
4
便的途径。请注意,当你使用这个方法时,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); // 这种用法将被取消
写指定的信息到一个 Servlet 环境对象的 log 文件中。被写入的 log 文件由 Servlet 引擎指定,但是通常这是一个事
件 log。当这个方法被一个异常调用时,log 中将包括堆栈跟踪。
13、setAttribute
public void setAttribute(String name, Object o);给予 Servlet 环境对象中你所指定的对象一个名称。
14、removeAttribute
public void removeAttribute(String name);从指定的 Servlet 环境对象中删除一个属性。
注:以下几个方法将被取消
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 接口
定义
public interface ServletRequest
定义一个 Servlet 引擎产生的对象,通过这个对象,Servlet 可以获得客户端请求的数据。这个对象通过读取请求体的
数据提供包括参数的名称、值和属性以及输入流的所有数据。
方法
1、getAttribute
public Object getAttribute(String name);
5
返回请求中指定属性的值,如果这个属性不存在,就返回一个空值。这个方法允许访问一些不提供给这个接口中其他
方法的请求信息以及其他 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();返回接收请求的端口号。
6
17、setAttribute
public void setAttribute(String name, Object object);
这个方法在请求中添加一个属性,这个属性可以被其他可以访问这个请求对象的对象(例如一个嵌套的 Servlet)使用。
注:以下方法将被取消
18、getRealPath
public String getRealPath(String path);
返回与虚拟路径相对应的真实路径,如果因为某种原因,这一过程不能进行,该方法将返回一个空值。这个方法和
ServletContext 接口中的 getRealPath 方法重复。在2.1版中,ServletContext 接口将阐明一个 Servlet 所能用的所有的路径
的映射。该方法执行的结果将会与 ServletContext 中 getRealPath 方法的结果完全一样。
六、ServletResponse 接口
定义
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;
这个方法返回一个 PringWriter 对象用来记录格式化的响应实体。如果要反映使用的字符编码,必须修改响应的 MIME
类型。在调用这个方法之前,必须设定响应的 content 类型。
如 果 没 有 提 供 这 样 的 编 码 类 型 , 会 抛 出 一 个 UnsupportedEncodingException , 如 果 这 个 响 应 对 象 已 调 用
getOutputStream,会抛出一个 getOutputStream。
4、setContentLength
public void setContentLength(int length);
设置响应的内容的长度,这个方法会覆盖以前对内容长度的设定。
为了保证成功地设定响应头的内容长度,在响应被提交到输出流之前必须调用这个方法。
5、setContentType
public void setContentType(String type);
这个方法用来设定响应的 content 类型。这个类型以后可能会在另外的一些情况下被隐式地修改,这里所说的另外的
情况可能当服务器发现有必要的情况下对 MIME 的字符设置。
为了保证成功地设定响应头的 content 类型,在响应被提交到输出流之前必须调用这个方法。
七、SingleThreadModel 接口
定义
public interface SingleThreadModel;
这是一个空接口,它指定了系统如何处理对同一个 Servlet 的调用。如果一个 Servlet 被这个接口指定,那么在这个
Servlet 中的 service 方法中将不会有两个线程被同时执行。
7
Servlet 可以通过维持一个各自独立的 Servlet 实例池,或者通过只让 Servlet 的 service 中只有一个线程的方法来实
现这个保证。
八、GenericServlet 类
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 类
定义
8