《JavaTM程序设计语言基 础》第 1 部分
第 5 课:编写 Servlet 程序

[<<返回] [目录] [下一个>>]

servlet 程序是能够增强服务器功能的服务器扩充。servlet 程序最普遍的应用是 通过提供动态网页内容来扩展Web服务器。web服务器对超文本链接标示语言(HTML) 所编写的文件进行显示并通过超文本传输协议(HTTP)对用户请求予以响应。HTTP 是 用于在国际互联网上传送超文本文件的协议。HTML 文件中包含如 Netscape 等 HTML 浏览器解释的已作标示的文本。

程序。编程时只需要 Tomcat,它包含了 Java Server PagesTM 1.1 和 Servlets 2.2的参考实现。用户可免费下载 Tomcat

本课向您介绍如何生成一个调用基本 servlet 程序的非常简单的表格来处理终端 用户在表格输入的数据。


关于示例程序

浏览器通过 HTML 表格接收终端用户的输入信息。本课所采用的简单表格有一个供 终端用户输入文本信息的文本输入域和一个 Submit(提交)按钮。终端用户点击 Submit 按钮时,就会调用简单的 servlet 程序来处理终端用户的输入信息。

本例中,该 servlet 程序将返回一个显示终端用户所输入的文本信息的 HTML 网 页。

HTML 表格

THTML 表格嵌套在 HTML 文件中。下图显示了 HTML 网页在浏览器中被打开时的外观。

HTML 文件和表格类似于 第 4 课 中的简单应用程序和 applet 程序示例,所以您可以对比它们的代码来掌握 servlet 程序、applet 程序和 应用程序是如何处理终端用户输入信息的。

用户点击 Click Me 按钮时,servlet 程序就可以获取用户输入的 文本信息并返回带有该文本信息的 HTML 页面。

ExampServlet.java servlet 程序返回给浏览器的 HTML 页面如下图所示。检索 用户输入信息并生成 HTML 页面的 servlet 程序附带相关的讨论。


注意:若要运行本示例程序,就必须把 servlet 程序和 HTML 文件存放到您要使用的 Web 服务器的相应目录中。例如,使用 Java WebServer 1.1.1 时,应把 servlet 存放在 ~/JavaWebServer1.1.1/servlets 目录下而把 HTML 文件存放在 ~/JavaWebServer1.1.1/public_html 目录下。

Servlet 后端

ExampServlet.java 生成一个 HTML 网页并把它返回到终端用户。这就是说,servlet 程序并不使用任何 Project Swing 或抽象窗口工具包(AWT)组件,也没有事件处理代码。对这个简单的 servlet 程序而言,只需要导入以下程序包:

  • 用于系统输入和输出的 java.ioHttpServlet 类使用本程序包中的 IOException 类发出信号来警告发生了某种输 入或输出异常。
  • javax.servlet,其中包含通用的(与协议无关的) servlet 类。HttpServlet 类利用本程序包中的 ServletException 类来指示 servlet 故障。
  • javax.servlet.httpp,其中包含 HTTP servlet 类。本程序包 中有 HttpServlet 类。
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ExampServlet extends HttpServlet {
  public void doPost(HttpServletRequest request, 
	 HttpServletResponse response)
        throws ServletException, IOException
  {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();

    out.println("<title>Example</title>" +
       "<body bgcolor=FFFFFF>");

    out.println("<h2>Button Clicked</h2>");

    String DATA = request.getParameter("DATA");

    if(DATA != null){
      out.println(DATA);
    } else {
      out.println("No text entered.");
    }

    out.println("<P>Return to 
	<A HREF="../simpleHTML.html">Form</A>");
    out.close();
  }
}

类和方法声明

所有 servlet 类都扩展了 HttpServlet 抽象类。HttpServlet 通过为 HTTP 协议提供处理框架而简化了 HTTP servlet 的编写过程。由于 HttpServletabstract(抽象)型,所以您的 servlet 类必须对其进行扩展并至少重载它的一个方法。abstract 类是含有未实现的方法而本身不能实例化的类。

public class ExampServlet extends HttpServlet {
  public void doPost(HttpServletRequest request,
         HttpServletResponse response)
         throws ServletException, IOException
  {

ExampServlet 类被声明为 public,所以可以被运行 servlet 程序的非本地web服务器所访问。

ExampServlet类以与 HttpServlet 类中 doPost 方法的名称、返回值类型和参数表相同的名称、返回值类型和参数表定义 doPost 方法。这样,ExampServlet 类就重载并执行 HttpServlet 类中的 doPost 方法。

doPost 方法执行本例 HTML 表格指定类型的 HTTP POST 操作。其他可能执行的操作是 HTTP GET 操作,在此种操作中可代以 doGet 方法的实现。

I总之,POST 请求是直接通过连接发送任意数量的数据而无需更改 URL,而 GET 请求则是把有限数量的信息添加到URL。POST 请求不能被标示或通过电子邮件发送,也不改变响应信息的统一资源地址(URL)。而 GET 请求可被标示和通过电子邮件发送并把信息添加到响应信息的 URL 中。

doPost 方法的参数列表含有各一个 requestresponse 对象。浏览器向 servlet 程序发送请求而 servlet 向浏览 器返回响应。

doPost 方法的执行过程要访问 request 对象中的信 息,以找出该请求来自于谁、请求数据的格式是什么以及发送的是哪些 HTTP 标题, 而且会利用 response 对象生成对浏览器请求作出响应的 HTML 页。如 果处理请求时发生任何输入或输出问题,doPost 方法就会抛出一个 IOException;如果请求未能得到处理,则抛出 ServletException 。 这些异常事件将在 HttpServlet 类中处理。

方法的实现

doPost 方法的第一部分是用 response 对象生成 HTML 网页。它首先把响应内容的类型设定为 texthtml 型,然后获取一个 PrintWriter 对象进行格式化文本输出。

response.setContentType("text/html");
    PrintWriter out = response.getWriter();

    out.println("<title>Example</title>" +
       "<body bgcolor=#FFFFFF>");

    out.println("<h2>Button Clicked</h2>");

接下来的一行代码是利用 request 对象从表格中的文本域中获取数 据并把得到的数据存放到 DATA 变量中。getparameter 方法获取事先命名的参数,如果该参数尚未定义则返回 null(空值), 若该参数无值但却被传递则返回一个空串。

    String DATA = request.getParameter("DATA");

doPost 方法接下来的部分是从 DATA 参数中提取数 据,并把所得数据传递给 response 对象,以添加到 HTML 响应页上。

    if(DATA != null){
      out.println(DATA);
    } else {
      out.println("No text entered.");
    }

doPost 方法的最后部分是创建使终端用户从 HTML 响应页返回到原 表格的一个链接,并结束响应。

    out.println("<P>Return to
        <A HREF="../simpleHTML.html">Form</A>");
    out.close();
  }

注意:若欲学习如何使用 HttpServletHttpServletRequestHttpServletResponse 类中的 其他可用方法,请参阅 Java 教程 中有关 Servlets 的部分。

更多信息

您可以在 Java 教程 中的 Servlets 部分获取有关 servlet 程序的更多介绍。

[TOP]

 

常见问答
下载中心
产品简介
 
 
Solaris论坛
 
   
 
null