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

用Delphi編寫CGI程序(三)

編輯:Delphi
也 許 各 位 讀 者 感 到 CGI 程 序 有 一 種 神 秘 感, 在 這 一 部 分 將 講 述 一 些 關 於 CGI 程 序 的 基 本 編 程 過 程。 您 讀 了 之 後, 就 不 會 再 有 神 秘 感 了。
  
      3 、 CGI 規 范 的 其 他 問 題:
  
      也 許 各 位 讀 者 感 到 CGI 程 序 有 一 種 神 秘 感, 在 這 一 部 分 將 講 述 一 些 關 於 CGI 程 序 的 基 本 編 程 過 程。 您 讀 了 之 後, 就 不 會 再 有 神 秘 感 了。
  
      首 先, 在 進 行 任 何 編 程 工 作 時, 將 一 個 大 任 務 分 成 許 多 小 任 務, 每 個 小 任 務 完 成 相 對 獨 立 的 功 能。 許 多 人 不 願 自 己 編 寫 CGI 程 序, 就 是 因 為 覺 得 CGI 編 程 很 難。 其 實, 將 一 個 典 型 的 CGI 程 序 分 成 以 下 幾 個 部 分, 再 一 一 解 決, 您 就 不 會 對 CGI 程 序 感 到 困 難 了:
  
  
      總 體 的 說, 在 浏 覽 器 中 調 用 一 個 CGI 程 序 時, 服 務 器 首 先 要 找 到 CGI 程 序, 一 般 的, CGI 程 序 都 放 在 服 務 器 指 定 的 目 錄 中, 在 我 們 的 OmniHTTPD 中, 在 cgi-bin 和 cgi-win 虛 擬 目 錄 指 定 的 實 際 目 錄 下, 分 別 為 c:httpdcgi-bin 和 c:httpdcgi-win 目 錄。 您 可 以 在 OmniHTTPD 中 修 改 實 際 目 錄, 也 可 以 添 加 虛 擬 目 錄, 如: 將 虛 擬 目 錄 cgi-test 指 定 為 c:my-cgi ; 如 果 您 在 c:my-cgi 目 錄 下 有 一 個 名 為 test1.cgi 的 CGI 程 序, 您 可 以 在 浏 覽 器 中 通 過 地 址 http://localhost/cgi-test/test1.CGI 調 用 它。
  
      在 正 常 情 況 下 服 務 器 找 到 了 浏 覽 器 請 求 的 CGI 程 序, 就 產 生 了 此 CGI 程 序 的 一 個 進 程。 這 樣, 浏 覽 器 與 服 務 器 就 建 立 好 了 連 接。 一 旦 CGI 程 序 執 行 完 畢, 此 進 程 就 消 失, 連 接 也 消 失 了。 上 圖 中 所 有 的 操 作 都 是 在 建 立 了 連 接 的 時 間 內 完 成 的, 因 此, 每 個 CGI 程 序 完 成 的 任 務 要 盡 可 能 小, 否 則, 會 占 用 服 務 器 的 大 量 時 間 和 資 源, 客 戶 端 浏 覽 器 的 等 待 時 間 也 會 很 長。
  
      在 上 面 的 圖 中 您 可 以 看 到,CGI 程 序 一 般 分 為 數 據 輸 入、 數 據 處 理 和 數 據 輸 出 三 個 部 分; 有 時, 要 在 數 據 處 理 部 分 同 數 據 庫 進 行 交 互( CGI 程 序 的 特 長 也 在 此)。 這 三 個 部 分 中, 數 據 輸 入 和 數 據 輸 出 有 嚴 格 的 規 范, 而 數 據 處 理 就 是 您 發 揮 想 象 力 的 地 方 了。 下 面, 我 將 著 重 講 一 講 數 據 輸 入 和 數 據 輸 出 的 規 范 及 注 意 事 項:
  
      在 以 前, 我 們 曾 列 出 了 CGI 程 序 所 用 的 幾 乎 所 有 環 境 變 量。 其 中, 有 相 當 一 部 分 是 同 數 據 的 輸 入 和 輸 出 有 密 切 關 系 的。 下 面, 我 們 就 分 類 列 出 其 中 最 常 用 的 環 境 變 量:
  
      與 服 務 器 相 關 的 環 境 變 量:
  
  GATEWAY_INTERFACE
  SERVER_NAME
  SERVER_PORT
  SERVER_PROTOCOL
  SERVER_SOFTWARE
  
      與 客 戶 機 相 關 的 環 境 變 量:
  
  HTTP_ACCEPT
  HTTP_ACCEPT_ENCODING
  HTTP_ACCEPT_LANGUAGE
  HTTP_AUTHORIZATION
  HTTP_CHARGE_TO
  HTTP_FROM
  HTTP_IF_MODIFIED_SINCE
  HTTP_PRAGMA
  HTTP_REFERER
  HTTP_USER_AGENT
  
      與 請 求 相 關 的 環 境 變 量:
  
  AUTH_TYPE
  CONTENT_FILE
  CONTENT_LENGTH
  CONTENT_TYPE
  OUTPUT_FILE
  PATH_INFO
  PATH_TRANSLATED
  QUERY_STRING
  REMOTE_ADDR
  REMOTE_USER
  REQUEST_LINE
  REQUEST_METHOD
  SCRIPT_NAME
  
  
      在 這 裡 值 得 說 明 的 是 CONTENT_FILE 和 OUTPUT_FILE 。 在 Windows 3.1 和 DOS 上 沒 有 很 多 語 言 可 以 通 過 標 准 輸 入 輸 出( STDIN 和 STDOUT ) 讀 和 寫, 所 以 用 這 兩 個 變 量 代 替。 其 他 的 環 境 變 量 可 以 參 考 以 前 的 詳 細 列 表。
  
      以 前 講 過, GET 方 法 通 過 URL 傳 遞 數 據; POST 方 法 通 過 STDIN 傳 遞 數 據。 無 論 是 用 什 麼 方 法, 數 據 傳 遞 過 程 中 數 據 是 經 過 編 碼 的。 不 過, 我 們 不 用 擔 心 編 碼 和 解 碼 的 問 題, 因 為 我 們 將 用 的 開 發 語 言 可 以 自 動 完 成 此 任 務: 在 Perl 中 是 CGI-lib.pl , 在 Delphi 中 是 TWebModule 等。
  
      頭 信 息 在 CGI 編 程 中 也 是 非 常 重 要 的。 頭 信 息 是 CGI 程 序 在 向 客 戶 機 發 信 息 前 的 信 號。 有 三 個 主 要 的 頭 信 息 類 型:
  
  Content-type //向浏覽器傳遞Html
  Location   //向浏覽器傳遞新的URL
  Status  //通常在CGI程序出錯使用來檢查錯誤
  
      Content-type 是 浏 覽 器 處 理 的 信 息 類 型, 主 要 是 MIME 的 類 型。 定 義 的 方 法 為 類 型 和 子 類 型 的 組 合。 常 用 的 MIME 類 型 有: Text 、 Multipart 、 Message 、 Application 、 Image 、 Audio 和 Video 。
  
      例 如, CGI 程 序 要 向 浏 覽 器 傳 送 一 個 HTML 文 檔 前, 應 先 傳 送 text/Html 。 用 Perl 書 寫 如 下:
  
      print "Content-type:text/Html "
      print "< h1> Hi everyone! < /h1> "
  
      Location 使 浏 覽 器 轉 向 新 的 URL 。 例 如:
  
      print "Location:http://www.chinabyte.com"
  
      這 段 Perl 程 序 使 浏 覽 器 轉 向 ChinaByte 的 主 頁。
  
      Status 指 出 CGI 程 序 的 狀 態, 通 常 在 CGI 程 序 出 錯 使 用 來 檢 查 錯 誤。 下 表 列 出 了 常 用 的 狀 態 碼 及 含 義:
  
  代 碼 結 果     描 述 
  200  OK     請 求 正 常 滿 足 
  202  Accept     請 求 被 接 受, 處 理 中 
  301  Moved      文 檔 被 移 到 新 地 點 
  302  Found      文 檔 不 在 說 明 處, 但 在 服 務 器 別 處 
  400  Bad Request HTTP  請 求 的 語 法 不 對 
  401  Unauthorized  文 檔 需 要 存 取 權 
  403  Forbindden   服 務 器 拒 絕 訪 問 文 檔 
  404  No Found    服 務 器 找 不 到 文 檔 
  500  Server Error  服 務 器 發 生 嚴 重 錯 誤 
  502  Service Overloaded   服 務 器 忙, 無 法 處 理 請 求 
  
  
      這 一 講 到 這 裡 就 完 了。 各 位 有 了 這 些 CGI 的 基 礎 知 識 後, 可 以 開 始 使 用 任 何 一 種 語 言 一 步 步 開 發 CGI 程 序 了。 我 再 一 次 告 訴 大 家, CGI 程 序 並 不 神 秘, 它 只 不 過 是 一 種 建 立 服 務 器 和 某 種 任 務 的 對 話。
  
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved