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 調 用。