java 编写cgi_CGI程序的编写

这篇博客介绍了CGI(Common Gateway Interface)的基本概念,强调了它作为Web服务器与可执行程序交互的接口标准。文章讨论了使用Java编写CGI程序的可能性,并详细阐述了CGI程序的标准输入、环境变量和标准输出三部分。同时,文中提到了CGI处理数据的两种方法(GET和POST),以及在C语言中处理CGI请求的示例代码。
摘要由CSDN通过智能技术生成

原文:http://blog.donews.com/mutecat/archive/2006/10/28/1068602.aspx

其实大一的时候就开始接触CGI了,CGI(Common Gateway Interface: 公用网关接口)规定了Web服务器调用其他可执行程序(CGI程序)的接口协议标准,由此可见,CGI程序需要httpd服务器的支持。Linux下比较流行用perl和php来写CGI程序,CGI程序需要大量的字符处理工作,perl和php对字符的处理都非常简单。但是有时也用C语言或者其他一些语言来写,C语言写CGI相对比较复杂,大家知道C对字符串的处理是相当复杂的,但是用C语言编写的CGI程序具有执行速度快、安全性高等特点。

CGI接口标准包括标准输入、环境变量、标准输出三部分。

1.标准输入

CGI程序像其他可执行程序一样,可通过标准输入(stdin)从Web服务器得到输入信息,如Form中的数据,这就是所谓的向CGI程序传递数据的POST方法。这意味着在操作系统命令行状态可执行CGI程序,对CGI程序进行调试。

2.环境变量

操作系统提供了许多环境变量,它们定义了程序的执行环境,应用程序可以存取它们。Web服务器和CGI接口又另外设置了自己的一些环境变量,用来向CGI程序传递一些重要的参数。CGI的GET方法还通过 环境变量QUERY-STRING向CGI程序传递Form中的数据。

3.标准输出

CGI程序通过标准输出(stdout)将输出信息传送给Web服务器。传送给Web服务器的信息可以用各种格式,通常是以纯文本或者HTML文本的形式,这样我们就可以在命令行状态调试CGI程序,并且得到它们的输出。

从上面可以看出CGI获取input的方法有两种:环境变量(get),读stdin(post)

下面是CGI程序设计中常常要用到的一些环境变量。

HTTP-REFERER:调用该CGI程序的网页的URL。

REMOTE-HOST:调用该CGI程序的Web浏览器的机器名和域名。

REQUEST-METHOD:指的是当Web服务器传递数据给CGI程序时所采用的方法,分为GET和POST两种方法。GET方法仅通过环境变量(如QUERY-STRING)传递数据给CGI程序,而POST方法通过环境变量和标准输入传递数据给CGI程序,因此POST方法可较方便地传递较多的数据给CGI程序。

SCRIPT-NAME:该CGI程序的名称。

QUERY-STRING:当使用GET方法时,Form中的数据最后放在QUERY-STRING中,传递给CGI程序。

CONTENT-TYPE:传递给CGI程序数据的MIME类型,通常为″applica tion/x-www-form-url encodede″,它是从HTML Form中以POST方法传递数据给CGI程序的数据编码类型,称为URL编码类型。

CONTENT-LENGTH:传递给CGI程序的数据字符数(字节数)。

CGI处理的C语言程序大概如下:

n=atoi(getsenv("CONTENT_LENGTH"));  //获取传递给程序的字节数

if(n>5000000) n=5000000;

buf=calloc(n+1, 1);

if(buf==0) http_fatal("memory overflow");

fread(buf, 1, n, stdin);            //从标准输入读取数据(post)

buf[n]=0;

t2=strtok(buf, "&");                 // 的确是post,进行数据处理

while(t2) {

t3=strchr(t2, ‘=’);

if(t3!=0) {

t3[0]=0;

t3++;

__unhcode(t3);

parm_add(trim(t2), t3);

}

t2=strtok(0, "&");

}

strsncpy(buf2, getsenv("QUERY_STRING"), 1024);  //从环境变量里面获取数据(get)

t2=strtok(buf2, "&");                                                          //的确是get,进行数据处理

while(t2) {

t3=strchr(t2, ‘=’);

if(t3!=0) {

t3[0]=0;

t3++;

__unhcode(t3);

parm_add(trim(t2), t3);

}

t2=strtok(0, "&");

}

参考文档:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值