?? websnap.txt
字號:
今天測試了Delphi 6中Web Snap的功能,想趁記憶猶新時把心得寫下,不然再繼續埋首下去研究連基礎的觀念都會忘了,有時其實最好討論的對象不是經驗豐富的老手,而是尚嫩的新手,從一些討論中可以推敲出許多基本而重要的觀念。
當我在接觸在Web Snap時最先看的便是其Web除錯功能,Delphi 5真是超難用的,除錯非常麻煩;在Delphi 6當中改進了這個缺點,當您在建立一個新的Web Application時會有很多項的選擇,如ISAPI、CGI、Win-CGI之類的,在最下面有一個CoClassName的選項,假如您要有除錯型的Web Application Project,那麼就選這項,到時候再改成DLL型式的;Delphi 6的Web除錯功能寫成一個COM Server,基本上你只要Run一下程式,玩玩很快就會了。
我覺得這個除錯的COM Server還不錯,但是似乎還不是很完整,當我要在瀏覽器上UnRegister一個註冊的程式時,按下Clean後,會出現壞掉的頁面,而且還會不小心就把除錯的COM Server給UnRegister掉,還要重新註冊;不過我也因此學會了Trouble Shoting的技巧。
在Delphi 6中Web Snap下附的範例有一個Toturials的專案,先執行這個專案,裡面有告訴您如何Step By Stpe的建立Web Snap的專案,強烈建議您照著裡面的步驟做一次,這可節省您摸索的時間;我照著其中拖拉點放做完後基本觀念大概就建立起來。
第二個我們需要非常重視Web Snap的是其網站管理功能,記得在Delphi 5當中WebBroker最主要是以WebItem的方式來回應HTTP Request,醜醜的,每一個WebItem用來回應一個HTTP Request;整個Web Application就在這些中,那種感覺很怪啦!Delphi的Developer需要的像是Frontpage或Dreamweaver那樣成熟、完整的網站管理功能,One Click就可以Publish一個網站,而且用樹狀圖來表示網站結構。
在Web Snap當中的專案基本上可以說以每一個Web Data Module或是Web Page Module來回應一個HTTP Request(用Web Snap開發的專案完全Match您心目中的網站開發架構);再白話一點當您產生一個Web Module時會產生三個檔案,分別是…
.pas:用來裝程式碼的。
.frm:用來裝Module的,可在上面放Component。
.html:對於每個Web Modeul都會產生預設的HTML檔案用來回應HTTP Request,所以您可以不用設Page Producer了,當然要改變也是可以的;或許當您熟悉Web Snap的開發方式之後這沒什麼,但在一開始時就會有很大的感受;)
Application Adapter元件會自動幫您管理網頁之間連結的功能,通常我們在設計網站不是有些文字要在每個Page都出現的嗎?Application Adapter可以幫您做到這項要求。
在Web Snap當中一大堆XXXAdapter的元件,這是瞭解Web Snap精神的關鍵,我印象中TDataSetAdapter是用來與資料集元件(Ttable、Tquery…)來做連結的,可以轉成網頁型式的Dataset,在HTML中以嵌入Script的方式來很方便Output這些Dataset;而PageProducerAdapter可以再與TdatasetAdapter連結,讓您很方便的設計HTML Form,根本不用寫程式,在Toturials當中的Country Editor就是沒寫一行程式,而做出了可以新增、刪除、修改的功能。
我接下來就是要對於這些XXXAdapter各個擊破了,以及對於架構上有更深入的瞭解。
Ps.很抱歉,沒有那些Class、Method詳細列出來,因為家中電腦一臺樓上可用Delphi,樓下一臺可上網,不便把資料找來找去。
DELPHI 6 發布也有一段日子,不知大家是否有沒研究過DELPHI 6 中一個比較新的WEBNAP 的技術,我本人也在不段努力中,由于手頭沒有一些中文資料(如果你們有的話,是否可以提供我去下載呢?),就只能看一些英文資料,把我所理解的技術和遇到的問題跟大家一起討論和解決!
我在開發一個MTS 的WEB APPLICATION 的網站,關于MTS 那部份我都完成了,就差最后WEB SNAP 只一部分,因為它的內容很多,我理解不是很全面,什么PageDispatcher,什么JSCRIPT,說真的,我不太了解它是先觸發那些事件的,我講不是很清楚,舉個例子吧!
我建立一個WEB DataModule 觸發一個事件為WebDataModuleActivate 為來初始化數據,就是上面我說到我用的是MTS ,CODE AS LIKE
procedure TCustomerWebDataModule.WebDataModuleActivate(Sender: TObject);
var
FGetCustomer :IHCustomerData;
vData :OleVariant;
begin
FGetCustomer := CoHCustomerData.Create;
FGetCustomer.GetDataOfCustomerID(0, vData);
CustomerWebDataModule.CustomerDataSet.Active := False;
CustomerWebDataModule.CustomerDataSet.Data := vData;
CustomerWebDataModule.CustomerDataSet.Active := True;
end
好了,在這個數據模組中,我也要用到SocketConnection1,ClientDataset,建立成功后!
第二就是我要用到web page 了,設計的界面我就不說了,就是有最后我在加了
些按鈕Apply ,cancel
我要在ApppyAdapterAction 寫事件 code as like
procedure TCustomerWebDataModule.WebDataModuleActivate(Sender: TObject);
var
FGetCustomer :IHCustomerData;
vData :OleVariant;
begin
FGetCustomer := CoHCustomerData.Create;
FGetCustomer.updateCustmer(clientcustomer.data, vData);
end
其實,我說的不是很清楚,就是資料太少了,都是自已理解的,當然,遇到的問題太多了,我都無法形容,我這次想通過這次討論,想從同仁中得到一些關于WebSnap的資料和技術,請大家一起來努力
其實,WEBNAP 比其它好用多了,我認為的,好用在哪里?因為它不是什么ation item,它基本是一個page一個網頁,然后在每個Page中做你想做的事情,簡單點就是一個HTML網頁一樣!,那些PAGEAdapter,Adapter只是工具的東東,我覺得比以前的做法清楚一點,
大家認為呢!本人的WEBNAP 的理解不知是否正確,請指點!
--------------------------------------------------------------------------------
最近正在玩 Delphi web Script (DWS) 這是一個網頁用的 Pascal Script, 類似於 PHP 的用法, 但語法為 Pascal , 原本使用 PHP 已經很好用了, 但先前由 Delphi 開發的許多程式資源確無法使用, 所以試試玩玩 DWS, 它支援了 OOP, 並且 Open Source, 可隨意擴充自行的Class, Record, 函數, 指令, 變數, 果然可以達到我想要的效果. 目前我是將它架設於 Windows NT IIS 下, 運作還算正常, 有興趣可到 http://www.dwscript.com
--------------------------------------------------------------------------------
>請教各位先進
>目前開發程式所遇到的大問題!
>DELPHI有何元件可於網頁上動態畫出k線圖或走勢圖
>或者即時抓取資料庫之資料動態於網頁上畫出統計圖表。
>萬分感激您的回應!!!
通常的作法是,將CHART圖轉成GIF或JPG再網頁上OUTPUT出來!!或者購買TeeChart ActiveXll版本,
祇須將資料LOAD進去便可以在網頁上直接呈現圖型,不過第一次會很久,因為須下載安裝ACTIVEX元件!!
我們的作法是將CHART繪製完成後再存成GIF直接OUTPUT出來..
過幾天可以參考http://www.finairport.com/網站上的線圖和K線圖便是採用此方式繪出的!
--------------------------------------------------------------------------------
>在code兄 電子商務新紀元-WebService With BizSnap的文章中提到
>將Service 分發為ISAPI DLL
>這並不困難! 你只要開一個新專案,選擇ISAPI 的Server Type 後再將你使用到的Unit 加入
>這個Project 中編譯就可以了,有關這一部份你可以在DataSnap 篇找到有關的步驟,
>這裡就讓我偷懶一下了 :)
>將Service 分發為ISAPI DLL
>這並不困難! 你只要開一個新專案,選擇ISAPI 的Server Type 後再將你使用到的Unit 加入
>這個Project 中編譯就可以了,有關這一部份你可以在DataSnap 篇找到有關的步驟,
>這裡就讓我偷懶一下了 :)
>
>請問其中的在DataSnap 篇在哪裡可以找到
1.開啟一個新的Web Service Application 專案.
2.選擇ISAPI(DLL) 為 Server-Type.
3.將你的xxxIntf,xxxImpl 加入.
4.Compiler.
5.使用DLL 有些地方要注意,參考我與 Amber 的討論.
(持續偷懶中....)
其步驟大致如下:
Step 1. Start the WebSnap application wizard
01.File / New / Other..
02.WebSnap頁,選WebSnap Application, OK
03.Server Type點選Web App Debugger executable(測試用)
04.CoClass Name輸入"CountryTutorial"
05.Application Module Components點選"Page Module"
06.Page Name輸入"Home",按"OK"按鈕
=>產生包含五個元件的Data Module
Step 2. Save the generated files and project
01.Save All,名稱各別改為"HomeU.pas","CountryU.pas"和"CountryTutorial.dpr"
(將Unit和Project存同一路徑)
Step 3. Specify the application title
01.View / Project Manager,展開CountryTutorial.exe
02.Double Click HomeU,點選"ApplicationAdapter"
03.在屬性ApplicationAdapter.Application Title輸入"Country Tutorial "
04.預覽
請問諸位,我在點選"Preview"的Tab時,出現
"Cannot create script engine "SignedJavaScript".Error: 80040154"的錯誤訊息,
能否告訴我那錯了,先謝了
※ 引述《fands》於 11/01/2001 13:11:23 發表之銘言:
>※ 引述《code6421》於 10/31/2001 17:24:27 發表之銘言:
>>
>>XP 下請使用JScript 來取代"SignedJavaScript"
>
>我有試過用JScript,但在最後兩個步驟
>03.在屬性ApplicationAdapter.Application Title輸入"Country Tutorial "
>04.預覽
>
>=>看不到預覽的畫面(空白網頁),
>但在Windows2000下可見網頁
嗯..我之前有試過,可以執行,也可分發至IIS 5.1,
晚上我再查查!
PS:我的系統是Windows XP(Pro).
※ 引述《fands》於 11/01/2001 13:11:23 發表之銘言:
>※ 引述《code6421》於 10/31/2001 17:24:27 發表之銘言:
>>
>>XP 下請使用JScript 來取代"SignedJavaScript"
>
>我有試過用JScript,但在最後兩個步驟
>03.在屬性ApplicationAdapter.Application Title輸入"Country Tutorial "
>04.預覽
>
>=>看不到預覽的畫面(空白網頁),
>但在Windows2000下可見網頁
XP 下可正常運作,你的問題應該是你選了blank 的網頁產生選項,
XP 下的預設Script Engine 是"SignedJavaScript",Template
會被切換至Blank.
請在輸入CoClass Name 頁次時,選取Page Options 按鈕,
將Script Engine 改為JScript,Template 改為Standard,
這樣就可以完成那個範例.
--------------------------------------------------------------------------------
>請問WebAppDebuger如何使用 ?
>謝謝
選單:Tools|Web App Debuger
開啟後按下Start 按紐(如果Caption 是Stop,代表已經啟動)
開啟IE,鍵入 http://localhost:1024.
如果沒有正常的啟動ServerInfo.ServerInfo 程式,
代表你的ServerInfo 已經被移除掉,
到DELPHI6/Source/Internet 中開啟ServerInfo 專案,
並重新編譯後放至DELPHI6/Bin 目錄下,執行一次註冊後
再開啟IE 試試.
--------------------------------------------------------------------------------
※ 引述《tom2071hk》於 11/28/2001 13:05:46 發表之銘言:
>剛讀完code6421君的大作,在第十一章中使用了TimageButtonProducer,的確美化了Button,但相對時下的Button設計,變化的多樣化,還有一段距離。我以前曾用Dreamweaver寫了類似Mouse Over Button的動作;可以用不同Image button顯示用戶曾選擇、未選擇或Mouse放在Button上時 (Mouse over) 狀態,,請問各位可否用Websnap做出同樣的效果?同時,由於程序設計與網頁設計是由不同的人員負責,請問在編寫Websnap程序時,用OnHTMLTag事件會較為方便呢?
>再一次多謝code6421君的Websnap文章,希望日後閣下及各位先進能在這裡多發表文章,那便是我和初學者之福了:)
>先多謝各位幫忙!
目前WebSnap 所附的元件都還在初級階段,所能達到的功能有限,
利用撰寫元件的方式,我們可在AdapterPageProducer 中加入
Client-Side JavaScript,做出較佳的視覺效果,也可以利用
Client-Side JavaScript 來處理Post 之前的驗證動作,
這些都是我計劃要寫在Inside WebSnap 一文中的東西.
當網頁設計者與程式撰寫者不同時,使用TAdapterPageProducer
來設計資料輸入的畫面,再將她轉為TPageProducer 交由網頁設
計者是目前建議的方法.
使用OnHTMLTag 也是個方法,但這樣就脫出了WebSnap 元件設計
的觀念,你必須自己定義出一套規則,辨別那些Tag 該做什麼,
是否會較方便,這得多想想 ;)
--------------------------------------------------------------------------------
※ 引述《unite》於 11/28/2001 10:21:28 發表之銘言:
>使用什么替代ASP中的QueryString?
Request.QueryFields.Values['yourParamName'];
多謝code6421,拜讀過關于WEBSNAP的大作真是受益非淺!
還有個問題,請多指教。
Application Modules中捕獲的Request是如何傳遞給各個Generic Module的?
是經由Dispatch嗎?
使用變數存貯Request,然后需要時再調用此變數。這種方法可以嗎?
※ 引述《code6421》於 11/28/2001 15:03:59 發表之銘言:
>※ 引述《unite》於 11/28/2001 10:21:28 發表之銘言:
>>使用什么替代ASP中的QueryString?
>
>Request.QueryFields.Values['yourParamName'];
能不能在Web Application Module中的ApplicationAdapter中的建立Field存放Request的QueryField,然后在其它Page Module中使用?怎么實現呢?
※ 引述《unite》於 11/30/2001 11:08:17 發表之銘言:
>終于從code6421的大作中找到答案:
>
>在 這 裡 我 們 必 需 要 釐 清 一 個 觀 念 , 表 面 上 來 看 , AdapterField 是 用 來 儲 存 資 料 的 , 但 儲 存 資 料 用 的 容 器 ( 也 就 是 變 數 ) 則 是 要 我 們 來 提 供 。
呵..你好認真哦 :)
希望有心得時也能與我們分享.
多謝code6421夸獎
為了在其它的Gernic Module中使用URL傳來的QueryString中的值,我在Application Moudle中的WebAppComponent的BeforeDispatch中加入代碼,將Request中的QueryField保存到Private段中聲明的變量中,然后在ApplicationAdapter中加入Field,在Field的OnGetValue事件中將變量值傳回。
這樣我就可以在其它Module中調用這幾個Field,不管理是使用Delphi code或者是Server-Side Script都可以使用它。
可能這個問題很簡單,讓大家見笑了。
--------------------------------------------------------------------------------
※ 引述《bryan》於 12/05/2001 12:14:50 發表之銘言:
>請問各問大德
>我在D5使用WebBroker增加Action然後指到PageProducer,
>再利用HMLTFile只指我的*.html,並在OnHtmlTag中置換
>我要的資料這一切都沒問題!
>但最近使用D6的WebSnap卻好像不能這樣用,
>我在一個Page Module中放入一個TAdapterPageProducer 或 TPageProducer
>然後在其HTMLFILE指到我的*.html,並無法顯示出我的*.html
>這樣我就沒有辦法去動態至換我要的資料了,
>他好像只有顯示那個Page Module的*.html,對於我利用
>page producer所指定的*.html完全不理會,
>不是這個Page Module中的page producer是輸出網頁的元件,
>那為什麼他完全不理會輸出我所利用page producer所指定的*.html檔案ㄋ?
>請問我哪裡弄錯了,天ㄚ~~~~~救救我吧!
你可以使用 LocateFileService 來達到此功能.
--------------------------------------------------------------------------------
※ 引述《unite》於 12/12/2001 17:48:17 發表之銘言:
>爲什麼在WebSnap中,DataModule的Table或Query不用Active也能正常使用?
應該說是有涉及到Borland MIDAS 的一些 component 都有此一狀況
因為vcl 的 component 會在適當時後把 Dataset Open 起來
假如看 source code 就會有很多類似
if not ADataSet.Active then
begin
ADataSet.Open;
end;
※ 引述《unite》於 01/08/2002 16:48:17 發表之銘言:
>WebSnap程式中,Server-Side Script如何調用Session的值?
>
>在介紹中提到有兩種方法:
>1、Session.SessionID.Value Session.AAA.Value
>2、Session.Values(Name) Session.Values(“AAA”)
>但是使用中,第一種老是提示錯誤,而第二種則沒有輸出結果。
>請多指點!
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -