转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
Web Application 開 發 利 器 - WebSnap(一)         ★★★★

Web Application 開 發 利 器 - WebSnap(一)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:2534 更新时间:2009/4/23 18:41:04

 

Web Application 開 發 利 器 - WebSnap!

Written by Code6421
2001/9/28

  更 新 記 事

 ( 本 篇 文 章 使 用 DELPHI 6.01 為 藍 本, 請 更 新 你 的 DELPHI 至 6.01 版!)

 

第 零 章 、 前 言

 

WebSnap 是 DELPHI 6 最 新 的 Web Application 開 發 架 構 , 她 以 前 一 版 本 的 WebBroker 為 基 礎 , 並 加 入 了 許 多 在 WebBroker+InternetExpress 架 構 中 所 缺 少 的 功 能 。 雖 然 說 是 加 強 , 但 從 技 術 角 度 上 來 看 , 兩 者 其 實 都 被 重 新 設 計 過 了 。 以 往 的 WebBroker+InternetExpress 架 構 中 , 最 大 的 問 題 是 支 援 的 功 能 過 於 簡 單 , 例 如 Session,Pages Manager,Servier-Side Scipt 等 開 發 Web Application 必 要 的 功 能 在 這 個 架 構 中 全 部 缺 席 。 使 用 者 常 常 必 須 靠 著 3rd-Party 元 件 的 支 援 , 或 自 行 撰 寫 這 類 元 件 來 滿 足 專 案 的 需 求 , 這 使 得 設 計 師 的 生 產 力 打 了 折 扣 。 WebSnap 架 構 補 足 了 這 些 功 能 並 且 加 入 了 許 多 新 的 元 件 , Borland 同 時 強 化 了 WebBroker , 加 入 了 管 理 網 頁 用 的 Multi-Modules 功 能 , 這 個 功 能 使 得 我 們 在 處 理 Pages Manager ( 網 頁 管 理 ) 工 作 變 的 簡 單 且 自 動 化 。 除 了 這 些 之 外 , WebSnap 在 架 構 上 使 用 了 許 多 新 穎 且 實 用 的 Design Patterns 概 念 , 這 個 決 定 使 得 WebSnap 整 個 架 構 可 以 橫 向 或 縱 向 延 展 , 讓 日 後 的 移 植 與 擴 充 工 作 變 的 相 當 簡 單 。 Borland 也 計 劃 在 日 後 將 WebSnap 整 個 架 構 移 植 至 Kylix 上 , 讓 DELPHI 設 計 師 能 在 Windows 及 Linux 兩 種 平 台 上 設 計 Web 應 用 程 式 , 這 對 有 跨 平 台 需 求 的 專 案 來 說 是 一 大 福 音 。 可 惜 美 中 不 足 的 是 在 DELPHI 6 出 貨 時 , 伴 隨 的 WebSnap 說 明 文 件 實 在 太 少 了 , 以 一 個 如 此 龐 大 的 架 構 而 言 , 沒 有 說 明 文 件 的 輔 助 , 使 用 者 很 難 用 的 上 手 。 在 DELPHI 6 出 貨 時 只 扮 隨 著 幾 個 WebSnap 的 範 例 程 式 , 的 確 ! 以 範 例 程 式 的 標 準 來 說 , 這 些 範 例 程 式 都 相 當 有 水 準 , 也 適 當 的 點 出 了 許 多 WebSnap 技 巧 的 應 用 方 式 , 可 惜 就 是 太 有 水 準 了 , 容 易 令 使 用 者 知 其 然 而 不 知 其 所 以 然 , 在 實 際 應 用 時 很 容 易 產 生 瓶 頸 , 此 時 又 沒 有 說 明 文 件 可 查 詢 , 所 以 使 用 者 也 只 能 靠 著 除 錯 範 例 程 式 或 是 在 NewsGroup 上 詢 問 別 人 , 藉 此 來 了 解 整 個 WebSnap 架 構 及 運 用 技 巧 , 這 不 但 沒 效 率 而 且 很 費 時 ! 因 此 我 希 望 這 篇 文 章 能 稍 稍 減 輕 這 種 現 象 , 由 於 WebSnap 架 構 相 當 的 龐 大 , 因 此 我 將 WebSnap 分 成 兩 篇 文 章 , 一 篇 是 概 觀 篇 , 另 一 篇 則 是 應 用 篇 , 概 觀 篇 中 涵 蓋 了 WebSnap 的 設 計 概 念 及 基 本 應 用 , 應 用 篇 則 涵 蓋 了 進 階 應 用 及 設 計 WebSnap 元 件 , 老 話 一 句 ! 希 望 你 能 由 這 兩 篇 文 章 中 得 到 你 想 要 的 知 識 。

  

第 一 章 、 WebSnap 架 構 概 觀

 

  WebSnap 是 一 個 相 當 龐 大 的 架 構 , 為 了 使 這 個 架 構 適 應 日 後 的 擴 充 或 移 植 , Borland 使 用 了 許 多 近 代 的 Design Patterns 來 建 構 她 。 使 用 Patterns 雖 然 能 夠 使 整 個 系 統 架 構 的 延 展 性 增 加 , 可 是 對 一 些 不 熟 悉 Patterns 的 使 用 者 來 說 , 這 同 時 也 造 成 了 學 習 曲 線 增 長 的 困 擾 。 這 些 使 用 者 通 常 很 難 在 一 開 始 時 就 了 解 整 個 WebSnap 架 構 的 流 程 及 運 用 方 式 , 容 易 迷 失 在 眾 多 的 元 件 及 介 面 叢 林 中 。 但 是 你 一 旦 領 略 到 WebSnap 為 何 會 設 計 成 這 樣 後 , 你 會 發 現 到 這 個 架 構 美 麗 的 一 面 。 在 這 一 章 中 我 試 著 對 WebSnap 做 一 個 概 觀 型 的 討 論 , 讓 你 對 整 個 架 構 有 一 個 基 本 的 認 識 , 後 面 的 章 節 再 用 實 作 來 引 導 你 做 進 一 步 的 了 解 。 這 可 能 是 你 第 一 次 接 觸 WebSnap , 因 此 我 建 議 你 在 看 這 章 時 以 看 故 事 的 心 態 來 閱 讀 , 不 需 要 強 迫 自 己 了 解 這 一 章 所 談 的 所 有 東 西 , 也 不 需 要 停 留 在 本 章 太 久 。 待 日 後 再 回 到 這 一 章 來 複 習 , 這 對 你 的 學 習 之 旅 會 比 較 輕 鬆 一 點 。

  

1-1                 WebSnap 的 八 大 元 件 類 別  

 

 WebSnap 由 數 十 個 元 件 以 及 Interface( 介 面 ) 所 組 成 , 其 中 各 個 元 件 與 Interface 之 間 的 關 係 相 當 的 複 雜 , 這 一 章 之 中 , 我 們 用 你 在 Component Palette 能 看 到 的 17 個 元 件 與 Web Module 為 基 礎 , 分 成 八 大 類 :

 

Web Module

PageProducer

Dispatcher

Adapters

Sessions

ValueList

Wrapper

Services

  

1-2 、 Web Module

 

  在 WebSnap 眾 多 的 元 件 中 , Web Module 位 於 較 核 心 的 部 份 , 她 在 WebSnap 中 扮 演 著 容 器 元 件 的 角 色 。 你 可 以 在 Web Module 中 放 置 Web Components 或 是 其 它 的 非 視 覺 化 的 元 件 , 就 像 是 以 往 我 們 使 用 TDataModule 元 件 一 樣 。 事 實 上 她 也 是 繼 承 至 TDataModule , 只 是 加 入 了 許 多 特 別 為 Web 所 設 計 的 功 能 。 在 WebSnap 中 Web Module 分 成 兩 大 類 , 在 每 一 類 中 又 可 細 分 為 兩 小 類 :

 

Application Module

 

Page Module

Data Module

Generic Module

 

Page Module

Data Module

 

在 一 個 WebSnap 程 式 中 , 至 少 必 須 含 有 一 個 Application Module , 在 這 個 Web Module 中 你 必 須 放 置 一 個 TWebAppComponents 元 件 , 這 個 元 件 就 是 WebSnap 的 中 心 。 所 有 的 Client Request( 網 頁 要 求 或 是 Action) 都 會 經 由 她 分 送 至 其 它 的 Global Components 元 件 。 Application Module 扮 演 著 網 頁 程 式 的 Control Center( 控 制 中 心 ) 角 色 , 任 何 對 於 這 個 程 式 的 要 求 都 會 先 送 往 Application Module 。 WebSnap 提 供 了 兩 個 不 同 類 型 的 Application Module , 因 應 不 同 的 專 案 需 求 , 你 可 以 選 擇 可 輸 出 網 頁 的 Application PageModule 或 是 不 輸 出 網 頁 , 只 單 純 放 置 資 料 或 其 它 非 視 覺 化 元 件 的 Application DataModule 。 當 你 選 擇 的 是 輸 出 網 頁 的 Application Module 時 , 你 必 須 放 置 一 個 PageProducer 元 件 到 這 個 Module 中 , 這 個 元 件 的 作 用 是 提 供 PageModule 輸 出 網 頁 的 能 力 , 通 常 我 們 會 使 用 Application PageModule 來 當 成 網 站 的 首 頁 , 不 過 這 不 是 絕 對 的 , 我 們 也 可 以 使 用 Application DataModule , 將 PageDispatch 元 件 的 Default Page 特 性 值 設 成 我 們 首 頁 的 Web Module 名 稱 , 那 這 個 Web Module 就 會 成 為 首 頁 。 Application DataModule 與 Application Page Module 功 能 上 大 致 相 同 , 差 別 在 於 該 Web Module 是 否 有 輸 出 網 頁 的 能 力 。 Application DataModule 並 沒 有 輸 出 網 頁 的 能 力 , 因 此 她 只 是 一 個 擁 有 Control Center 特 質 的 元 件 容 器 。 Generic Module 與 Application Module 的 功 能 大 致 相 同 , 差 別 只 在 於 Control Center 的 特 殊 能 力 上 , 下 面 是 Web Module 的 運 作 流 程 圖 :  

( 圖 :1)

 

在 這 個 流 程 中 有 一 個 重 點 需 要 特 別 注 意 , 那 就 是 當 你 選 擇 的 Application Module 是 PageModule 時 , 假 設 Client Request 訊 息 中 並 未 特 別 指 明 所 要 求 的 網 頁 , PageDispatcher 元 件 就 會 將 Client Request 導 向 位 於 Application PageModule 中 的 PageProducer 元 件 , 利 用 她 輸 出 網 頁 後 傳 回 Client 端 。 如 之 前 所 討 論 的 , 這 個 動 作 會 受 到 PageDispatcher 元 件 的 DefaultPage 特 性 值 所 影 響 , 你 可 以 藉 由 改 變 這 個 特 性 值 來 變 動 首 頁 的 位 置 。 由 流 程 中 你 可 以 發 現 到 , Dispatcher 元 件 在 WebSnap 中 所 扮 演 的 角 色 是 訊 息 分 發 者 , 作 用 是 將 Client Request 導 向 正 確 的 Module , 接 著 經 由 該 Module 中 的 PageProducer 元 件 所 提 供 的 輸 出 網 頁 能 力 , 將 網 頁 輸 出 後 傳 回 Client 端 。 當 要 求 的 網 頁 中 含 有 ServerSide-Script 時 , WebSnap 會 呼 叫 Active Script Engine 來 解 譯 這 些 Script 程 式 碼 , 產 生 出 最 終 的 HTML Document , 最 後 經 由 WebBroker 傳 回 給 Client 端 顯 示 。 為 了 支 援 ServiceSide-Script , 以 往 InternetExpress 架 構 中 的 TPageProducer 元 件 已 經 被 增 強 為 可 處 理 Script 的 元 件 , 你 可 以 在 她 的 ScriptEngine 特 性 值 中 設 定 你 的 程 式 所 需 要 使 用 的 Script Engine 類 型 。 目 前 的 WebSnap 支 援 JScript 及 VBScript 兩 種 Script 語 言 , 日 後 應 該 會 支 援 更 多 的 Script Engine ( 如 :PHP) 。 在 WebSnap 整 個 架 構 中 , 所 有 元 件 的 差 異 性 通 常 是 決 定 在 元 件 所 實 作 的 Interface 上 , Web Module 也 不 例 外 。 Application Module 與 Generic Module 之 間 的 差 異 在 於 IGetWebAppServices 這 個 介 面 上 , Application Module 中 實 作 了 這 個 介 面 , 而 這 個 介 面 中 定 義 了 取 出 TWebComponents 元 件 的 函 式 , 因 此 WebSnap 可 以 經 由 此 介 面 的 函 式 取 出 TWebAppComponets 元 件 , 再 經 由 她 取 得 Dispatcher 類 元 件 或 是 其 它 的 Global Components 。 Generic Module 則 未 實 作 此 介 面 , 這 個 介 面 是 Control Center 能 力 的 源 頭 。 PageModule 及 DataModule 之 間 的 差 異 則 是 在 於 IPageResult,ISetWebContentOptions, IGetDefaultAction, IGetProducerComponent,IProducerEditorViewSupport 這 五 個 介 面 上 , 實 作 IPageResult 介 面 的 元 件 必 須 提 供 輸 出 網 頁 的 函 式 , 當 WebSnap 遇 到 實 作 此 介 面 的 元 件 時 , 她 會 呼 叫 其 中 的 輸 出 函 式 來 取 得 網 頁 內 容 。 IGetDefaultAction 介 面 中 則 定 義 了 取 出 DefaultAction 物 件 的 函 式 , 這 個 物 件 的 意 義 常 常 被 搞 混 , 以 為 當 此 Page Module Activate( 活 化 ) 時 就 會 觸 發 這 個 Action 的 事 件 函 式 。 事 實 上 不 然 , 她 只 在 特 殊 的 情 況 下 才 會 被 觸 發 , 在 下 面 的 章 節 中 會 說 明 這 些 情 況 。 IGetProducerComponent 介 面 中 定 義 了 取 得 PageProducer 元 件 的 函 式 , Dispatcher 需 要 使 用 這 個 函 式 來 取 得 Web Module 中 的 PageProducer 元 件 , 進 而 利 用 她 來 輸 出 網 頁 。 IProducerEditorViewSupport 則 是 IDE 所 使 用 的 介 面 , 用 來 判 別 Module 擁 有 那 些 檔 案 , 如 XML,Script 等 ( 簡 單 的 說 就 是 你 能 夠 在 IDE 中 看 到 那 些 檔 案 ) 。 ISetWebContentOptions 介 面 目 前 只 使 用 在 當 Web Module 中 的 HTML Template File( 網 頁 範 本 檔 ) 含 有 IncludePage 命 令 時 暫 時 關 掉 執 行 Script 的 動 作 , 避 免 執 行 到 不 完 整 的 Script 程 式 後 產 生 不 正 確 的 內 容 。 Web Module 中 提 供 了 幾 個 事 件 讓 我 們 處 理 , 這 些 事 件 的 使 用 方 式 都 蠻 直 覺 的 。 Activate 類 事 件 是 在 Module 被 活 化 或 離 開 時 觸 發 , 也 就 是 在 Dispatcher 解 析 Client Request 取 得 需 要 的 Web Module 名 稱 , 接 著 找 到 對 應 的 Web Module 時 觸 發 OnActivate 事 件 , 以 及 離 開 該 Module 時 觸 發 OnDeactivate 事 件 。 這 裡 有 一 點 必 須 注 意 , Activate/Deactivate 事 件 不 等 於 Create/Destroy 事 件 。 當 網 頁 被 設 定 為 OnCached 模 式 時 , Activate/Deactivate 事 件 可 能 會 被 觸 發 許 多 次 , 而 Create/Destroy 事 件 只 會 在 Module 被 建 立 或 消 滅 時 才 會 觸 發 , 接 著 會 再 觸 發 Activate/Deactivate 類 事 件 , DispatchPage 類 事 件 則 會 在 Dispatcher 活 化 Web Module 後 輸 出 網 頁 的 前 後 觸 發 , 實 務 上 來 看 , 你 應 該 將 初 始 化 的 程 式 碼 放 在 Activate Event , 但 是 這 有 個 例 外 , 那 就 是 當 你 在 某 一 個 Web Module 中 提 供 一 個 Action 讓 使 用 者 執 行 , 假 如 執 行 後 所 轉 向 的 Page Module 是 自 己 本 身 時 , 在 執 行 Action 之 後 的 Activate 類 事 件 將 不 會 被 觸 發 , 這 是 因 為 當 執 行 Action 前 Module 就 已 經 被 活 化 了 , 也 就 是 說 Activate 已 被 執 行 過 了 。 這 時 你 必 須 將 初 使 化 的 程 式 碼 移 往 DispatchPage 類 事 件 中 , 這 個 事 件 會 在 每 次 輸 出 網 頁 前 後 被 觸 發 。 我 們 也 可 以 在 DispatchPage 類 事 件 內 將 網 頁 導 向 另 一 個 Web Module , 這 會 用 在 當 我 們 不 希 望 使 用 者 直 接 進 入 該 網 頁 , 而 是 希 望 她 經 由 某 個 Action 轉 向 該 網 頁 時 , 這 時 我 們 就 可 以 應 用 這 個 事 件 來 處 理 , 在 下 面 的 章 節 中 我 們 會 對 Activate 、 DispatchPage 、 DefaultAction 做 更 深 入 的 討 論 以 及 應 用 。

  

1-3 、 PageProducer

[1] [2] [3]  下一页


[聊天工具]Gmail推出新功能:Web Clip__天极Yesky  [聊天工具]Web MSN你玩了吗__天极Yesky
[系统软件]Web Browser Express 概述  [系统软件]对Internet Explorer Web 控件做一点修改
[常用软件]小技巧:三步实现Web迅雷录制PPLive节目  [常用软件]天网防火墙:打开WEB和FTP服务
[VB.NET程序]使用VB.Net做一个配置web.config功能的WinForm(原…  [VB.NET程序]vb.net控件、web service简述
[VB.NET程序]使用vbscript脚本调用web服务  [VB.NET程序]*** Web 存储系统窗体:窗体注册表 (new)***
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台