top
Loading...
Windows操作平臺下CGI的實現
p>實現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下。CGI程序的執行一般有兩種調用方式:一種是通過URL直接調用,如:http://gjy.sic.o.ml.org/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:httpdhtdocsCGI
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.exeMETHOD=POST>
A Text Input:<INPUT TYPE=text><BR> A Radio Input:
1<INPUT TYPE=radioNAME=radiolVALUE=1>
2<input type=radio NAME=radiolVALUE=2>
3<INPUT TYPE=radioNAME=radiolVALUE=3><BR>
OK Input:<INPUT TYPE=submitVALUE=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將其轉交給用戶。典型的服務器應用程序以數據庫查詢為代表。

作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗