程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 用Delphi編寫CGI程序(六)

用Delphi編寫CGI程序(六)

編輯:Delphi
在 前 面 的 幾 個 章 節 裡 , 我 們 完 成 了 CGI 程 序 的 一 般 論 述 。 在 此 , 我 給 出 一 個 簡 單 的 示 范 程 序 作 為 對 以 前 的 內 容 的 總 結 。
  
   
  
   要 使 用 這 個 程 序 , 您 需 要 OmniHTTPD 的 最 新 測 試 版 : OmniHTTPD 2.0b1 (beta 1) for Windows 95/NT 。 如 果 您 沒 有 , 可 以 在 這 裡 下 載 ( oh20b1.zip) 。
  
   安 裝 OmniHTTPD 同 第 一 講 中 的 方 法 一 樣 , 這 裡 就 不 再 講 了 。 我 在 這 裡 只 講 一 講 這 一 版 本 中 的 一 些 設 置 問 題 :
  
   打 開 OmniHTTPD 的 屬 性 設 置 對 話 框 , 使 用 Web Server Global Setting 按 鈕 , 轉 到 External 頁 , 將 .cgi 的 設 置 刪 除 。 在 未 刪 除 時 , 用 cgi 作 擴 展 名 的 CGI 程 序 是 作 為 Perl 程 序 處 理 的 ; 在 我 們 的 課 程 中 , Perl 語 言 的 CGI 程 序 的 擴 展 名 是 .pl , 而 編 譯 後 的 CGI 程 序 擴 展 名 是 .CGI , 所 以 , 要 將 設 置 作 這 樣 的 修 改 。
  
   在 這 個 版 本 的 OmniHTTPD 中 , 對 SSI(Server Side Include) 命 令 的 支 持 比 以 前 的 版 本 大 大 加 強 了 , 支 持 include 、 exec 等 命 令 。 在 示 范 程 序 中 , 我 用 到 了 這 些 命 令 。
  
   您 將 (ex8.zip) 下 載 後 , 裡 面 包 含 三 個 文 件 : index.shtml 、 makelog.cpp 和 makelog.exe 。 index.sHtml 是 一 個 包 含 SSI 命 令 的 腳 本 , 請 拷 貝 到 c:httpdhtdocs 目 錄 下 ; makelog.exe 是 CGI 程 序 , 請 拷 貝 到 c:httpdCGI-bin 目 錄 下 ; makelog.cpp 是 makelog.exe 的 源 文 件 , 如 果 您 要 修 改 編 譯 的 話 , 必 須 用 32 位 的 編 譯 器 , 如 VC 等 , 否 則 無 法 使 用 。
  
   除 此 之 外 , 您 需 要 將 OmniHTTPD 中 的 設 置 作 一 個 修 改 : 選 擇 Default Virtual Setting , 在 Server 頁 上 將 Default Index 改 為 index.shtml 。 這 樣 , 當 您 在 浏 覽 器 中 敲 入 http://localhost 時 , OmniHTTPD 自 動 調 入 index.sHtml 。
  
   再 做 一 個 WEB 文 檔 , 以 index.html 為 文 件 名 存 在 c:httpdhtdocs 目 錄 下 。 您 用 浏 覽 器 訪 問 localhost 時 , index.shtml 先 調 用 makelog.exe , 存 儲 用 戶 的 訪 問 信 息 , 再 調 用 index.Html , 將 其 顯 示 在 浏 覽 器 中 。 用 戶 的 訪 問 信 息 存 儲 在 c:httpdCGI-bin 目 錄 下 的 userlog 文 件 中 。
  
   這 個 實 例 用 到 了 CGI 規 范 中 基 本 的 環 境 變 量 和 SSI 技 術 , 請 您 好 好 研 究 一 下 。
  
   4 、 數 據 庫
  
   在 CGI 的 應 用 中 , 數 據 庫 方 面 的 應 用 是 最 體 現 CGI 程 序 強 大 功 能 的 。 在 互 聯 網 上 , 數 據 庫 是 非 常 多 的 , 而 這 些 數 據 庫 的 WEB 應 用 的 需 求 也 是 越 來 越 多 ( 無 論 是 來 自 公 司 的 還 是 來 自 用 戶 的 需 求 ) 。 可 以 說 , WEB 本 身 就 是 一 個 巨 大 的 數 據 庫 , 如 何 將 這 些 龐 大 的 數 據 集 合 有 效 的 組 織 起 來 , 在 WEB 上 進 行 發 布 , 是 CGI 和 數 據 庫 系 統 共 同 解 決 的 課 題 。
  
   如 果 要 對 CGI 和 數 據 庫 的 應 用 進 行 分 類 的 話 , 從 不 同 角 度 有 不 同 的 分 類 方 法 。 例 如 , 按 數 據 庫 的 規 模 可 以 分 成 文 本 數 據 庫 、 本 地 數 據 庫 (Microsoft Access 等 ) 和 數 據 庫 服 務 器 (MS SQL Server 、 Informix 等 ) ; 按 CGI 的 處 理 內 容 可 以 分 為 前 端 數 據 庫 CGI 程 序 ( 同 使 用 WEB 浏 覽 器 的 用 戶 交 互 的 CGI 程 序 ) 和 後 端 數 據 庫 CGI 程 序 ( 同 數 據 庫 交 互 的 CGI 程 序 ) 等 。 選 擇 數 據 庫 的 規 模 通 常 取 決 於 您 要 完 成 的 任 務 的 數 據 量 、 成 本 等 ; 在 編 制 CGI 程 序 時 采 用 前 端 和 後 端 分 開 還 是 結 合 通 常 取 決 於 您 的 數 據 處 理 的 復 雜 程 度 等 。
  
   通 常 , 如 果 您 的 數 據 集 合 在 幾 兆 字 節 之 內 , 而 且 您 的 數 據 記 錄 之 間 沒 有 復 雜 的 關 系 , 您 可 以 選 擇 用 文 本 文 件 建 立 數 據 庫 , 這 樣 可 以 使 成 本 限 制 在 最 小 , 而 且 文 本 文 件 有 一 個 數 據 庫 管 理 系 統 (DBMS , 即 DataBase Management System) 所 沒 有 的 優 勢 : 如 果 您 的 數 據 發 生 了 錯 誤 , 您 可 以 將 您 的 文 本 文 件 調 入 任 何 一 個 文 本 編 輯 器 進 行 恢 復 , 而 若 是 您 的 數 據 庫 系 統 發 生 了 錯 誤 , 除 非 您 是 一 個 數 據 庫 專 家 , 否 則 很 難 修 復 。
  
   如 果 您 的 數 據 集 合 非 常 大 , 或 者 您 的 數 據 記 錄 之 間 存 在 著 復 雜 的 關 系 , 則 最 好 選 用 數 據 庫 系 統 。 用 文 本 文 件 實 現 一 個 幾 十 兆 的 數 據 庫 會 使 任 何 一 台 高 級 的 RISC 服 務 器 不 堪 重 負 。 如 果 您 用 CGI 程 序 處 理 數 據 間 復 雜 的 關 系 , 必 然 會 使 CGI 程 序 的 復 雜 性 加 大 , 占 用 過 多 的 服 務 器 資 源 ; 另 一 方 面 , 利 用 數 據 庫 系 統 的 功 能 可 以 簡 化 CGI 程 序 設 計 的 難 度 , 提 高 開 發 效 率 。
  
   在 選 擇 數 據 庫 系 統 時 , 您 需 要 從 以 下 幾 個 方 面 進 行 選 擇 : 一 、 操 作 系 統 平 台 : 您 應 該 選 擇 您 最 熟 悉 的 數 據 庫 系 統 , 也 要 選 擇 您 最 熟 悉 的 操 作 系 統 平 台 , 只 有 這 樣 , 才 可 以 少 出 錯 誤 。 二 、 價 格 : 您 應 在 各 種 能 完 成 您 的 工 作 的 數 據 庫 系 統 中 選 擇 最 便 宜 的 , 在 這 裡 , 我 可 以 告 訴 大 家 一 個 免 費 的 數 據 庫 系 統 , 叫 MiniSQL , 它 必 須 在 UNIX 或 Linux 平 台 上 運 行 , 我 還 不 知 道 哪 裡 有 Windows 平 台 的 免 費 數 據 庫 系 統 , 如 果 誰 知 道 , 請 告 訴 我 , 我 會 在 今 後 的 課 程 中 告 訴 大 家 的 。
  
   我 們 的 課 程 是 講 述 用 Delphi 開 發 CGI 程 序 的 , 而 Delphi 中 提 供 了 Interbase Server 數 據 庫 系 統 , 因 此 , 我 在 這 裡 將 主 要 講 述 采 用 數 據 庫 系 統 的 CGI 程 序 開 發 。 同 時 , 由 於 數 據 庫 系 統 減 輕 了 大 量 的 編 碼 工 作 , 我 采 用 前 端 CGI 和 後 端 CGI 合 二 為 一 的 方 式 , 在 一 個 CGI 程 序 中 就 完 成 用 戶 輸 入 處 理 和 數 據 庫 操 作 。 但 在 其 他 的 系 統 平 台 上 , 也 許 這 種 方 式 會 不 使 用 , 請 各 位 讀 者 按 前 面 的 討 論 自 己 斟 酌 。
  
   在 這 裡 , 我 要 附 帶 說 明 一 下 幾 種 不 同 的 CGI 及 其 在 我 們 的 OmniHTTPD 中 的 使 用 差 別 :
  
   Standard CGI : 標 准 CGI , 必 須 放 置 在 /CGI-bin/ 設 置 的 目 錄 下 , 可 以 在 OmniHTTPD 運 行 時 隨 時 修 改 。
  
   Win CGI : 應 用 在 Windows 系 統 中 的 CGI , 必 須 放 置 在 /cgi-win/ 設 置 的 目 錄 下 。 此 CGI 應 用 INI 文 件 獲 取 用 戶 端 浏 覽 器 的 請 求 , 而 不 是 使 用 環 境 變 量 或 標 准 輸 入 。 我 們 一 般 不 使 用 這 種 CGI 。
  
   ISAPI : Microsoft 公 司 提 出 的 一 種 應 用 動 態 鏈 接 庫 的 CGI 規 范 。
  
   NSAPI : Netscape 公 司 提 出 的 一 種 應 用 動 態 鏈 接 庫 的 CGI 規 范 。
  
   這 幾 種 CGI 規 范 各 有 特 點 : 其 中 Standard CGI 可 以 使 用 可 執 行 程 序 或 Perl 等 腳 本 語 言 編 寫 , 但 效 率 低 , 占 用 資 源 多 , 每 一 個 CGI 請 求 就 會 有 一 個 CGI 程 序 的 實 例 在 服 務 器 中 運 行 。 Win CGI 的 特 點 同 Stardand CGI 相 同 。 ISAPI 和 NSAPI 效 率 高 , 常 駐 內 存 , 而 且 無 論 有 多 少 個 CGI 請 求 , 在 服 務 器 中 只 有 一 個 實 例 在 運 行 , 僅 僅 是 這 個 實 例 對 應 的 數 據 集 合 不 同 ; 但 這 種 CGI 不 易 調 試 , 因 為 它 必 須 在 WEB 服 務 器 軟 件 關 閉 時 才 可 以 進 行 更 新 。
  
   在 下 一 講 中 , 我 將 給 出 一 個 White Page 的 示 范 程 序 。 White Page 是 一 個 電 子 郵 件 地 址 的 清 單 , 您 可 以 讓 用 戶 通 過 WEB 浏 覽 器 對 這 個 清 單 進 行 查 詢 、 編 輯 、 新 增 和 刪 除 等 操 作 。 在 這 一 講 中 , 我 給 出 的 示 范 程 序 僅 僅 是 查 詢 操 作 , 其 他 的 操 作 將 在 以 後 的 課 程 中 講 述 。
  
   這 個 示 范 程 序 建 立 在 Borland Interbase Server 數 據 庫 上 , 用 Delphi 開 發 。 在 開 發 中 , 我 選 擇 的 是 Standard CGI , 因 為 這 樣 容 易 調 試 。
  
   我 們 的 程 序 使 用 Stardand CGI 進 行 編 寫 , 可 以 方 便 的 調 試 。 等 調 試 成 功 後 , 在 Delphi 中 可 以 很 方 便 的 改 成 ISAPI/NSAPI , 僅 僅 是 一 個 語 句 ( 怎 麼 樣 , Delphi 很 不 錯 吧 ! ) 。
  
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved