使用Java语言编写CGI程序
2008-05-21 02:52
183 查看
google_ad_client = "pub-8800625213955058";
/* 336x280, 创建于 07-11-21 */
google_ad_slot = "0989131976";
google_ad_width = 336;
google_ad_height = 280;
//
公共网关界面(CGI)是一种编程标准,符合标准的程序(CGI程序),通过WEB服务器与
运行WEB浏览器的客户进行交互。这些程序允许WEB开发者通过浏览器传送动态信
息(通常嵌于HT ML中)。CGI程序可用WEB浏览器能运行的任何语言来书写,其中包
括Java。CGI程序通常用于加入搜索机制、客户登记应用程序、数据库查询机制、
交互式用户论坛和其它一些WEB站点的交互式应用程序。
CGI程序必须解释发送给它的信息,并以某种方式处理这些信息,生成相应结果
回送给客户。
CGI规定了一组标准的环境变量和参数格式,CGI程序的绝大多数输入通过环境
变量传入程序内部。本文将演示如何把环境变量传递给一个Java程序。除环境变
量之外的输入作为标准输入可直接被程序读取。
CGI程序的处理过程可能很简单,也可能象从一个数据库中请求数据那么复杂
。这由具体处理需要而定。
CGI程序可以返回多种类型的文档。因此必须在输出内容中放置一个短的文档
头(HEADE R)(ASCII码文本),使客户知道该如何解释它生成的信息。CGI程序最常
生成的是HTML文档。生成文档头之后,CGI程序以它的本机格式生成输出中的体(B
ODY)。在下文中我们将使用一个预先编制的Java库,它包含生成HTML文档头的方法
header()。
一、将CGI环境变量传递给Java程序
编写CGI Java程序较为容易。首先Java程序需要包在另一个脚本中运行。实
际嵌入服务器的脚本将是能把环境变量传入Java程序的UNIX外壳脚本或Windows批
处理文件。
由于Java不再提供直接访问环境变量的方法(最新的JDK版本取消system.get
env()方法),因此,建议使用Java解释器的-D命令行参数传递CGI的每个环境变量。
下面将介绍如何使用D参数。
Java使用方法system.getproperty()来访问命令行参数。Java程序需要的任
何一个CGI 环境变量,均可用上述方法来访问。例如,访问server-name环境变量,
可写下行:
string server-name = system.getproperty("cgi.server-name");
下面是一个名为hello.cgi的UNIX脚本文件,它调用名为hello的Java程序。注
意-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
和EMAIL地址。要处理的格式(名为hello.html)为:
Hello and Welcome!
What is your email address?
下面开始编制处理"Hello There"格式的Java CGI程序,它实现与客户的交互
。步骤如下:
1.首先,让客户知道该CGI程序将要生成HTML格式。在cgi-lib.java中方法He
ader()将生成所需的字符串,因此,Java程序将调用Header()方法及使用system.o
ut.println系统调用打印字符串。
//
// 打印所需的CGI头
//
system.out.println( cgi-lib.Header( ) );
2.其次,要处理通过浏览器发送来的数据。在cgi-lib.java中ReadParse方法
完成这方面的工作,并回送结果到一个哈希表中。本例中,经分析后哈希表的每项
包括两个关键项值。一个是"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 There"格式的
Java应用程序(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-li
b
//
//
// 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("Hello There" name
");
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 un
ix script.
//
system.out.println("Here are the CGIenvironment variab
les/value pairs"
"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协议的理解,正是CG
I协议为客户浏览器和服务器提供了这种通迅途径,使客户可以和Web服务器进行交
互。
/* 336x280, 创建于 07-11-21 */
google_ad_slot = "0989131976";
google_ad_width = 336;
google_ad_height = 280;
//
公共网关界面(CGI)是一种编程标准,符合标准的程序(CGI程序),通过WEB服务器与
运行WEB浏览器的客户进行交互。这些程序允许WEB开发者通过浏览器传送动态信
息(通常嵌于HT ML中)。CGI程序可用WEB浏览器能运行的任何语言来书写,其中包
括Java。CGI程序通常用于加入搜索机制、客户登记应用程序、数据库查询机制、
交互式用户论坛和其它一些WEB站点的交互式应用程序。
CGI程序必须解释发送给它的信息,并以某种方式处理这些信息,生成相应结果
回送给客户。
CGI规定了一组标准的环境变量和参数格式,CGI程序的绝大多数输入通过环境
变量传入程序内部。本文将演示如何把环境变量传递给一个Java程序。除环境变
量之外的输入作为标准输入可直接被程序读取。
CGI程序的处理过程可能很简单,也可能象从一个数据库中请求数据那么复杂
。这由具体处理需要而定。
CGI程序可以返回多种类型的文档。因此必须在输出内容中放置一个短的文档
头(HEADE R)(ASCII码文本),使客户知道该如何解释它生成的信息。CGI程序最常
生成的是HTML文档。生成文档头之后,CGI程序以它的本机格式生成输出中的体(B
ODY)。在下文中我们将使用一个预先编制的Java库,它包含生成HTML文档头的方法
header()。
一、将CGI环境变量传递给Java程序
编写CGI Java程序较为容易。首先Java程序需要包在另一个脚本中运行。实
际嵌入服务器的脚本将是能把环境变量传入Java程序的UNIX外壳脚本或Windows批
处理文件。
由于Java不再提供直接访问环境变量的方法(最新的JDK版本取消system.get
env()方法),因此,建议使用Java解释器的-D命令行参数传递CGI的每个环境变量。
下面将介绍如何使用D参数。
Java使用方法system.getproperty()来访问命令行参数。Java程序需要的任
何一个CGI 环境变量,均可用上述方法来访问。例如,访问server-name环境变量,
可写下行:
string server-name = system.getproperty("cgi.server-name");
下面是一个名为hello.cgi的UNIX脚本文件,它调用名为hello的Java程序。注
意-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
和EMAIL地址。要处理的格式(名为hello.html)为:
Hello and Welcome!
Hello and Welcome
What is your name?What is your email address?
下面开始编制处理"Hello There"格式的Java CGI程序,它实现与客户的交互
。步骤如下:
1.首先,让客户知道该CGI程序将要生成HTML格式。在cgi-lib.java中方法He
ader()将生成所需的字符串,因此,Java程序将调用Header()方法及使用system.o
ut.println系统调用打印字符串。
//
// 打印所需的CGI头
//
system.out.println( cgi-lib.Header( ) );
2.其次,要处理通过浏览器发送来的数据。在cgi-lib.java中ReadParse方法
完成这方面的工作,并回送结果到一个哈希表中。本例中,经分析后哈希表的每项
包括两个关键项值。一个是"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 There"格式的
Java应用程序(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-li
b
//
//
// 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("
Hello There" name
"!
");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 un
ix script.
//
system.out.println("Here are the CGIenvironment variab
les/value pairs"
"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协议的理解,正是CG
I协议为客户浏览器和服务器提供了这种通迅途径,使客户可以和Web服务器进行交
互。
相关文章推荐
- 使用Perl编写CGI程序(前后端)
- 使用c语言编写cgi程序
- 如何使用C++编写CGI程序接口
- Rhino 是一个完全使用Java语言编写的开源JavaScript实现。Rhino通常用于在Java程序中,为最终用户提供脚本化能力。它被作为J2SE 6上的默认Java脚本化引擎。
- 使用c语言编写cgi程序
- 使用c语言编写cgi程序
- 使用MFC编写internet查询程序
- 如何使用Python为Hadoop编写一个简单的MapReduce程序
- 使用WTL+OGRE编写3D程序(2) - 窗口消息函数
- 练习1-19 编写函数 reverse(s),将字符串s 中的字符顺序颠倒过来。使用该函数编写一个程序,每次颠倒一个输入行中的字符顺序。
- 如何使用inotify_init,inotify_add_watch,inotify_rm_watch,read编写监控程序
- mono:直接使用MSIL指令编写mono程序
- 02:C语言概述、vi编辑器、编写第一个C程序、变量的基本使用
- VC++下使用ADO编写数据库程序
- 用Delphi编写CGI程序返回图象
- 使用IDLE编写Python程序出现汉字横着显示的解决方法(附删除键空格消除)
- 使用服务器端对象模型,编写程序管理SharePoint列表
- 使用VC2005/2008/2010编写的程用程序 部署时不需要安装运行库的方法
- ubuntu下使用Eclipse CDT插件编写多线程程序
- 使用C++语言编写多线程程序的速成代码