首页 理论教育JavaWeb应用开发:常用ServletAPI

JavaWeb应用开发:常用ServletAPI

【摘要】:在介绍Servlet 层次结构时,列出了javax.servlet 和javax.servlet.http 这两个包包含开发Servlet 需要用到的主要API,并将其进行了分类。在这里将详细介绍这些Servlet 常用API。Servlet API 是一组基于处理客户端和服务器之间请求和响应的Java 语言标准API。例如,HttpServlet 是常用的抽象类,它的HTTP 处理方法是空的。Servlet 接口中的方法见表2.3。Servlet API 提供了Servlet 接口的直接实现,称为GenericServlet。Servlet 可以通过这些类理解客户的请求,将其处理后的内容通过HttpServletResponse 回复到Web 容器。表2.6ServletResponse 接口中常用

在介绍Servlet 层次结构时,列出了javax.servlet 和javax.servlet.http 这两个包包含开发Servlet 需要用到的主要API,并将其进行了分类。在这里将详细介绍这些Servlet 常用API。

Servlet API 是一组基于处理客户端和服务器之间请求和响应的Java 语言标准API。可以根据实际需要,继承这些类或实现这些接口以实现需要的功能。

1.Servlet 基本类和接口

Servlet 基本类和接口是Servlet 需要直接或者间接继承的接口和抽象类。例如,HttpServlet 是常用的抽象类,它的HTTP 处理方法是空的。要开发Servlet,就要在doGet()和doPost()等方法中加入Servlet 需要的功能。

➢ javax.servlet.Servlet 接口

javax.servlet.Servlet 接口规定了必须由Servlet 类实现、由Servlet 引擎识别和管理的方法集。Servlet 接口的基本目标是提供生命周期的init()、service()和destroy()方法。这个接口被继承HttpServlet 和GenericServlet 抽象类的Servlet 来实现。Servlet 接口中的方法见表2.3。

表2.3 Servlet 接口中常用的方法

➢ javax.servlet.GenericServlet 抽象类

GenericServlet 抽象类定义了一个通用的Servlet 类,其方法与HTTP 协议无关,主要用于开发其他Web 协议的Servlet 时使用。

Servlet API 提供了Servlet 接口的直接实现,称为GenericServlet。此类提供了除service()方法外所有接口中方法的默认实现。这意味着通过简单地扩展GenericServlet 可以编写一个基本的Servlet。

除了Servlet 接口外,GenericServlet 也实现了ServletConfig 接口,处理初始化参数和Servlet 上下文,提供对授权传递到init()方法中的ServletConfig 对象的方法。GenericServlet 类中方法见表2.4。

表2.4 GenericServlet 类中常用的方法

➢ javax.servlet.http.HttpServlet 抽象类

开发一个Servlet,通常不是通过直接实现javax.servlet.Servlet 接口,而是通过继承javax.servlet.http.HttpServlet 抽象类来实现的。HttpServlet 抽象类是专门为HTTP 协议设计的,对javax.servlet.Servlet 接口中的方法都是提供了默认实现。一般地,通过继承HttpServlet 抽象类,只需要重写它的doGet()和doPost()方法就可以实现自己的Servlet。

在HttpServlet 抽象类中的service()方法一般不需要被重写,它会自动调用与用户请求对应的doGet()和doPost()方法。HttpServlet 抽象类支持6 种doXXX()方法和一些辅助方法。在一般的Servlet 中,使用最多的是doGet()和doPost()方法,没有必要重写doOptions()、doTrace()和doDelete()方法。

HttpServlet 抽象类的定义如下:

(1)doGet()方法

doGet()方法由服务器通过service()方法调用,用于处理HTTP 的GET 请求。GET 请求可供客户端向服务器发送表单数据。有了GET 请求,这些表单数据就会附带在浏览器发送的URL 后面,作为查询字符串发送给服务器。可发送的表单数据的数量由URL允许的最大长度来限制。该方法的定义如下:

(2)doPost()方法

doPost()方法由服务器通过service()方法调用,用于处理HTTP 的POST 请求。POST请求使客户端向服务器发送表单数据。有了POST 请求,这些表单数据就会被单独发送给服务器,而不是被追加到URL 后面,这样就可以实现发送大量表单数据的目的。该方法的定义如下:

2.Web 请求与响应类

Web 请求和响应类直接对应于Web 请求和响应,在Servlet 和Web 容器之间交互传递信息。当Web 容器通过HTTP 协议接收客户的请求后,会将其转化为HttpServlet-Request 对象,然后传递给Servlet。Servlet 可以通过这些类理解客户的请求,将其处理后的内容通过HttpServletResponse 回复到Web 容器。Web 容器进行整理后用HTTP 协议向客户端传送响应。

➢ javax.servlet.ServletRequest 接口

ServletRequest 接口用于向第一个Servlet 提供客户端的请求信息。当客户端向Servlet 发送请求时,Servlet 使用这个接口获取客户端的请求信息,当客户端向Servlet 的service()方法被执行时,Servlet 就可以调用这个接口中的方法接收客户端的请求信息,ServletRequest 对象是作为一个参数传递给service()方法的。ServletRequest 接口常用的方法见表2.5。

表2.5 ServletRequest 接口中常用的方法

➢ javax.servlet.ServletResponse 接口

ServletResponse 接口用于向客户端发出响应信息。一般在Servlet 的service()方法中调用,由用户实现这个接口。当一个Servlet 的service()方法被执行时,Servlet 就可以调用这个接口的方法把响应信息返回客户端,ServletResponse 对象是作为一个参数传递给service()方法的。ServletResponse 接口常用方法见表2.6。

表2.6 ServletResponse 接口中常用的方法

➢ javax.servlet.ServletInputStream 接口

ServletInputStream 接口用于在使用HTTP 的POST 和PUT 方法时,从一个客户端请求中读取二进制数据。这个接口继承了java.io.InputStream 中的基本方法。除此之外,这个接口还提供了一个readLine()方法,用于一次一行地读取数据。readLine()方法的定义如下:

readLine()方法一次一行地读取数据,并把它存储在一个byte 数组b 中。这个数组操作从指定的偏移量off 开始,持续到读取指定数量字节len,或者到达一个新的换行符。这个新的换行符也存储在字节数组中。如果没有读到指定数量的字节就到达了文件的结束符,则返回-1。

➢ javax.servlet.ServletOutputStream 接口

ServletOutputStream 接口用于向一个客户端写入二进制数据。它提供了重载版本的print()和println()方法,可以用于处理基本类型的数据和String 类型的数据,其方法与java.io.OutputStream 接口中定义完全相同。除此之外,它加入了各种print()和println()的方法,可以使用Servlet 向输出流输出各种类型的数据。最常用的print()方法和println()方法的一般形式如下:

(www.chuimin.cn)

➢ javax.servlet.http.HttpServletRequest 接口

HttpServletRequest 接口继承了javax.servlet.ServletRequest 接口,所以HttpServletRequest 接口也同样拥有许多ServletRequest 接口中定义的方法。

这个接口最常用的方法就是获得请求中的参数,这个请求中的参数是客户端表单中的数据。HttpServletRequest 接口可以获取由客户端传送的参数名称,也可以获取客户端正在使用的通信协议,还可以获取产生请求并且能接收请求服务器远端主机名及其IP 地址等信息。

该接口的主要方法见表2.7。

表2.7 HttpServletRequest 接口中常用的方法

➢ javax.servlet.http.HttpServletResponse 接口

这个接口包含了对客户端的HTTP 响应。它允许Servlet 设置内容长度和响应的MIME类型,并且提供输出流ServletOutputStream。常用的方法见表2.8。

表2.8 HttpServletResponse 接口中常用的方法

下面使用一个例子来演示一下HttpServletRequest 接口和HttpServletResponse接口中方法的使用。

例2.2:获取请求相关信息并输出。

创建一个Servlet 类,命名为UseRequest.java。其doGet()和doPost()方法实现如下:

启动Tomcat 服务器,打开IE 浏览器,在地址栏输入:

运行效果如图2.12 所示。

图2.12 获取请求相关信息

3.Servlet 异常类

在javax.servlet 包中定义了两个异常类,javax.servlet.ServletException 和javax.servlet.UnavailableException。

➢ javax.servlet.ServletException 类

ServletException 类定义了一个通用的异常,可以被init()、service()和doXXX()方法抛出,这个类提供了4 个构造方法和1 个实例方法,见表2.9。

表2.9 ServletException 中定义的方法

➢ javax.servlet.UnavailableException 类

UnavailableException 类是ServletException 类的子类,该异常类被Servlet 抛出,用于向Servlet 容器指示这个Servlet 永久地或者暂时地不可用。这个类提供了两个构造方法和两个实例方法,见表2.10。

表2.10 UnavailableException 中定义的方法

4.Servlet 其他类

➢ javax.servlet.ServletConfig 接口

javax.servlet.ServletConfig 接口负责与Web 容器之间联系。这个接口的主要功能是使Web 容器在Servlet 初始化时(一般是Web 服务器启动并载入Web 应用时)能够和Servlet 进行某种联系。这种联系主要是指通过这个接口在Web 容器所提供的XML文件中进行描述。例如,Web 容器是由部署描述文件web.xml 来指定初始化变量的。在这个接口中定义了4 个常用的方法,见表2.11。

表2.11 ServletConfig 中定义的方法

➢ javax.servlet.ServletContext 接口

一个ServletContext 对象表示了一个Web 应用程序的上下文。Servlet 容器在Servlet 初始化期间,向其传递ServletConfig 对象,可以通过ServletConfig 对象的getServletContext()方法来得到ServletContext 对象,不过Generic-Servlet 类的 getServletContext()也是调用 ServletConfig 对象的getServletContext()方法来得到这个对象的。表2.12 为ServletContext 的主要方法。

表2.12 ServletContext 接口中的主要方法