1.0 、 CGI 程式的功能:
首先, 什麼是公共網關介面( CGI ) 呢? CGI 是用來定義WEB 伺服器與外部程式之間通訊方式的標準, 使得外部程式產生HTML 、 圖像或其他內容, 而伺服器處理的方式與那些非外部程式產生的HTML 、 圖像或其他內容的處理方式是相同的。 因此, CGI 程式不僅使你能產生靜態內容, 而且能產生動態內容。 使用CGI 的原因在於它是一個定義良好並被廣泛支持的標準。 雖然, java 、 ActiveX 等可以完成CGI 程式的功能, 但並不是所有瀏覽器都支援它們。 相反, 所有瀏覽器都支援CGI , 如: Lynx 、 IE 、 Netscape 等。
然而, 和其他技術一樣, CGI 也有它的限制。 本節我就講述CGI 程式的功能、 優點與不足。
1.1 、 CGI 功能
有許多任務, CGI 是最佳的是唯一的選擇, 這些任務可分為三類: 初級任務、 中級任務和高級任務。 初級任務是一些不用怎麼編程的任務, 如:
文字型計數器
產生簡單的HTML 的程序
少於50 行用Perl 語言、 Shell 腳本、 C 語言或C++ 語言編寫的程式
這樣的任務用CGI 來寫至少有三點好處: 第一、 CGI 運行最快, 而Java 等開銷太大; 第二、 CGI 標準於當前瀏覽器最兼容, 這一點在前面已經提到; 第三、 CGI 資源豐富, 您可以在Internet 上找到成千上萬的CGI 程式碼。
中級任務是包含圖象映像和其他一些稍微複雜的程式設計任務。 在中級任務中, 用CGI 和Java 來寫程式的難易度差異不大。
此類任務包括:
圖象映像
產生整頁的HTML 的CGI 腳本
動畫
很有特色的是, 對於高階任務, 用CGI 比用Java 程式設計簡單得多。 此類任務有:
後端資料庫操作
搜尋引擎
多重動態頁面
其中, 後端資料庫操作( 存取資料庫的應用程式) 體現了CGI 的優越性。 CGI 有一定的歷史, 其中許多有用的功能都在CGI 的庫中由別人做好了; 同時, 許多大公司提供了用CGI 作好的源代碼。 Java 是一種程式設計語言, 而CGI 是網關程式的功能規格。 如果Java 有較大改變, 您得重寫整個程式; 而CGI 有大幅變更的, 您只要升級CGI 函式庫程式即可。
然而, CGI 在有些方面還是有其限制的。
1.2 、 CGI 的局限性
在圖象映像和動畫方面, CGI 程式不如Java 程式開發方便。 現在Java 越來越流行, CGI 程式則越來越適合編寫簡短雜亂的程式和資料庫應用程式。
1.3 、 CGI 程式功能
CGI 程式的最大特點是可以用任何一種語言編制, 可運行在任何一種平台上, 只要它符合CGI 的規範即可。 下表是一個比較:
任務CGI+HTML HTML
處理表單Yes No
建立WEB 頁面上非靜態內容Yes No
處理圖象映像檔案Yes Yes
在WEB 頁面和文件中搜尋Yes No
建立表單Yes Yes
創建平台無關的文檔Yes Yes
創建聊天室等互動應用程式Yes No
頁面動態產生Yes No
依使用者需要進行頁面文件裁切Yes No
下面, 我們用一系列「 Hello World 」 程式來結束本講:
Perl :
Require "cgi-lib.pl";
PRint &PrintHeader;
print " ";
print "Hello World ";
print &PrintEnv;
exit;
此檔案儲存在C:HTTPDCGI-BIN 目錄下, 檔案名稱為2_1.pl 。 在瀏覽器中以位址http://localhost/cgi-bin/2_1.pl 呼叫。 請注意, 此時OmniHTTPD 應在運作。 如果一切正常, 您可以在瀏覽器中看見「 Hello World 」 和環境變數。
C : #include
#include "html-lib.h"
#include "cgi-lib.h"
int main()
{
html_header();
html_begin("Test CGI");
h1("CGI Program");
printf(" ");
h2("CGI Environment Variables");
print_cgi_env();
html_end();
return 0; }
編譯後將執行檔複製到C:HTTPDCGI-BIN 下, 改名為2_1.cgi , 用位址http://localhost/cgi-bin/2_1.cgi 呼叫。