荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: zzt (打倒北约!!!), 信区: Java
标  题: 使用Java语言编写CGI程序
发信站: BBS 荔园晨风站 (Mon May 10 20:26:50 1999), 转信


发信人: yeal (?????????), 信区: JAVA
标  题: 使用Java语言编写CGI程序
发信站: 华南网木棉站 (Sun Jan 24 12:16:16 1999), 转信

公共网关界面(CGI)是一种编程标准,符合标准的程序(CGI程序), 通过WEB服务器与
运行WEB浏览器的客户进行交互。这些程序允许WEB 开发者通过浏览器传送动态信息(
通常嵌于HTML中)。CGI程序可用WE
B浏览器能运行的任何语言来书写,其中包括Java。CGI程序通常用于加入搜索机制、
客户登记应用程序、数据库查询机制、交互式用户论坛和其它一些WEB站点的交互式
应用程序。
  CGI程序必须解释发送给它的信息,并以某种方式处理这些信息, 生成相应结果
回送给客户。
  CGI规定了一组标准的环境变量和参数格式,CGI程序的绝大多数输入通过环境变
量传入程序内部。本文将演示如何把环境变量传递给一个Java程序。除环境变量之外
的输入作为标准输入可直接被程序读取。
  CGI程序的处理过程可能很简单,也可能象从一个数据库中请求数据那么复杂。
这由具体处理需要而定。
  CGI程序可以返回多种类型的文档。因此必须在输出内容中放置一个短的文档头
(HEADER)(ASCII码文本),使客户知道该如何解释它生成的信息。CGI程序最常生成的
是HTML文档。生成文档头之后,CGI
程序以它的本机格式生成输出中的体(BODY)。在下文中我们将使用一个预先编制的J
ava库,它包含生成HTML文档头的方法header()。


  一、将CGI环境变量传递给Java程序

  编写CGI Java程序较为容易。首先Java程序需要包在另一个脚本中运行。实际
嵌入服务器的脚本将是能把环境变量传入Java程序的UN IX外壳脚本或Windows批处理
文件。
  由于Java不再提供直接访问环境变量的方法(最新的JDK版本取消 system.geten
v()方法),因此,建议使用Java解释器的-D命令行参数传递CGI的每个环境变量。下面
将介绍如何使用D参数。
  Java使用方法system.getproperty()来访问命令行参数。Java程序需要的任何
一个CGI 环境变量,均可用上述方法来访问。例如,访问 server-name环境变量,可写下
行:
  string server-name = system.getproperty("cgi.server-name ");
  下面是一个名为hello.cgi的UNIX脚本文件,它调用名为hello的J ava程序。注
意-D命令行参数把CGI环境变量传入Java程序:
  #!/bin/sh
   java \
    -Dcgi.content-length=$CONTENT-LENGTH \
    -Dcgi.request-method=$REQUEST-METHOD  \
    -Dcgi.query-string=$QUERY-STRING  \
    -Dcgi.server-name=$SERVER-NAME  \
    -Dcgi.server-port=$SERVER-PORT  \
    -Dcgi.script-name=$SCRIPT-NAME \
    -Dcgi.path-info=$PATH-INFO \
   hello
  上述方案不能在Windows 95和Windows NT平台上很好地实现,因为它们在命令行
长度上有限制。但可以把环境变量名及其相关的值写入一个临时文件,然后将该文件
名传递给Java 程序,Java程序读此文件并从中分析出环境变量/值对。


  二、JAVA CGI库

  为避免重复工作,简化编制程序的过程,可先将一些常用的或固定的处理写成函
数或方法,组成函数库。以后编制CGI程序时,只需考虑主要的处理过程。下文中使用的
方法Header() 和ReadParse假设已在名为cgi-lib.java的函数库中。

  三、编制JAVA CGI程序

  下面以编制第一节中被hello.cgi调用的hello.java程序为例,说明如何编制CGI
程序。我们将编制一个简单程序来处理"Hello There" 格式。它提示用户NAME 和EMA
IL地址。要处理的格式(名为hello.htm l)为:
   <HTML>
   <HEAD>
   <TITLE>Hello and Welcome!</TITLE>
   </HEAD>
   <BODY>
   <H1 ALIGN=CENTER>Hello and Welcome</H1>
   <hr>
   <FORM METHOD="POST"
   ACTION="/cgi-bin/hello.cgi">
    What is your name?
    <INPUT TYPE="text" NAME="name" VALUE=""><P>
    What is your email address?
    <INPUT SIZE=40 TYPE="text" NAME="email" VALUE="">
    <INPUT TYPE="submit" VALUE="submit"> <p>
    </FORM>
    <hr>
    </BODY>
    </HTML>
  下面开始编制处理"Hello There"格式的Java CGI程序,它实现与客户的交互。
步骤如下:

  1.首先,让客户知道该CGI程序将要生成HTML格式。在cgi-lib.ja va中方法Head
er()将生成所需的字符串,因此,Java程序将调用Header ()方法及使用system.out.pr
intln系统调用打印字符串。
  //
  // 打印所需的CGI头
  //
    system.out.println( cgi-lib.Header( ) );

  2.其次,要处理通过浏览器发送来的数据。在cgi-lib.java中Rea dParse方法完
成这方面的工作,并回送结果到一个哈希表中。本例中, 经分析后哈希表的每项包括
两个关键项值。一个是"name"输入域,另一个是"email"输入域。这两个域的值即是用
户在"Hello
There"格式中输入的内容。
   //
   // 分析格式中数据后将其放入哈希表中(HashTable)
   //
   Hashtable form-data=cgi-lib.ReadParse(system.in)

  3.在分析并获取格式数据后,就可以根据需要处理这些数据。完成所需的处
理后再生成HTML文档回送到用户浏览器。为简单起见,本例将不对这些数据作任何处
理,仅仅把它们回送给发数据的用户。我们将对哈希表对象使用get方法,以选取格式
数据值赋给字符串,供程序使用。下例说明如何选取name的值(由用户键入)给一个字符
串对象。
  string name=(str ing)form-data.get("name");
  综合以上三步,可以生成一个简单程序,即下述用于处理"Hello T here"格式的J
ava应用程序
  (hello.java):
   import java.util.*;
   import java.io.*;
   class hello
   public static void main( string args[ ])
   //
   // Here is a minimalistic CGI program that uses cgi-lib
   //
   //
   // Print the required CGI header.
   //
   system.out.println( cgi-lib.Header( ) );
   //
   // Parse the form data into a Hashtable.
   //
   Hashtable form-data=cgi-lib.ReadParse(system.in);
   //
   // Create the top of the returned HTML page
   //
   string name=(string)form-data.get("name");
   system.out.println(cgi-lib.Htmltop("Hello There"+name+"!"));
   system.out.println("<h1 align=center>Hello There"+name+ "!</h1>");
   system.out.println("Here are the name/value pairs from the form:");
   //
   // Print the name/value pairs sent from browser.
   //
   system.out.println(cgi-lib.Variables(form-data));
   //
   // Print the Environment variables sent in form the unix script.
   //
   system.out.println("Here are the CGIenvironment variables/value pai
rs"+
  "Passed in form the UNIX script:");
   system.out.println( cgi-lib.Environment( ) );
   //
   // Create the Bottom of rturned HTML page to close it cleanly.
   //
   system.out.println( cgi-lib.HtmlBot( ) );


  四、结论

  在初步掌握了用Java编写CGI程序的方法之后,我们可以在自己的 Web应用中,以
更为适合的方式开发服务器端的应用程序。同时加深对 CGI协议的理解,正是CGI协议
为客户浏览器和服务器提供了这种通迅途径,使客户可以和Web服务器进行交互。



--
m;33m※ 来源:.华南网木棉站 bbs.gznet.edu.cn.[FROM: 202.38.240.203]m
--
m;36m※ 转寄:.华南网木棉站 bbs.gznet.edu.cn.[FROM: 210.39.3.47]m

--



日出东方,唯我不败;
    天上地下,唯我独尊。

※ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.1.143]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店