使用Java语言编写CGI程序

来源:互联网 发布:电脑锣编程是什么意思 编辑:程序博客网 时间:2024/06/06 04:06
<script type="text/javascript">google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//</script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>公共网关界面(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服务器进行交 互。
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 画报设计图案大全 国庆画报二年级 民间故事画报图片 英语画报设计图案大全 幼儿画报2013 幼儿科学画报 幼儿画报价格 城市画报主编 幼儿画报订阅 国庆节手画报 少年科学画报怎么样 小学数学画报 少儿科学画报 幼儿画报过刊 贝瓦互动画报 城市画报地址 幼儿画报怎么订阅 婴儿画报电话 体育画报泳装模特 校园安全画报 公司画报设计 周末画报在线阅读 周末画报订阅 嘟嘟熊画报价格 电子画报制作 儿童科技画报 体育画报泳装 幼儿画报光盘下载 中华文化画报 淘宝画报服饰 嘟嘟熊画报电话 世界知识画报 宝宝画报墙贴 淘画报怎么报名 体育画报泳装特辑 小学生画报怎么做 小学英语画报 儿童英语画报 绿色环保画报 城市画报黎文 幼儿画报图片