?? 17.txt
字號:
Windows操作平臺下CGI的實(shí)現(xiàn)
華中理工大學(xué)圖像識別與人工智能研究所 龔建勇
實(shí)現(xiàn)WWW服務(wù)器與客戶的交互可以有多種途徑,如CGI、ISAPI、JAVA、ASP等,CGI是一種大家都比較熟悉的一種實(shí)現(xiàn)上述功能的有效途徑,本文將就如何在Windows平臺下實(shí)現(xiàn)CGI功能作一介紹。
一、CGI概述
1.CGI概念
CGI即通用網(wǎng)關(guān)接口(Common Gateway Interface),它是一個(gè)WWW服務(wù)器主機(jī)對外服務(wù)的標(biāo)準(zhǔn)接口。一般來說,一個(gè)CGI接口的功能就是在超文本文件和服務(wù)器主機(jī)應(yīng)用程序間傳遞信息。
2.CGI程序語言
事實(shí)上,任何一種程序語言,只要能在服務(wù)器主機(jī)上利用CGI接口來編寫應(yīng)用程序,都可以叫作CGI程序語言。目前最為流行的CGI程序語言有四種:C、Shell、Perl和Visual Basic,其它一些語言也有許多人在用,如TCL、Frotran及AppleScript等。下文我們將介紹用C語言編寫CGI的方法。
3.CGI程序的執(zhí)行
CGI程序一般是個(gè)可執(zhí)行程序。編譯好的CGI程序一般要集中放在一個(gè)目錄下。具體存放的位置隨操作系統(tǒng)的不同而不同,例如UNIX系統(tǒng)下是放在cgi-bin子目錄下,而在Windows操作下(注意,這里不包括NT4.0)以Webstar或Website作WWW服務(wù)器,CGI程序都放在cgi-win下。C GI程序的執(zhí)行一般有兩種調(diào)用方式:一種是通過URL直接調(diào)用,如:"http://gjy.sic.o.ml.or g/cgi-win/cgi.exe",在Netscape的URL欄里直接寫入上述描述就可以調(diào)用該程序:另一種方式,也是主要的方式是通過交互式主頁里的FORM欄調(diào)用,通常都是用戶在填完一張表后按確認(rèn)按鈕啟動CGI程序。
4.CGI工作的主要流程
CGI工作的主要流程是:1.通過HTML獲取用戶輸入的信息;2.將用戶輸入的信息傳給服務(wù)器主機(jī)應(yīng)用程序(如數(shù)據(jù)庫查詢);3.將服務(wù)器處理結(jié)果通過HTML文件返回給用戶。
二、Windows平臺下CGI的工作原理
CGI主要的功能不外乎在服務(wù)器應(yīng)用程序和客戶之間傳遞信息。我們知道,通常CGI應(yīng)用在服務(wù)器和客戶端傳遞信息是通過輸入輸出流來實(shí)現(xiàn)的,如UNIX平臺下的CGI,通過讀取輸入流Scanf來獲取用戶輸入,讀取輸出流printf向用戶輸出結(jié)果。而Windows系統(tǒng)下CGI實(shí)現(xiàn)這一功能是通過文件系統(tǒng)來實(shí)現(xiàn),即通過一個(gè)特定的輸入文件來獲取用戶輸入的信息,通過一個(gè)輸出文件向用戶傳遞結(jié)果。
這里這個(gè)輸入文件是由WWW服務(wù)器生成的一個(gè)臨時(shí)文件,里面包含了各種環(huán)境信息及用戶輸入信息,以key=value的形式給出,類似于Windows里的INI文件。下面以一個(gè)典型的該文件為例說明主要層的含義。
[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信息,如要求的協(xié)議Request Protocol,提取用戶信息的方式Me thod,執(zhí)行程序的路徑Exectable,服務(wù)器軟件(Server Software),服務(wù)器名(Server Name), 端口號(server Port)等。
2.Accept欄
這一欄包含客戶端可以接受的文件類型。
3.System欄
這一欄包含一些Widnows CGI使用的特別項(xiàng)目如輸出(Output File),Content File
4.Form Literal資料欄
如果用戶端的要求是使用POST方式,用戶輸入的資料會被解碼后以key=value的方式放在這一欄里,這里的key即輸入欄的變量名,value是用戶輸入的信息。
5.Form External欄
如果解碼后的字串長度超過254byte,或字串中含有控制字元,系統(tǒng)會把這些信息存在該欄指定的臨時(shí)文件里并指出長度。
三、CGI應(yīng)用的實(shí)現(xiàn)
1、開發(fā)平臺
首先操作系統(tǒng)應(yīng)為Windows操作系統(tǒng)。我們用的是Windows 95。其次需要建立WWW服務(wù)器 ,我們用的是Website1.1。安裝website并設(shè)置各相應(yīng)目錄后,將主頁放入主目錄中。
2、交互主頁的制作
交互主頁就是用戶可以在主頁上輸入信息,而不是單純僅供瀏覽的主頁。一般來說,用戶輸入信息的形式有填寫編輯框,點(diǎn)選無線按鈕等選擇框及選擇下拉菜單等。下面是一個(gè)簡單的例子。
<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>
將上述標(biāo)記存成HTML文件,該主頁作好后,將其放在website設(shè)定的主目錄中。然后用瀏覽器觀看,將會看到結(jié)果。
其中FORM:說明一個(gè)交互式輸入組合框。
ACTION:指定該FORM對應(yīng)的CGI程序的URL。
INPUT:輸入的形式,text為編輯框,radio為無線按鈕等。
INPUT里的第一個(gè)參數(shù)TYPE表明輸入的類型,第二個(gè)參數(shù)NAME表示該輸入框代表的變量名。用戶在此輸入的信息將存在這個(gè)變量里。CGI程序也是通過這些變量提取用戶輸入信息。
3.CGI程序編寫
前面我們說過,原則上CGI程序可以用任何語言編寫,但在windows平臺下,一般只有 C和VB是適合的。因?yàn)镃GI程序是后臺執(zhí)行的back-end程序,C和VB都可以方便地生成無界面的 back-end程序。考慮到效率,我們用C語言來作CGI程序的編寫。
Web server會通過Winexec來執(zhí)行back-end,命令格式如下:
back-end-exe cgi-data-file content-file outputfile url-args
back-end-exe是CGI程序的完整路徑,cgi-data-file是服務(wù)器產(chǎn)生的CGI資料文件,值為完整的路徑:content-file是客戶端發(fā)出的請求,其信息放在臨時(shí)目錄下的文件里,值為完整的路徑;output-file是程序處理的結(jié)果,值為完整路徑。url-args為URL中?后的參數(shù)。
服務(wù)器生成的臨時(shí)輸入文件在客戶請求結(jié)束后即自動消失,所以CGI程序的第一步就是截取該文件,然后將所需的信息提取出來并過濾,最后得到的就是用戶輸入,然后對其作相應(yīng)處理,如寫入留言板或轉(zhuǎn)交給數(shù)據(jù)庫應(yīng)用程序作查詢處理。
值得一提的是VC和VB都提供了專用的從INI文件中提取信息的函數(shù),即GetPrivateprofi leString()。
4、服務(wù)器應(yīng)用程序
這一部分程序的功能就是對CGI轉(zhuǎn)來的用戶信息進(jìn)行處理,處理的結(jié)果交給CGI程序的ou tput-file,通過CGI將其轉(zhuǎn)交給用戶。典型的服務(wù)器應(yīng)用程序以數(shù)據(jù)庫查詢?yōu)榇怼?
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -