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

利用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.rar_CGI 嵌入式_cgi web_web cgi_嵌入式 CGI_web

    总的来说,"cgi.rar"中包含的信息可能是一个关于如何在嵌入式环境中利用CGI建立Web服务的教程或实例。通过对CGI的深入理解,我们可以创建出能够处理复杂任务的嵌入式Web服务器,从而实现设备的远程管理和自动化操作...

    cgi.rar_c cgi_cgi_cgi-web_cgi-webserver_网页 cgi

    CGI(Common Gateway ...总结来说,这个压缩包资料主要围绕着如何利用C语言开发CGI程序来实现动态网页,涉及了CGI的基本概念、工作原理、安全性和性能优化等方面的知识,对于学习CGI编程和Web服务器扩展非常有帮助。

    Cgi.rar_cgi_cgi linux_cgi c++_cgi-web

    首先,CGI是Web服务器提供动态内容的一种方式。当用户通过浏览器请求一个动态页面时,Web服务器会启动一个CGI程序,传递请求参数,然后CGI程序处理这些数据并生成HTML响应,最后Web服务器将这个响应发送回给用户的...

    cgi.rar_CGI Programming_cgi_html cgi_web cgi_world

    在“CGI Programming on the World Wide Web O'Reilly”这本书中,作者可能详细介绍了如何利用这些语言来开发CGI程序,并提供了实践指导。O'Reilly是一家著名的科技图书出版商,他们的书籍通常深入浅出,适合初学者...

    万维网上的CGI编程CGI Programming on the World Wide Web

    随着互联网的发展,特别是Web技术的进步,CGI逐渐成为了创建动态内容的一种流行方式。尽管后来出现了诸如PHP、ASP等更为高效的技术,但CGI仍然在某些特定场景下发挥着重要作用。 #### 三、CGI的工作原理 1. **请求...

    STM32+LWIP+WEB_SSI_CGI

    在STM32项目中,通过WEB_SSI_CGI,开发者可以编写C语言的CGI程序,这些程序在STM32上运行,并通过LWIP发送到客户端,从而实现网页的动态更新和实时数据展示。 **网络编程流程** 1. **初始化**:首先,需要配置STM32...

    cgi.rar_cgi_cgi c++_cgi-web

    "cgi_c++"则强调了使用C++编程语言实现CGI程序的方式。 总之,CGI是一个历史悠久且仍然被广泛使用的Web服务器扩展技术,它允许开发者使用各种编程语言创建动态Web内容,为Web服务带来了无限的可能性。通过学习和...

    STM32系列,LWIP,WEB,CGI,SSI

    在本文中,我们将深入探讨如何利用STM32集成轻型网络库(LWIP)来实现Web服务器功能,包括CGI(通用网关接口)和SSI(服务器端包含)。 LWIP,全称Lightweight IP,是一个开源的、轻量级的TCP/IP协议栈,适用于资源...

    CGI在嵌入式WEB服务器中的应用和实现[参考].pdf

    利用CGI技术,用户可以通过在Web浏览器端进行设置,对远程设备进行操作,简化了远程控制程序的开发,并提供了用户友好的界面。 CGI的工作原理是,当用户在Web浏览器中提交一个请求(如填写并提交表单),Web服务器...

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

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

    sqlite webcgi login 示例

    SQLite WebCGI Login 示例是一个关于如何使用SQLite数据库与Web Common Gateway Interface (CGI)脚本来实现用户登录验证的教程。这个教程可能适用于那些想要在没有大型服务器端框架的情况下,搭建简单但安全的Web...

    安装windows web server后用vb写cgi scripts (14KB)...

    总之,安装Windows Web Server并用VB编写CGI脚本是实现服务器端动态处理的一种有效方式。通过学习和实践,开发者能够利用VB的便利性和CGI的强大功能,创建出各种各样的Web应用程序,满足各种业务需求。

    qt访问cgi的方法与cgi实例

    在 IT 领域,尤其是 Web 开发中,CGI(Common Gateway Interface,通用网关接口)是一种标准,它允许 Web 服务器执行外部应用程序并返回结果给客户端。Qt 是一个强大的 C++ 库,广泛用于跨平台的桌面和移动应用开发...

    uClinux下WebServer及CGI技术的实现.pdf

    根据提供的文件信息,本文将深入探讨在uClinux环境下如何实现WebServer及CGI技术,并具体讲解其实现原理、过程以及应用场景。 ### uClinux环境下的WebServer与CGI技术实现 #### WebServer基本原理与功能 Web...

    用C语言编写CGI程序

    ### 用C语言编写CGI程序详解 #### 一、CGI概述 CGI(Common Gateway Interface,通用网关接口)是一种标准协议,用于Web服务器与外部...通过合理利用这些变量,可以实现更复杂的功能,如用户身份验证、日志记录等。

    cgi-0.7.zip_CGI linux_cgi_linux c cgi_linux 封装_web接口

    这个"cgi-0.7.zip"压缩包包含了一个C语言编写的CGI实现,专门针对Linux系统进行了优化和封装,为开发者提供了一个便捷的Web接口。 CGI的基本工作原理是:当用户通过浏览器访问一个CGI程序时,Web服务器接收请求并...

    CGI.rar_CGI javascript_CGI linux_CGI 传感器_cgi_cgi功能的实现

    CGI(Common Gateway Interface,通用网关接口)...通过理解CGI的工作原理,结合JavaScript和Linux,我们可以构建出高效且功能强大的网络服务,同时利用CGI与传感器的集成,可以将物理世界的数据实时反映到数字世界中。

    嵌入式Linux下基于CGI的文件上传下载的实现

    本文介绍了一种在嵌入式Linux环境下基于CGI实现文件上传下载的方法。通过使用ACME的thttpd作为轻量级Web服务器,并结合C语言编写CGI程序,成功地实现了文件的上传和下载功能。这种方法适用于资源有限的嵌入式系统,...

    嵌入式Linux下基于CGI的文件上传下载的实现.pdf

    通过在嵌入式Linux下使用ACME的thttpd作为Web服务器,结合C语言编写的CGI程序,可以高效、可靠地实现文件的上传和下载功能。这种方法不仅充分利用了有限的资源,还保证了系统的稳定性和安全性。然而,随着技术的发展...

Global site tag (gtag.js) - Google Analytics