说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Windows操作平台下CGI的实现 -VB资料

HTML文档下载 WORD文档下载 PDF文档下载
Windows操作平台下CGI的实现 -VB资料

华中理工大学图像识别与人工智能研究所 龚建勇

实现WWW服务器与客户的交互可以有多种途径,如CGI、ISAPI、JAVA、ASP等,CGI是一种大家都比较熟悉的一种实现上述功能的有效途径,本文将就如何在Windows平台下实现CGI功能作一介绍。  

一、CGI概述
1.CGI概念
CGI即通用网关接口(Common Gateway Interface),它是一个WWW服务器主机对外服务的标准接口。一般来说,一个CGI接口的功能就是在超文本文件和服务器主机应用程序间传递信息。
 
2.CGI程序语言
事实上,任何一种程序语言,只要能在服务器主机上利用CGI接口来编写应用程序,都可以叫作CGI程序语言。目前最为流行的CGI程序语言有四种:C、Shell、Perl和Visual Basic,其它一些语言也有许多人在用,如TCL、Frotran及AppleScript等。下文我们将介绍用C语言编写CGI的方法。
 
3.CGI程序的执行
CGI程序一般是个可执行程序。编译好的CGI程序一般要集中放在一个目录下。具体存放的位置随操作系统的不同而不同,例如UNIX系统下是放在cgi-bin子目录下,而在Windows操作下(注意,这里不包括NT4.0)以Webstar或Website作WWW服务器,CGI程序都放在cgi-win下。C GI程序的执行一般有两种调用方式:一种是通过URL直接调用,如:"http://gjy.sic.o.ml.or g/cgi-win/cgi.exe",在Netscape的URL栏里直接写入上述描述就可以调用该程序:另一种方式,也是主要的方式是通过交互式主页里的FORM栏调用,通常都是用户在填完一张表后按确认按钮启动CGI程序。
 
4.CGI工作的主要流程
CGI工作的主要流程是:1.通过HTML获取用户输入的信息;2.将用户输入的信息传给服务器主机应用程序(如数据库查询);3.将服务器处理结果通过HTML文件返回给用户。
二、Windows平台下CGI的工作原理
CGI主要的功能不外乎在服务器应用程序和客户之间传递信息。我们知道,通常CGI应用在服务器和客户端传递信息是通过输入输出流来实现的,如UNIX平台下的CGI,通过读取输入流Scanf来获取用户输入,读取输出流printf向用户输出结果。而Windows系统下CGI实现这一功能是通过文件系统来实现,即通过一个特定的输入文件来获取用户输入的信息,通过一个输出文件向用户传递结果。
这里这个输入文件是由WWW服务器生成的一个临时文件,里面包含了各种环境信息及用户输入信息,以key=value的形式给出,类似于Windows里的INI文件。下面以一个典型的该文件为例说明主要层的含义。
[CGI]
Request Protocol=HTTP/1.0
Repuest Method=POST
Executable Path=/cgi-win/cgitest.exe
Logical Path=/CGI
Physical Path=c:\httpd\htdocs\CGI
Server Software=Website /1.1(Shareware non-commercial License))
Server Name=gjy.sic.o.ml.org
Server Port=80
Server Admin=gjy@gjy.sic.o.ml.org
CGI Version=CGI/1.1 WIN
Remote Adress=2.02.114.2.182
[system〗
Debug Mode=No
Output File=D:\hs06f12d.out
*/*=Yes
image/gif=Yes
image/x-xbitmap=Yes
image/jpeg=Yes
[Extra Headers〗
User-Agent=Mozilla/3.0 (Windows;I;32bit)
[Fotra rm Literal〗
textl=hello world
radio1=2
[Form External〗
field300chars=D:\hs06f12d.000 300
fieldwith l inebreaks=D:\hs06f12d.001 43
[Frm Huge〗
fiel d230
K=d:s06f12d.002 276920
 
下面将主要各栏的意义解释如下:
1.CGI
这一栏包含大部分的CGI信息,如要求的协议Request Protocol,提取用户信息的方式Me thod,执行程序的路径Exectable,服务器软件(Server Software),服务器名(Server Name), 端口号(server Port)等。
2.Accept栏
这一栏包含客户端可以接受的文件类型。
3.System栏
这一栏包含一些Widnows CGI使用的特别项目如输出(Output File),Content File
4.Form Literal资料栏
如果用户端的要求是使用POST方式,用户输入的资料会被解码后以key=value的方式放在这一栏里,这里的key即输入栏的变量名,value是用户输入的信息。
5.Form External栏
如果解码后的字串长度超过254byte,或字串中含有控制字元,系统会把这些信息存在该栏指定的临时文件里并指出长度。
三、CGI应用的实现
1、开发平台
首先操作系统应为Windows操作系统。我们用的是Windows 95。其次需要建立WWW服务器 ,我们用的是Website1.1。安装website并设置各相应目录后,将主页放入主目录中。
2、交互主页的制作
交互主页就是用户可以在主页上输入信息,而不是单纯仅供浏览的主页。一般来说,用户输入信息的形式有填写编辑框,点选无线按钮等选择框及选择下拉菜单等。下面是一个简单的例子。
<HTML>
<HEAD>
<TITLT>Form Sample</TITLE>
<HEAD>
<BODY>
<FORM ACTION="http://gjy.sic.o.ml.org/cgi/win/sample.exe"METHOD=POST>
A Text Input:<INPUT TYPE="text"><BR>
A Radio Input:
1<INPUT TYPE="radio"NAME="radiol"VALUE=1>
2<input type="radio" NAME="radiol"VALUE=2>
3<INPUT TYPE="radio"NAME="radiol"VALUE=3><BR>
OK Input:<INPUT TYPE="submit"VALUE="OK">
<INPUT TYPE="reset" VALUE="reset">
</FORM>
</BODY>
</HTML>
将上述标记存成HTML文件,该主页作好后,将其放在website设定的主目录中。然后用浏览器观看,将会看到结果。
其中FORM:说明一个交互式输入组合框。
ACTION:指定该FORM对应的CGI程序的URL。
INPUT:输入的形式,text为编辑框,radio为无线按钮等。
INPUT里的第一个参数TYPE表明输入的类型,第二个参数NAME表示该输入框代表的变量名。用户在此输入的信息将存在这个变量里。CGI程序也是通过这些变量提取用户输入信息。
3.CGI程序编写
前面我们说过,原则上CGI程序可以用任何语言编写,但在windows平台下,一般只有 C和VB是适合的。因为CGI程序是后台执行的back-end程序,C和VB都可以方便地生成无界面的 back-end程序。考虑到效率,我们用C语言来作CGI程序的编写。
Web server会通过Winexec来执行back-end,命令格式如下:
back-end-exe cgi-data-file content-file outputfile url-args
back-end-exe是CGI程序的完整路径,cgi-data-file是服务器产生的CGI资料文件,值为完整的路径:content-file是客户端发出的请求,其信息放在临时目录下的文件里,值为完整的路径;output-file是程序处理的结果,值为完整路径。url-args为URL中?后的参数。
服务器生成的临时输入文件在客户请求结束后即自动消失,所以CGI程序的第一步就是截取该文件,然后将所需的信息提取出来并过滤,最后得到的就是用户输入,然后对其作相应处理,如写入留言板或转交给数据库应用程序作查询处理。
值得一提的是VC和VB都提供了专用的从INI文件中提取信息的函数,即GetPrivateprofi leString()。
4、服务器应用程序
这一部分程序的功能就是对CGI转来的用户信息进行处理,处理的结果交给CGI程序的ou tput-file,通过CGI将其转交给用户。典型的服务器应用程序以数据库查询为代表。
Node.app:用Node.js API开发iOS“原生”应用 Google Project Tango:能3D捕捉的智能手机 成功打造Evernote API生态系统的五大经验 研发周报:Google与Facebook的产品研发之道 AMD高级副总裁Lisa Su访华 宣布引领AMD复兴的五大战略 一周热点:IBM新技术使网速达400G/s,硬盘会“烧掉”吗 特种作战,纽约极客企图建造现实中的“潘多拉星球” 领先Google 150年的数据可视化和“不务正业”的超级计算机 苹果会成为新微软的四大理由 雨血·影之刃:参选2014年Unity游戏及应用大赛 AT&T联手IBM对抗AllSeen:“晚点和堵车”将成历史 微软WP春季更新将降低手机生产成本 意在开拓新兴市场 私人定制,十款最佳Node.js MVC框架 开发者“逆袭”,就等你一票! 基于多路云计算方案焕发新春 浪潮抢发E7 v2服务器 美国人眼中的腾讯 英特尔发布64位凌动处理器Merrifield 布局移动市场 OvershareKit:开源的iOS社交分享工具库 Ruby 2.1.1发布,改进系统加速,服务器兼容等问题 专访Ejoy2D作者云风:因Lua而生的开源图形引擎 当DDoS跨入400Gbps时代,那些来自孩子们的攻击该如何应对! Mesos渐入主流,Twitter模式有望“无限复制” 几十亿美元当头,你现实世界信息是否还会安全? 华为V3服务器挑战小型机,多路高端市场汹涌 迟到的祝福:Ruby生日快乐!编程快乐! 无缘CEO Stephen Elop将执掌微软硬件业务部门 又一API聚集地 3scale成立API Codex 你应该放弃的八大设计元素 Tropo与华为达成合作 Tropo API首次可供中国电信客户使用 抢先看:2014即将召开的Web Design大会 小米盒子2视频推送测试及解决播放优酷视频卡的问题 请教关于访问Jbuilder7中数据库的问题(急) JSP通过JDBC连接ORACLE的问题!!!!!!!!!!!!!!! 打印机状态,在线等待,万分火急 modelmaker6这东西是做什么的,那位前辈知道 NOTES在用久了之后,邮箱会变的巨大,几百MB,但即使我将邮件删除,其邮件文件还是那么大,怎么可以让它缩小? 我为程序中的职工设了一个序号,人数有多少序号就有多少。可以一眼就看出有多少人。可是当我在离职表中删除职工时。序号跟着被删除。删除 关于sql的难题。 请问如何用SQL语句更改一个表的字段长度,其他都不变. jsp读取oracle8.1.6数据表中的中文,读出为?,着急啊。 上个100帖子已结,现在再拿100分求从导入到数据库的代码,各位老大帮忙看看。 怎样用程序设置文件夹共享? VB中,怎样实现C中的continue? 注册表与记录登录密码 更新表中某字段的值 请问如何实现像delphi编辑器那样,当输入了关键字后会变成粗体或其它的颜色? 有人需要Delphi调用水晶报表的例子吗? 关于ADO+SQL Server2000数据库备份的问题! vb.net应用程序! SQL语句问题 有关位图的问题? 如何从扫描仪中读图,欢迎讨论 这个问题难者不会,会者不难! 如何把自制的ActiveX打包成*.cab包放在网页上 ? 关于DeleteTable方法 备份数据库时出现42000错误:"d:\backup\20021115.mdfIO"发生不要恢复错误,backup被中止,救命啊,谢谢!!! An very easy problem! vb.net简单的问题。 怎么用Linux 下的C/C++开发一个窗口,人人有分! delphi7怎么注册? 请问:VB中如何实现Crystal Report打印? VB可以使用MySQL数据库吗? libc stdio中fgets的疑问! 还是文档拷贝问题,原文档中的RTF域怎么拷贝到另一数据库中的新文档中。 请估价开发一个b/s结构的桥牌网站 关于名字空间namespace.散分了!! 文件上传,急!! 初学者问题之数据库连接--有点急 http://CDNA.8q8.net/受到黑客攻击,请发表意见 兄弟们,请问在win2k下,怎么实现在exe文件加上自己的一段代码,给点思路? “好的” 接分! 有关闭包问题,在线求解! 如何在Datagrid中实现交叉表? 我想请问一下,在SQL_SERVER中,可不可以发送URL啊,可以的话怎么写法?谢谢! VB 编程发 Lotus Notes 邮件。(200分) 请问使用sql2000 for jdbc连接sql7的问题 请估价一个bs结构的桥牌游戏网站 IIS以及SSL代理的简单问题!急急急急!来者有分!!! 如何把24和32位图的文件保存为2色位图? 请问一下用winsock怎样绑定两块网卡? 请估价一个bs结构的桥牌游戏网站。 如何在win2000/xp上限制内网用户上网的带宽? 财藏官库, 我爸爸通常开小轿车去上班 怎样描写快乐有趣瞬间的诗句? 什么是财 什么是官 在黑色轿车里的男子是我的爸爸用英语怎么说? 根据意思写出词语,快乐有趣的活动 上面一个水,下面一个口怎么念? 我的名字与“唯一”谐音,想找个合适的英文名.与“唯一”谐音,或者有“唯一”的意思的名字 麻烦要x的平方-y的平方+x的三方-y三平方的因式分解.谢谢 共字下面一个水字念什么?有这么个字么? 请问这些交通标志各是什么意思? 分解因式X三次+X二次-Y三次-Y方 什么是纱卡 下面这个交通标志是什么意思 因式分解 x方(x-y)(y-x) 哭用英语怎样表达! 看图写话,求大师帮帮忙,一定有好评,九十个字以上 分解因式(x+y)方+4(x-y)方-4(x方-y方) 你可能会哭用英语怎样表达A.You may cryB.You maybe cryC.You may be cry 二年级看图写话,最少100个字 导盲犬、导盲犬导盲犬在主人要过马路的时候会这么样、【这么帮助主人的】导盲犬在主人要上楼梯的时候会这么样、有车子的时候会这么样、下车时、导盲犬会这么样、【反正就是导盲犬 我哭过该怎样用英文表达呢? 英语翻译嗯,翻译下《HONEY》,《GIRLS'GENERATION》,《BABY BABY》,《KISSING YOU》的中文意思.因为真的很好听,你们也可以去听听看喔! “导盲犬”是什么意思? 神的哭泣 英文表达 英语翻译不要罗马音译的 导盲犬是什么狗 神的哭泣 用英文怎么表达 老师介绍了许多雷锋的事迹.(修改病句) 导盲犬是什么狗呢? 最少100字 修改病句:课堂上,老师给我们介绍了许多敦煌壁画的故事. 导盲犬与主人的故事说明了什么道理呢 小学一年级看图写话200字 from where 和from which的区别 谁能推荐一些经典的英文歌曲?要抒情点的. 用适当的指示代词、人称代词、物主代词和反身代词填空.1.Do you know that woman? Yes,l work with ()2.l can't find my keys.Where are ()?3.We wrote to Tom but he didn't answer () letter.4.l can't find my pen.Can l use ( 如何上好一堂初中外语课我是第一次上外语课,有谁可以指教一下. 我借的达州的书是山东版的,遂宁也是吗? 不管食物有多好吃,我都必须管住自己的嘴巴.求英语翻译! 怎么上好一节初中语法课? 如图,英语完形填空 英语:1.as long as you spend time on your study,you will get a good grade.此句中的as long as与同级比较中的as .as有什么区别?2..would you please tell me anything about Uncle lee?请问这个子为什么用了anything 委婉的问人前 如何上好一堂初中思品课 实践活动课上李老师请张小华到前面讲阿凡提巧斗财主的故事修改病句 If you spend more time your study,you will get good grades.选择A.on B.of C.in D.for 物主代词用哪个疑问词提问物主代词my your his her our their用那些特殊疑问词提问? 求文档:改病句:在实践活动课上,老师请李明讲“丑小鸭”的故事.因为李明嗓子有些嘶哑 if you spend your time only on English,not Chinese,you will shorten your time as half.if you always think in English way,not Chinese translation,you will shorten your studing time by half. 名词性物主代词用什么特殊疑问词提问 我叫做语萱,我想要一个能和我的名字在含义或听起来有联系差不多的英文名.不要太长的英文名,一般就可以了. “身弱难任财官”是什么意思啊测了个八字,说是命局当中官杀四现,且透出,身弱印星又虚浮.但是看不懂是什么意思,请明白的大师们指点下吧, 用合适的人称代词和形容词型物主代词填空.急---------------is a boy ,-------------name is bill.is---------english name peter?(you)this is not-----------desk.that is my desk.--can you spell--------------name,harry?--sorrytom and jac 我的名字是彭银妮,想取一个英文名,谐音比较接近我的名字,好听,好记,字母少,含义好,不多见的, 八字官杀旺, 这个香蕉和那个香蕉一样甜. 这个句子的英文翻译 、急求急求~ 推荐几首比较抒情英文歌曲类似这首的音乐 举人是什么官经常听到进士,举人什么的,到底举人是什么样的官呢? 等边三角形有十个圆球组成如何移动三个球让他的位置颠倒 哪位朋友推荐一部哲学入门的书籍
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘