`
ruilinruirui
  • 浏览: 1049952 次
文章分类
社区版块
存档分类
最新评论

利用CGI方式实现Web查询

 
阅读更多
摘要:本文分析讨论了将WEB与后以数据源相连的方法之一——公共网关界面CGI的概念与特点,并以成绩查询系统作为实例详细分析了用C语言进行CGI程序设计的方法与过程。
关键词:CGI、Web集成

一CGI简述
公共网关界面(CGI)是一种编程标准,它规定了Web服务器调用其它可执行程序(CGI程序)的接口协议标准。CGI程序通过Web服务器与运行Web服务器调用其它可执行程序交互,它接受Web浏览器发送给Web服务器的信息,并进行处理,然后将结果再送给Web服务器及Web浏览器。CGI程序可以用任何程序设计语言编写,如Shell、perl、C、Java等,用C语言编写的CGI程序具有速度快、安全性高等特点。CGI程序
通常用于加入查询机制、搜索机制、交互式应用及其它一些应用。
CGI接口标准包括输入、环境变量、标准输出三部分,CGI程序可以通过标准输入stdin)从Web服务器得到输入信息,例如从FORM中得到数据,这就是常用的POST方法。由于不同的操作系统采用了不同的信息交换机制,其参数传递的处理过程也有别,在Unix与DOS中,环境信息反映着本级程序运行时的某些系统状况,可用于父序与子程序间的信息传递,CGI正是通过设量环境变量在服务器与客户机间传递数
据的,各操作系统都提供了许多环境变量,它们定义了程序的执行环境,应用程序可以存取它们。Web服务器和CGI接口也设置了一些环境变量用以传递一些重要的参数。CGI程序通过标准输出(stdout)将输出信息传送给Web服务器,传送给服务器的信息可以是HTML文本也可以是纯文本。本文将利用C语言编写一个CGI应用程序——学生成绩查询系统,并分析了CGI程序设计的方法、过程、技巧。

二、成绩查询系统介绍
一个在WWW环境下的学生成绩公布栏必将成为日后各类成绩发布的主要手段,每位学生交将有自己的密码,所以不必担心成绩上网之后的保密性。任何学生以任何形式上网进入本站点的成绩查询系统之后,只要输入自己的系列、班别、学号及密码,便可以利用这个学生绩查询系统查询自己的成绩,该设计思路与系统不仅适合各类校内部的成绩发布,也适合于全国高考、统考等大规模考试的成绩发布。本文介
绍的只是一个功能单一的查询系统,若需完善还需加入成绩维护部分,由成绩管理者进行内容维护,包括成绩输入、修改、删除等功能。

三、HTML FORM格式部分
3.1 FORM输放的分解
在UNIX系统上,CGI信息是利用STDIN/STDOUT方式传输的,所以若要编写一个C语言的CGI程序,就必须要了解如何解剖与截取STDIN的CGI信息。当用户提交一个HTML FORM时,WEB浏览器首先对FORM中的数据以名字/值对的形式进行编码,并发送给WEB 服务器,然后再由WEB服务器传递给CGI程序,其格式如下:
NAME1=VALUEL&NAME2=VALUE2&NAME3····
名字是FORM中定义的INPUT,SELECT等标置名字,值是用户输入或选择的标值,在程序中将对其进行分析与解码,将其分解成一组组的名字/值对,这个过程是通过在输入流中查找字符“=”与“&”来完成的,每当找到字符“=”,标志着一个FORM变量名字的结束,当找到字符“&”,标志着一个FORM变量值的结束。当名字/值对分解完之后,还须将输入中的一些特殊字符转换成相应的ASCII字符,如需将“+”转换成空格符,将一些特殊字符转换成ASCII字符,对以上分所分析的分解与转换过程,在下面的程序中有详细注明。
3.2HTML FORM文件
成绩查询系统的HTML文件P.htrnl
<TITLE>学生成绩查询系统</TITLE>
<H1>学生成绩查询系统</H1>
<FORM METHOD="POST"ACTION="URL地址"
<H3>系列:<SELECTNAME="Department">
<OPTION>计算机系
<OPTION>英语系
<OPTION>无线电系
</SELECT><P>
学号:<INPNT TYPE="TEXT"NAME="ID"><P>
密码:<INPNT TYPE="PASSWORD"NAME"PASSWORD"><P>
<INPNT TYPE="SUBMIT"VALUE"查询”>
<INPNT TYPE+"RESET"VALUE="放弃”〉
</FORM>

四、学生成绩查询CGI程序
该CGI程序分解、接收HTML FORM中提供的查询条件,然后查询出该学生的成绩并返回。学生成绩有两个数据文件,一个是***SUB DAT,其中含有学生的各个科目,*** 表示系别,如计算机系的科目文件是COMPSUB DAT,英语系的科目文件是ENGSUB.DAT,无线电系科目文件是ELECSUB.DAT;另一个数据文件是***SCOER.DAT,该文件中包含有每个学生的学号、密码与成绩,***表示系别,如计算机系的学生成绩文件是COMPSCORE.DAT,同理,其他系的学生成绩文件按此原则以此类推。当学生输入的学号及密码符合数据文件的内容时,就会显示该学生的成绩。
main(int argc,char*argv[])
{
register int i,m=0;
int len;
FILE*fp,*fpl,*fopen();
char filename1[100],filename2[100],title[100];/*设定资料变量*/
char subject[10][10];
char id[100][10],password[100][10];
int score[100][20],sum[100],allsum;
float avg[100],alltotalavg;
int rank,number,index,find,j,kind;
printf("content-type:text/html%c%c",10,10);
len=atoi(getenv("CONTENT_LENGITH"));
for(i=0;len && (!feof(stdin));i++){
m=i
inputs[i].val=readdstdin(stdin,&,&len);/*读STDiN信息*/
AddToSpace(inputs[i].val);
Convert(inputs[i].val);
inputs[i].name=ReadData(inputs[i].val,=);
}
strcpy(filename1,"/score/setup/");
stucpy(filename2,"/xcore/data/");
if(strcmp(inputs[o].val,"计算机系/)==0
strcat(filename1,"compusb.dat");
strcat(filename2,"compscore.dat");
}
if(strcmp(inputs[o].val,"英语系")==0
strcat(filenamel,"engsub.dat");
strcat(filename2,"engscore.dat");
}
if(strcmp(inputs[o].val,"无线电系")==0
}
strcat(filename1,"elecsub.dat");
strcat(filename2,"elecscore.dat");
}
fp=fopen(filename1,"r");/*打开文件*/
kind=0;
while(fscanf(fp,"%s",subject[kind]!=EOF
kind=kind+1;
fclose(fp);

fp1=fopen(filename2,"r");/*打开文件*/
allsum=0;
for(i=0;i<100;i++)
{
numbde=i;
if(fscanf(fp1,"%s%s",id[i],
password[i]!=EOF){
sum[i]=0;
for{j=0;j<kind;j++){
fscanf(fp1,"%d",&score[i][j]);
sum[i]+=score[i][j];
}
avg[i]=sum[i]/kind;
allsum+=sum[i];
}
else
break;
}
fclose(fp1);
find=0;
if(strcmp(inputs[2].val,id[i])==0&&
strcmp(inputs[3].val,password[i]==0){
index=i;
find=i;
}
}
if(find==0)
{
printf{"<H>输入有误,请再输一次!</h1>/n");
}
else
{
rank=1
for(i=o;i<number;i++)
if(sum[index]<sum[i])
rank=rank+1;
slltotalavg=allsum/number;
printf("<center><H1>学生成绩查询系统</H1></center>");
pritf("/n<center>查询学生学号:%s</center>
",
inputs[2].val);
printf("/n<center>成绩如下:</certer><hr>");

for(i=0;i<kind;i++)
printf{"%s/t",subject[kind]);
printf("总分
/n");
for(i=0;i<kind;i++)
printf("%d/t",score[index][i]);
printf["%d
/n",sum[index]);
}
}

五、结束语
本文以学竽成绩查询系统作为实例,详细分析了用C语言进行CGI程序设计的方法与过程,随着INTERET/INTRANET应用的深入,将WEB与多台数据库联接的需求也日益迫切,CGI可以使得WEB能够能最低程序的复杂性与其后台信息集成,成为一种支持多种类型的通用环境,但是由于在CGI方式中每执行一次交互都需启动一个外部程序,因此其在实时应用方面受到了限制,因而,WEB SENER API及JOCBC等应用方式也正在成熟。

分享到:
评论

相关推荐

    基于CGI的嵌入式Web服务器的设计与实现

    为了在资源有限的...本文所设计的查询数据系统以嵌入式Linux操作系统为软件平台,以PowerPC8548为硬件平台,利用HTML表单和CGI技术完成了对后端数据库SQLite的数据信息查询,实现Web客户端与Web服务器的动态交互。

    利用VB实现的Web Server程序

    I added the ability to use CGI scripts. There is a new GUI to make using the server easier. There are some new security features as well. There are many other things now that simply make this web...

    &nbsp;基于CGI技术的嵌入式动态Web的研究与实现

    为了在资源有限的嵌入式平台上有效地实现动态Web,以嵌入式Linux操作系统为软件平台,以mini2440开发板为硬件平台,利用CGI技术实现了动态Web。本文通过比较几种Web服务器的优缺点,选定了性能优异的Boa作为嵌入式...

    利用JavaScript开发Web应用

    WWW(World Wide Web)是全球范围内可共享访问的...Web动态页面的制作,传统方法采用CGI编程,而a va及JavaScript是目前流行的方法;Web信息与数据库的关联,可采用Java 、JavaScript、SA PI、ISAPI等方法来实现。

    Perl_CGI轻松进阶

    本书以生动活泼的口吻详细介绍了Perl-CGI编程技术及如何利用Perl语言编写CGI应用程序,并借此创建动态Web页面。全书着重介绍了Perl语言在Web领域的应用。作者不是枯燥地讲述语言规范,而是通过大量实例由浅入深地...

    webcgi-exploits:多语言Web CGI界面漏洞利用

    Web CGI漏洞利用 这是与不同的Web CGI相关的几种漏洞利用。 我在过去几年中写过这些漏洞。 这个怎么运作 Web应用程序基本上就是这些层: 应用领域 网络框架 脚本语言引擎 Web容器(服务器) 网络前端代理(nginx...

    嵌入式Web技术应用研究

    通过对嵌入式数据库SQLite的分析研究,实现了嵌入式数据库在嵌入式w曲中的应用,并提出了一个基于删的嵌入式w曲服务器内嵌一个小型数据库管理系统的设计方案,利用CGI实现了嵌入式web服务器与用户的动态交互并成功的...

    web压力测试共享软件IRI-WebStress开放下载

    可以测试不同上网方式、在不同地区、访问Web不同页面、在不同并发访问密度...声明:WebStress只是为了测试目的,任何作为拒绝服务DoS和利用分布式测试功能实现分布式拒绝服务攻击DDoS都是违法的,后果由使用者自负。

    ASP技术访问WEB数据库

     CGI是较早实现的技术。适用于多种服务器平台,如UNIX、WINDOWS等,但CGI的开发成本高、维护困难、功能有限、不具备事务处理功能、占用服务器资源较多。  2. INTERNET数据库连接器IDC(Internet Database Connector...

    WEB-CT压力测试工具

    可以测试不同上网方式、在不同地区、访问Web不同页面、在不同并发访问密度情况下...声明:Web-CT只是为了测试目的,任何作为拒绝服务DoS和利用分布式测试功能实现分布式拒绝服务攻击DDoS都是违法的,后果由使用者自负。

    网站压力测试(Web-CT) V4.0

    网站压力测试 Web-CT可以测试不同上网方式、在不同地区、访问Web不同页面、在...声明:Web-CT只是为了测试目的,任何作为拒绝服务DoS和利用分布式测试功能实现分布式拒绝服务攻击DDoS都是违法的,后果由使用者自负。

    webserver服务器源代码

    简单的web服务器的源代码,对于静态html文档的请求可以完全响应,对于动态请求处理的不是很好,...利用建立线程池的方式实现了对并发访问的处理。程序在linux环境下运行,gcc编译。没有注释,有问题可以q我 1070367347

    基于NiosⅡ的嵌入式Web模块

    针对目前一部分智能化设备无法接入互联网的问题,设计了一种基于Nios Ⅱ的带有CGI(通用网关接口)功能的嵌入式Web模块,该模块作为浏览器和具体应用之间的接口,解决了不带互联网接入功能的智能化设备的互联网接入问题....

    Python Web程序搭建简单的Web服务器

    上一篇讲了《Python入门》Windows 7下Python Web开发环境搭建笔记,接下来讲一下Python语言Web服务的具体实现:第一个Python Web程序——简单的Web服务器。 与其它Web后端语言不同,Python语言需要自己编写Web服务器...

    网站猎人压力测试

    可以测试不同上网方式、在不同地区、访问Web不同页面、在不同并发访问密度情况下...声明:Web-CT只是为了测试目的,任何作为拒绝服务DoS和利用分布式测试功能实现分布式拒绝服务攻击DDoS都是违法的,后果由使用者自负。

    基于.net的个人网站

    通过CGI建立WEB页面与脚本程序之间的联系,并且可以利用脚本程序来处理访问者输入的信息并据此做出响应。但是,这样的编制方式比较困难而且效率低下,因为每一次修改程序都必须重新将CGI程序编译成可执行文件。  2....

    asp网上视频点播系统

    并简要介绍了流煤体技术和Internet及Web技术的发展,本次设计内容主要有以下几个方面: 1应用软件的讨论 2系统设计3数据库设计与实现.4后台系统和数据库的配置5前端网络页面的开发与设计6网站的测试. 近年来,Internet...

    Apache服务器实用大全(高清中文PDF)

    第二部分讨论虚拟Web站点、服务器端包含命令(SSI)以及通用网关接口(CGI)。第三部分讨论安全机制,包括如何进行用户认证和监视、如何使用外部认证程序以及如何利用数据库来管理用户访问控制。第四部分介绍高级...

    计算机机房管理系统毕业论文

    网上选课系统主要利用Internet 的Web 服务器作为前台用户(学生) 与数据库服务器交互的中介, 通过Web 服务器将学生的选课请求提交给数据库服务器,并将数据库服务器的处理结果以Web 网页的形式返回给用户。 因此, 网上...

    基于TMS320C6657的嵌入式Web视频服务器设计

    设计利用CGI接口实现浏览器端与服务器端的数据交互以及底层硬件的控制,采用H.264视频编码压缩视频,采用RTP/RTCP协议实现实时视频传输。实验证明,基于TMS320C6657的嵌入式Web服务器性能可靠。

Global site tag (gtag.js) - Google Analytics