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

Web Application 開 發 利 器 - WebSnap(一)

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

  除 了 原 先 InternetExpress 架 構 中 的 TPageProducer 與 TxxPageProducer 元 件 之 外 , WebSnap 還 提 供 了 TXSLPageProdcuer 、 TAdapterPageProducer 這 兩 個 新 的 PageProducer 。 TAdapterPageProducer 是 目 前 我 們 在 WebSnap 中 較 常 用 的 PageProducer 元 件 。 她 可 以 讓 我 們 以 視 覺 化 設 計 網 頁 , 同 時 延 用 元 件 觀 念 來 設 計 網 頁 應 用 程 式 。 這 些 能 力 來 自 於 IWebComponentEditor 及 IProducerEditorViewSupport 這 兩 個 介 面 。 IWebComponentEditor 可 以 讓 TAdapterPageProducer 過 濾 加 入 的 子 元 件 型 別 , 這 很 重 要 , 因 為 在 WebSnap 中 是 以 實 作 的 介 面 來 區 分 元 件 類 型 , 因 此 大 部 份 的 WebSnap 元 件 都 是 繼 承 至 TComponent 而 來 , 這 時 必 須 視 她 們 實 作 的 介 面 來 決 定 是 否 可 以 成 為 TAdapterPageProducer 的 子 元 件 。 IProducerEditorViewSupport 的 功 能 與 Module 內 的 xxEditorViewSupport 介 面 相 同 , 差 別 是 Module 將 她 用 在 Code Editor 上 , 而 TAdapterPageProducer 則 是 將 她 用 在 Visual Page Designer 上 。 在 TAdapterPageProducer 元 件 中 有 一 個 WebPageItems 屬 性 , 這 個 屬 性 來 自 於 TAdapterPageProducer 的 父 類 別 TBasePageItemsProducer 。 這 就 是 TAdapterPageProducer 儲 存 子 元 件 的 地 方 , WebSnap 識 別 此 類 元 件 的 方 法 就 是 判 別 該 元 件 是 否 實 作 了 IGetWebComponentList 這 個 介 面 , 接 著 再 經 由 此 介 面 取 得 IWebComponentList 介 面 後 處 理 這 些 子 元 件 。 在 TAdapterPageProducer 中 提 供 了 三 個 事 件 , OnHTMLTag 事 件 是 用 來 識 別 某 個 Tag 時 觸 發 , 再 由 設 計 師 置 換 成 其 它 內 容 , 我 們 通 常 利 用 她 來 動 態 改 變 某 區 段 的 網 頁 內 容 。 GetContent 事 件 則 是 在 TAdapterPageProducer 輸 出 網 頁 的 前 後 觸 發 。 OnHTMLTag 只 在 HTML Template File 中 含 有 Tag( 如 <#TEST>) 時 才 會 觸 發 , GetContent 事 件 則 會 在 每 次 輸 出 網 頁 前 後 觸 發 。 值 得 注 意 的 是 GetContent 事 件 觸 發 的 時 間 比 OnHTMLTag 早 , 這 也 代 表 這 你 在 OnHTMLTag 中 不 能 夠 處 理 Server-Side Script , 因 為 此 時 的 Server-Side Script 已 被 執 行 完 畢 並 轉 為 HTML 文 件 了 。 GetContent 中 則 允 許 你 處 理 Server-Side Script , 但 這 需 要 使 用 一 些 技 巧 , 我 在 Inside WebSnap 一 文 中 會 提 到 這 類 的 技 術 。 TXSLPageProducer 則 是 允 許 你 使 用 XSL 來 處 理 網 頁 , 由 於 XSL 部 份 的 知 識 範 圍 較 廣 , 因 此 我 留 待 Inside WebSnap 時 再 討 論 相 關 的 運 用 。 目 前 TAdapterPageProducer 元 件 所 產 生 出 來 的 Server-Side Script 並 不 能 被 更 動 , 如 果 你 希 望 對 ServerSide-Script 有 更 多 的 控 制 , 你 可 以 選 擇 使 用 TAdapterPageProducer 來 設 計 你 的 網 頁 , 完 成 後 再 將 HTML 內 容 複 製 到 TPageProducer 中 , 用 TPageProducer 代 替 原 來 的 TAdapterPageProducder 來 輸 出 網 頁 , 本 文 的 附 錄 中 有 詳 細 的 使 用 方 式 。 

1-4 、 Dispatcher

 

  由 圖 一 中 你 應 該 已 經 了 解 Dispatcher 在 WebSnap 架 構 中 所 扮 演 的 角 色 。 WebSnap 中 提 供 了 兩 個 Dispatcher 元 件 , TPageDispatcher 及 TAdapterDispatcher , 加 上 以 往 的 TWebDispatcher 後 , 在 DELPHI 6 中 你 就 有 三 個 Dispatcher 元 件 可 以 使 用 。 TPageDispatcher 是 用 來 分 發 網 頁 要 求 的 元 件 , 當 Client Request 一 個 網 頁 時 , TPageDispatcher 負 責 找 到 該 頁 面 並 將 控 制 權 轉 交 給 該 網 頁 的 Page Module 。 TAdapterDispatcher 則 是 用 來 分 發 Action 要 求 , 例 如 當 你 的 網 頁 中 有 一 個 按 紐 , 這 個 按 紐 連 結 了 一 個 Action , 因 此 當 使 用 者 按 下 這 個 按 紐 時 , TAdapterDispatcher 會 負 責 找 到 這 個 Action 元 件 所 在 的 Web Module 後 , 取 得 該 Action 元 件 來 執 行 該 Action 。 Dispatcher 同 時 也 提 供 了 使 用 者 權 限 的 控 制 , 在 TPageDispatcher 找 到 Client 端 所 要 求 的 頁 面 時 , 她 會 先 查 看 該 頁 面 的 權 限 資 料 來 決 定 使 用 者 是 否 有 權 限 可 以 取 得 該 頁 面 。 同 樣 的 , 在 TAdapterDispatcher 分 發 Action 時 也 會 先 查 看 Action 元 件 的 執 行 權 限 設 定 做 同 樣 的 工 作 , 後 面 的 章 節 會 介 紹 這 部 份 的 應 用 。 Dispatcher 類 元 件 雖 然 看 起 來 做 的 事 不 多 , 事 實 上 她 卻 是 WebSnap 中 Pages Manager 的 主 角 , 因 為 她 的 存 在 , 你 才 能 一 行 程 式 碼 都 不 用 寫 , 就 擁 有 了 Page Manager 的 功 能 。

 

( 圖 :2)

 

上 圖 中 我 們 可 以 清 楚 的 看 到 Dispatcher 元 件 的 運 作 模 式 , 這 裡 有 件 事 要 稍 微 注 意 一 下 , 當 Action 執 行 之 後 會 呼 叫 TPageDispatcher 元 件 來 轉 向 目 的 網 頁 , 這 時 Action 元 件 中 的 RedirectOptions 特 性 值 是 決 定 是 否 執 行 目 的 網 頁 中 DefaultAction 事 件 的 關 鍵 。

  

1-5 、 Adapters

 

Adapter 是 WebSnap 中 相 當 重 要 的 軸 心 元 件 , 同 時 也 是 最 複 雜 且 難 懂 的 部 份 。 物 件 導 向 設 計 模 式 中 , Adapter 被 定 義 成 將 舊 有 物 件 包 裝 成 為 一 個 新 的 物 件 , 並 在 另 一 種 系 統 架 構 中 運 用 她 , 以 達 到 重 用 (Reuse) 的 目 的 。 WebSnap 中 Adapter 分 為 四 類 :

 

Adapter Container

Adapter Items

Adapter Control Container

Adapter Control Items

 

Adapter Container 是 一 種 Adapter 容 器 元 件 , 她 可 以 包 含 其 它 的 Adapter Items , 例 如 TApplicationAdapter 、 TEndUserAdapter 、 TEndUserSessionAdapter 、 TDataSetAdapter 等 都 是 Adapter Container 類 元 件 。 Adapter Items 類 元 件 則 有 TAdapterField 、 TAdapterAction 、 TAdapterDataSetField 等 。 這 兩 類 Adapter 都 屬 於 Scriptable-Object , 這 也 就 是 說 你 能 夠 在 Active Script 中 使 用 她 們 來 取 得 Adapter 中 的 資 料 , 就 像 是 在 ASP 中 使 用 ASP Object 的 方 式 使 用 她 們 。 除 了 這 兩 類 Adapter 之 外 , Adapter Control Container 與 Adapter Control Items 則 是 屬 於 輔 助 型 的 Adapter 元 件 。 你 在 TAdapterPageProducer 所 看 到 的 TAdapterForm 、 TAdapterFieldGroup,TAdapterEditColumn 等 元 件 就 是 這 類 型 , 這 些 Adapter 的 主 要 目 的 是 支 援 視 覺 化 設 計 功 能 。 技 術 上 來 說 , 你 可 以 運 用 這 些 Adapter 來 連 結 Adapter Container 及 Adapter Items 並 產 生 出 HTML FORM or Script 。 這 類 Adapter 可 以 稱 之 為 Adapter 的 Adapter , 值 得 注 意 的 是 , Adapter Control Container 及 Adapter Control Items 並 不 是 Scriptable-Object , 她 們 存 在 的 意 義 是 為 了 讓 你 可 以 使 用 Visual Page Designer 來 設 計 網 頁 , 並 動 態 產 生 Script 與 HTML 碼 :

 

( 圖 :3)

 

上 圖 中 我 們 大 略 可 以 看 出 來 , Adapter Control 類 元 件 是 用 來 將 Adapter 類 元 件 的 內 容 輸 出 至 HTML 中 的 元 件 。 例 如 TAdatperForm 會 使 用 Adapter Container 來 產 生 出 HTML FORM , TAdapterEditColumn 則 會 使 用 Adapter Items 來 產 生 出 TextBox 或 是 CheckBox 這 些 樣 式 的 HTML Edit Control 。 事 實 上 她 們 所 做 的 工 作 很 多 , 例 如 產 生 Script 連 結 至 Adapter , 亦 或 是 產 生 一 些 HTML Table , 某 些 應 用 上 她 們 還 會 產 生 出 對 應 的 Client Side Script 程 式 碼 。 在 Adapter Items 中 也 分 為 兩 類 , TAdapterField 及 TAdapterAction 。 TAdapterField 是 用 來 處 理 資 料 用 的 , 你 可 以 視 她 為 可 以 在 Script 中 使 用 的 變 數 。 TAdapterAction 則 是 用 來 處 理 Action , 如 Hyperlink 、 Button 等 。 這 同 時 也 代 表 了 Adapter Control Items 中 也 會 分 為 兩 類 , 一 是 用 來 處 理 TAdapterField 的 TAdapterEditColumn 、 TAdapterDisplayField 等 元 件 , 另 一 類 則 是 用 來 處 理 TAdapterAction 的 TAdapterActionButton 元 件 。 Adapter 在 WebSnap 中 扮 演 著 相 當 重 要 的 角 色 , 因 此 了 解 她 是 你 開 發 WebSnap 程 式 的 必 要 條 件 。 後 面 的 章 節 中 , 我 會 針 對 各 種 Adapter 元 件 做 更 完 整 的 介 紹 。

  

1-6 、 Sessions

  

  Session 功 能 是 一 個 網 頁 程 式 常 會 使 用 到 的 功 能 , 例 如 在 一 個 購 物 網 站 中 的 購 物 車 功 能 , 或 是 保 留 使 用 者 登 入 資 訊 等 功 能 都 需 要 她 的 幫 忙 。 在 以 往 的 WebBroker+InternetExpress 架 構 中 並 不 支 援 Session 的 運 用 , 所 以 我 們 常 常 得 藉 助 於 3rd-Party 元 件 或 自 行 撰 寫 處 理 Session 的 程 式 碼 。 在 WebSnap 中 Borland 補 上 了 這 個 缺 口 , 她 提 供 了 TSessionServices 這 個 元 件 來 控 管 Session 的 狀 態 。 當 你 的 Application Module 中 包 含 一 個 TSessionServices 元 件 時 , 當 Client Request 到 達 後 WebSnap 就 會 在 WebContext 中 建 立 一 個 Session 物 件 , 接 著 你 就 可 以 在 任 何 一 個 Web Module 中 使 用 這 個 物 件 來 處 理 Session 資 料 。 在 處 理 完 網 頁 要 求 後 , WebSnap 會 將 這 個 Session 轉 換 成 Cookie 並 傳 回 Client 端 , 這 樣 Client 在 下 次 瀏 覽 此 網 站 時 就 會 將 這 個 Cookie 送 給 Web Server , 這 時 WebSnap 程 式 再 經 由 Cookie 取 出 對 應 的 Session 。 由 這 個 討 論 中 你 可 以 發 現 到 , Session 功 能 是 建 立 在 Cookie 上 面 , 所 以 當 Client 端 的 瀏 覽 器 設 定 中 將 Cookie 關 閉 時 , Session 也 就 會 跟 著 失 效 , 這 與 一 般 的 網 頁 程 式 相 同 。目 前 的 WebSnap 並 未 將 Session 儲 存 於 檔 案 中 , 因 此 你 不 能 在 非 DLL 型 態 的 WebSnap 程 式 中 使 用 Session ,因 為 當 程 式 關 閉 後 , 存 放 於 記 憶 體 中 的 Session 也 就 跟 著 消 失 了 , 我 們 可 以 利 用 WebSnap 所 提 供 的 儲 存函 式 來 保 留 Session , 在 Session 一 章 我 們 會 討 論 這 個 技 術 。 在 WebSnap 中 使 用 Session 物 件 是 件很 輕 鬆 的 事 , 但 有 一 些 特 殊 情 況 需 要 你 多 加 注 意 , 那 就 是 當 使 用 者 開 啟 了 兩 個 瀏 覽 器 時 , 我 們 是 該 使 用兩 個 不 同 的 Session 還 是 共 用 一 個 呢 ? 這 在 一 些 網 頁 程 式 中 是 相 當 重 要 的 課 題 , 在 Session 一 章 中 ,我 們 會 深 入 的 討 論 這 些 問 題 。

 

1-7 、 ValueList

 

   ValueList 類 元 件 在 WebSnap 中 是 扮 演 著 輔 助 者 的 角 色 , 例 如 TWebUserList 提 供 使 用 者 資 料 給  TEndUserAdpater 元 件 使 用 , 或 是 TDataSetValueList 提 供 Records 給 TAdapterDataSetField 元 件 使 用 。 事 實 上 ValueList 也 是 一 個 Adapter , 這 也 代 表 著 我 們 在 某 些 情 況 下 可 以 用 她 來 取 代 原 有 的 Adatper 元 件 。 ValueList 元 件 相 當 的 簡 單 並 容 易 使 用 , 你 只 要 抓 住 一 個 慨 念 即 可 輕 易 的 使 用 她 , 這 個 概 念 就 是 DELPHI 6 對 TStrings 所 增 加 的 新 功 能 Pair Value , 簡 單 的 說 就 是 一 個 名 稱 跟 著 一個 值 , 如 :Site=www.borland.com.tw , Site 就 是 名 稱 , 所 對 應 的 值 就 是 www.borland.com.tw 。 後 面 的 章 節 我 們 會 利 用 她 來 達 成 許 多 網 站 程 式 中 常 用 的 功 能 。

  

1-8 、 Wrapper

 

   相 信 有 許 多 人 壓 根 兒 就 沒 有 看 過 這 個 東 西 , 在 WebSnap 中 Wrapper 扮 演 極 核 心 的 角 色 , 她 讓 你 可 以 在 Active Script 使 用 Scriptable-Object , 例 如 下 面 這 段 Script 程 式 碼 :

 

<%= vAdapter1_Borland.DisplayText %>

 

   vAdapter1_Borland 是 一 個 TAdapterField 元 件 , 可 是 TAdapterField 只 能 夠 在 DELPHI 中 使 用 不 是 嗎 ? 沒 錯 ! 但 這 不 是 單 純 的 TAdapterField 元 件 , 她 是 一 個 TAdapterFieldWrapper 元 件 。 這 個 Wrapper 元 件 中 包 含 著 一 個 TAdapterField 元 件 的 參 考 (Reference) , 當 你 使 用 這 個 Wrapper 元 件 時 , 她 會 將 你 對 她 的 操 作 轉 交 給 真 正 的 TAdapterField 元 件 。 這 也 是 WebSnap 中 Scriptable-Object 的 秘 密 , 在 Windows 平 台 上 的 Wrapper 元 件 實 際 上 是 一 個 COM 物 件 , 當 PageProducer 處 理 Active Script 之 前 , 她 會 為 所 有 Scriptable-Object 建 立 Wrapper 元 件 , 完 成 之 後 再 將 Script Document 交 由 Active Script Engine 處 理 ,而 Active Script Engine 允 許 我 們 在 Script 中 使 用 COM 物 件 , 因 此 我 們 就 可 以 使 用 這 些 Wrapper 元 件 了 。當 Active Script Engine 解 譯 完 畢 後 就 會 產 生 出 最 後 的 HTML Document , 最 後 再 由 WebSnap 程 式 將 HTML傳 回 Client 端 。

 

1-9 、 Services

 

   這 一 類 型 的 元 件 通 常 是 屬 於 全 域 型 的 , 主 要 是 輔 助 WebSnap 程 式 中 的 系 統 功 能 , 例 如 SessionService 元 件 負 責 提 供 WebSnap 程 式 中 的 Session 的 支 援 , 當 你 將 這 個 元 件 放 置 到 Application Module 之

上一页  [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……
    咸宁网络警察报警平台