程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 用VB編寫WindowsCGI應用程序

用VB編寫WindowsCGI應用程序

編輯:VB綜合教程
一、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("<HTML><HEAD><TITLE>
  歡迎</TITLE></HEAD>")
  Send("<BODY>")
  Send("<H1ALIGN=CENTER>
  <FONTCOLOR='#FF0080'>
  歡迎您訪問</FONT></H1>")
  Send("<H1ALIGN=CENTER>
  <FONTCOLOR='#FF0080'>
  貴州大學計算機軟件與理論研究所
  </FONT></H1>")
  Send("<HRWIDTH='100'>")
  Send("<P><H2><FONTCOLOR='#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:[email protected]'>
  [email protected]")
  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("<HTML><HEAD><TITLE>貴州大學
  </TITLE></HEAD>")
  Send("<BODY><H2>歡迎您訪問貴州
  大學計算機軟件與理論研究所WWW站點</H1>")
  Send("我們的e-mail是<AHREF=""mailto:"
  &CGI_ServerAdmin&_
  """>[email protected]:</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("<HTML><HEAD><TITLE>謝謝您!
  </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->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved