用VB编写WindowsCGI应用程序

2016-02-19 12:56 85 1 收藏

今天图老师小编要向大家分享个用VB编写WindowsCGI应用程序教程,过程简单易学,相信聪明的你一定能轻松get!

【 tulaoshi.com - 编程语言 】

一、WindowsCGI
  ----通用网关接口CGI是服务器与应用程序之间的接口,在编写HTML文件时可结合其他程序语言使客户通过浏览器将数据输入到文件里,经服务器处理后转送给客户或记录在服务器的数据库中。任何一种程序设计语言写的程序,若可在服务器主机上运行并可用CGI接口来传递数据,就可作为CGI应用程序,这种语言可被称为CGI程序语言或脚本语言(scriptinglanguage);目前最受欢迎的CGI程序语言有:C/C ,shellScript,Perl,和VisualBasic,此外还有Fortran,TCL,AppleScript等。
  ----CGI接口因平台不同而不同。Windows平台的CGI称为WindowsCGI。美国的BobDenny从需要实现CGI接口来处理Windows应用方面的要求入手设计实现了WindowsCGI,开发出目前在Windows95和WindowsNT平台上很受欢迎的HTTP服务器:WebSite;BobDenny用VB4.0写的WindowsCGI接口程序名为CGI32.BAS,是一个给用户在Windows95或WindowsNT环境下用VisualBasic来开发WindowsCGI应用程序的接口,主要处理WWW服务器(如:WebSite,Netscape,Alibaba等)与CGI程序之间的数据交换:在VB中通过WindowsCGI接口处理HTML的表单传过来的变量,并把处理结果通过WindowsHTTPServer再传给客户机上的浏览器,从而达到信息交互目的。
  
  ----由于Windows没有命令解释器(commandinterpreter),所以WindowsCGI程序都必需编译为可执行文件在服务器上运行。
  
  ----除VB外,可以在Windows上用来写WindowsCGI程序的语言还很多,例如:Delphi,Perl,VC 等;目前VisualBasic得以流行,是因为该语言不仅在Windows用户中很普及,而且最早被发表为撰写WindowsCGI程序的标准,同时该语言支持许多Windows环境:例如OLE,DDE,Sockets,ODBC等;此外,VB应用程序可在不需要窗体(windowsforms)而只在模组(modules)的环境下开发,十分符合CGI应用程序的需要。
  
  ----以前,多用VB4.0(32位版)开发WindowsCGI应用程序,由于VB5.0的推出,用VB5.0写WindowsCGI应用程序更为简单、方便和有力。
  
  ----要在Windows95/NT的PC微机上运行WindowsCGI程序必须在PC机上安装一个支持WindowsCGI的服务器,例如WebSite;WebSite是一个基于Windows95/WindowsNT运行的32位、多线程的服务器,功能强大、使用方便,完全满足小单位或个人建立PC服务器的要求。有关它的最新信息和免费试用版可从http://website.ora.com/获取。
  
  二、用VB5.0编制WindowsCGI应用程序的具体步骤
  ----Denny用VisualBasic4.0(32位版)开发了一个WindowsCGI库模块:CGI32.BAS,它与WebSite软件一道提供使用(安装WebSite时CGI32.BAS被放在c:websitelib下,很容易找到);CGI32.BAS为Windows95/WindowsNT下用VB4.0开发WindowsCGI程序设计提供了极大的方便;目前微软推出了功能更强大的VisualBasic5.0,本文通过例子介绍在CGI32.BAS下用VB5.0编写WindowsCGI应用程序的方法,通过这些例子可以看出用VB5.0来编写WindowsCGI应用程序比VB4.0更为有力和简单。
  ----下面首先介绍一个最简单的WindowsCGI程序以及将它编译为可执行文件放于服务器应用的方法,这些方法是一般的,对VB编写的WindowsCGI程序普遍实用。程序由两个子过程CGI_Main()和Inter_Main()构成,子过程CGI_Main()功能是在服务器端产生一个HTML页面并送回Web客户,这个页面显示了两行汉字和服务器时间,是WindowsCGI程序的入口,是必不可少的;另一个子过程Inter_Main()提示该程序必须在Web服务器中运行。源程序代码如下:
  
  SubCGI_Main()
  Send("Content-type:text/html")
  Send("")
  Send("HTMLHEADTITLE
  欢迎/TITLE/HEAD")
  Send("BODY")
  Send("H1ALIGN=CENTER
  FONTCOLOR='#FF0080'
  欢迎您访问/FONT/H1")
  Send("H1ALIGN=CENTER
  FONTCOLOR='#FF0080'
  贵州大学计算机软件与理论研究所
  /FONT/H1")
  Send("HRWIDTH='100'")
  Send("PH2FONTCOLOR='#000000'
  您访问的时间是:"&Now)
  Send("我们的WWW网址:
  AHREF='http://www.gzu.edu.cn/
  ~lixiang/index.html'
  www.gzu.edu.cn/~lixiang/index.html/A")
  Send("我们的Email地址:
  AHREF='mailto:lixiang@gzu.edu.cn'
  lixiang@gzu.edu.cn")
  Send("/H2/BODY/HTML")
  EndSub
  SubInter_Main()
  MsgBox"这是CGI程序,需在Web服务器上运行."
  EndSub
  
  ----现在,介绍在VB5.0集成开发环境里编辑、编译、调试该WindowsCGI应用程序并生成可执行文件放入服务器中在网上使用的具体步骤:
  
  ----1建立项目(Project):运行VB5.0,在主菜单选“文件(F)|新建工程(N)”,在出现的“新建工程”对话框中选“标准EXE”;由于WindowsCGI应用程序不需要自己的窗体,故在用VB5.0建立项目文件(Project)的上述步骤后,在出现的名为“工程-工程1”的“资源管理器”窗口中用鼠标右击“Form1”将其删除;
  
  ----2添加文件:在主菜单选“工程(P)|添加文件(A)”,在出现的添加文件对话框中选择cgi32.bas所在目录(例如c:websitelib)将其打开加入工程中;
  
  ----3添加模块:在主菜单选“工程(P)|添加模块(M)”,在出现的对话框中将模块(Module1)打开加入;
  
  ----4录入代码:在模块代码窗口中录入上面给出的两个子过程的代码。
  
  ----5保存模块和工程文件:在主菜单中选:“文件(F)|工程另存为(E)”,可对模块(Module1.bas)和工程(工程1.vbp)重新取名(例如:guida.bas和guida.vbp)存盘;
  
  ----6生成可执行文件:在主菜单中选“文件(F)|生成guida.exe(K)”,在出现的对话框里选好存盘目录将guida.exe存盘;
  
  ----7将生成的可执行文件(guida.exe)放入服务器:对WebSite服务器,应放置在子目录WebSitecgi-win里;
  
  ----8在Web客户端运行这个CGI程序:在本机上运行,打开浏览器,在URL栏中连接:http://localhost/cgi-win/guida.exe;在网上的Web客户端,用http://服务器主机/cgi/guida.exe
  
  三、用VB5.0制作一个网上征求意见的WindowsCGI应用程序
  ----下面举一个较复杂实用的WindowsCGI程序,它由4个子过程组成:CGI_Main(),EnterGuest(),ReturnForm()和Inter_Main();它的功能是:服务器向申请连接的Web客户发出一张表单,Web客户在表单里填入有关数据后送回服务器,服务器收到Web客户的数据并将它们写入一个文件中存储起来,同时向Web客户发送一个收条。这个WindowsCGI应用程序的工作流程如下:一当Web客户要求CGI连接,服务器运行该CGI程序,首先执行CGI_Main()过程,CGI_Main()过程调用ReturnForm()向Web客户送出一个表单,如果Web客户填了意见表,并按键寄回服务器(此时过程CGI_Main()中CGI_RequestMethod="POST"成立)则由CGI_Main()过程调用EnterGuest()获取客户发来的数据并将其放入文件guestbk.csv中,同时向Web客户返回一个信息回条表示客户表单已收到。
  ----由于编译使用这个CGI程序的做法与上面完全相同,故下面仅给源程序代码:
  
  OptionExplicit
  ConstBOOK_FILE="guestbk.csv"'存放客户
  数据的文件,自动生成,可用Excel97调阅
  DeclareSubSleepLib"kernel32"
  (ByValdwMillisecondsAsLong)
  SubCGI_Main()
  IfCGI_RequestMethod="POST"Then
  EnterGuest
  Beep
  Else
  ReturnForm
  EndIf
  EndSub'
  
  ----一当Web客户要求CGI连接,服务器执行ReturnForm(),送出征求建议的表单:
  SubReturnForm()
  Send"Content-type:text/html"
  Send""
  Send("HTMLHEADTITLE贵州大学
  /TITLE/HEAD")
  Send("BODYH2欢迎您访问贵州
  大学计算机软件与理论研究所WWW站点/H1")
  Send("我们的e-mail是AHREF=""mailto:"
  &CGI_ServerAdmin&_
  """lixiang@gzu.edu.cn:/A")
  Send("HR")
  Send("请填下表,留下您的宝贵建议:")
  Send("FORMACTION="""
  &CGI_ExecutablePath&"""METHOD=""POST""")
  Send("PRE您的姓名:
  INPUTSIZE=25NAME=""name""")
  Send("E-mail地址:
  INPUTSIZE=25NAME=""email""")
  Send("您给我们的建议:TEXTAREACOLS=40
  ROWS=4WRAP=VIRTUALNAME=""comments""")
  Send("/TEXTAREA/PRE")
  Send("请击此处将您的建议送我们:
  INPUTTYPE=""submit""")
  Send("VALUE=""发送您的建议""")
  Send("HR")
  Send("/FORM/BODY/HTML")
  EndSub
  
  '获取客户建议表单数据,将所填数据存入文件guestbk.csv并向客户返回一个信息
  SubEnterGuest()
  DimiLockTriesAsInteger
  DimsDateAsString
  DimsNameAsString
  DimsEmailAsString
  DimsCommentsAsString
  'DimsBrowserAsString
  DimsFirstNameAsString
  DimfnAsInteger
  '提取建议的有关数据:
  sName=GetSmallField("name")
  sEmail=GetSmallField("email")
  sComments=GetSmallField("comments")
  iLockTries=0
  fn=FreeFile
  OnErrorGoTogLockFail
  gRetryLock:
  OpenApp.Path "" BOOK_FILEFor
  AppendLockReadWriteAs#fn
  OnErrorGoTo0
  sDate=Now
  Write#fn,sDate,sName,sEmail,
  sComments,CGI_RemoteAddr
  Close#fn
  sFirstName=Trim$(Left$(sName,
  InStr(sName,"")))
  IfsFirstName""
  ThensFirstName=sFirstName&","
  Send("Content-type:text/html")
  Send("")
  Send("HTMLHEADTITLE谢谢您!
  /TITLE/HEAD")
  Send("您的签名与建议是:PRE")
  Send("日期:"&sDate)
  Send("姓名:"&sName)
  Send("E-Mail:"&sEmail)
  Send("Hostaddress:
  ["&CGI_RemoteAddr&"]")
  Send("建议:/PRE")
  Send(sComments)
  Send("H2谢谢您!/H2")
  Send("/BODY/HTML")
  ExitSub
  gLockFail:
  Sleep(1000)
  iLockTries=iLockTries 1
  ResumegRetryLock
  EndSub
  
  SubInter_Main()
  MsgBox"这是CGI程序,
  需要在Web服务器中运行。",16,"CGI.BAS"
  EndSub->

来源:https://www.tulaoshi.com/n/20160219/1602505.html

延伸阅读
三、CGI编程实例 本节将用VB编写一个处理主页客户留言簿的CGI程序。除了要调用本文前面所介绍的Win32API函数外,程序中还调用了Win32API函数GetTempFileName()来获得一个唯一的临时文件名。程序中的函数UrlDecode()用来对客户端的输入进行URL译码。函数GetCgiValue()则用来分解字符串,根据表单元素的NAME属性获取其VALUE值,并调用Ur...
利用通用网关接口(CGI) Web服务器可以执行一些外部程序 并将这些外部程序所产生的输出结果和Web服务器所管理的静态文本 图像和声音融合在一起传给相应的Web浏览器。当客户机的浏览器向Web服务器请求一个HTML文件时 服务器在收到请求后就去寻找这个文件并将找到的文件传送给客户机。而当客户机的请求是一个CGI程序时 Web服务器将激活客户...
---- 一、提出问题 ---- 自从1996年微软推出Intellimouse鼠标后,带滚轮的鼠标开始大行其道,支持鼠标滚轮的应用软件也越来越多。但我感到奇怪,为什么VB到6.0本身仍然不支持鼠标滚轮,VF可是从5.0就提供MouseWheel事件了。 ---- 如何让VB应用程序支持鼠标滚轮?MSDN上有一篇解决VB下应用Intellimouse鼠标的文章,它解决这一问题的方法是通过...
摘要 本文讨论了VisualBasic应用程序访问SQLServer数据的几中常用的方法,分别说明了每种方法的内部机理并给出了每种方法的一个简单的实例,最后比较了每种方法的性能和优缺点。 引言 MicrosoftVisualBasic(简称VB)作为一种面向对象的可视化编程工具,具有简单易学的,灵活方便和易于扩充的特点。而且Microsoft为...
平时我们在过马路的时候常常会看到指挥交通的红绿灯,它的权利可大了,要是我们可以控制它就好了,虽然在现实生活中办不到,就让我们编写一个虚拟的红绿灯程序,也来过过控制红绿灯的瘾。 下面我们就开始编写吧。 第一件事当然是新建一个工程,然后引入所需控件。在“红绿灯”程序中,我们需要用到的控件有:OptionButton(选项按钮)...

经验教程

286

收藏

37
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部