Intraweb+使用手册中文版.doc_第1页
Intraweb+使用手册中文版.doc_第2页
Intraweb+使用手册中文版.doc_第3页
Intraweb+使用手册中文版.doc_第4页
Intraweb+使用手册中文版.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

什麼是IntraWebIntraWeb是一個創建基於Web應用程式的具有革命性意義的新方法,在早期版本的IntraWeb的用最簡單的方法創建Web解決方案的基礎上,IntraWeb擴展了它的技術,提供了一個傑出的工具,用來高速、簡易地創建Internet,Intranet 以及Extranet應用程式。許多基於Web的開發工具都要求開發者有CGI腳本的知識,同時也要求開發者要有狀態跟蹤以及複雜的用戶端配置。IntraWeb避免了這些。通過使用Delphi中的元件,簡單的創建一個應用程式專案,之後,註冊到伺服器上,客戶就可以利用相容HTML 4的任何一種流覽器來訪問這個應用程式。這些流覽器包括最新版的Netscape 以及Internet Exploer等等。利用IntraWeb開發的Web應用程式在這些流覽器上都通過了測試。利用IntraWeb開發,不需要寫任何的HTML、CGI或是JavaScript代碼,所有的代碼都在Delphi中完成了。為了讓應用程式有更好的靈活性,利用IntraWeb開發的應用程式也可以以獨立的可執行程式的方式像其它的桌面應用程式一樣來運行,也提供了相應的調試能力。IntraWeb是怎樣工作的?IntraWeb很像是普通的應用程式,唯一不同的是它的使用者介面是用流覽器代替了通常的Windows介面,當把應用程式安裝到Web伺服器上之後,用戶馬上就可以通過它的網路位址來開啟它,應用程式會馬上建立使用者的使用者資訊,這樣就可以避免丟失使用者資訊或者與其它的使用者發生使用混亂。每一個使用者的使用資訊都會由程式自動創建和跟蹤,並且對於開發者來說,是透明的。其它的開發語言,像ISAPI,CGI,ASP處理這些問題的能力都不是很好。IntraWeb設計成一套能創建基於Web的各種類型應用程式的開發工具,不論是一個簡單的資料登錄介面,投票或是一個更複雜的讓已訪問過的客戶能順利登錄的應用程式,IntraWeb都能勝任。IntraWeb用戶手冊系統要求客戶要運行用IntraWeb開發的應用程式,唯一的要求就是要有一個能相容HTML4.0流覽器,用IntraWeb及HTML4和JavaScript開發的程式都通過了廣泛的測試,它支持Mozilla,Netscape 6 或更高版本,Internet Exploer 4.0 或更高版本。備註:如果你想你的應用程式支援Netscape 4,你就要使用我們繼續給予支援的IntraWeb4的版本來開發。HTML4IntraWeb使用HTML 4和樣式單來完成頁面元素及其它元素的佈置,要使用範本或Page Mode都需要使用到樣式單。JavaScriptJavaScript的使用可以提供更多的用戶端特性,JavaScript 也允許IntraWeb來控制流覽過程以及一個已經生成的頁面,只有在Application mode,JavaScript才是必需的。Browser Specific Feathers盡宇航局HTML 和JavaScript的標準已經制定了,但是在許多地方,不同的流覽器之間仍然存在許多差異,IntraWeb能自動調整這些差異,IntraWeb充當了一個HTML和JavaScript代碼的生成器。IntraWeb甚至動態地知道每一個流覽器在運行時所存在的每一個Bug.另一方面,IntraWeb輸出給每一個流覽器的代碼都是經過優化的,請查閱Browser Implementations這一章節,獲取更多的資訊。安裝IntraWeb安裝在Delphi的安裝過程中,IntraWeb將會自動整合到Delphi中,三個新的包含IntraWeb元件Tab會在Delphi視覺化元件工具中自動創建,其中一個包含了非資料庫類型的元件,另外的兩個包含一個資料庫訪問類型的元件和控制元件。一個新的名為IntraWeb的Tab也會在Delphi的儲存器中創建,所有的IntraWeb應用程式都將通過包含在這些Tab中的元件和模組來完成。IntraWeb的安裝會把一些檔拷貝到WindowsSystem目錄以及所有Delphi環境變數中所需要的子目錄下,同時,也創建了一個在程式組中通過開始功能表來訪問的快捷方式,文檔也會被放在這個程式組中。卸載要卸載IntraWeb,和其它的Windows應用程式一樣,選擇控制台裡的“添加/刪除應用程式”來卸載IntraWeb。安裝License Keys對於註冊用戶,能過與試用版用戶一樣的方法來下載License Keys,如果你安裝的是試用版本,那麼License Keys的安裝完全是為了能使用註冊程式,這個程式可以通過IntraWeb程式組中的圖示來運行。重新考慮使用者介面許多我都嘗試把他們的用戶程式設計成像普通的Windows應用程式一樣,如果你也是這樣的話,你會發現你所設計的介面工作得並不是很好,想像一下,創建一個就像是一個DOS應用程式一樣的使用者介面,那將會是多麻煩的一件事,不要僅僅考慮在Web上的使用者介面是怎麼樣的,你還要再想想在設計Web介面時所發現的局限性。DBGrids就是一個例子,在一個普通的Delphi應用程式中,它被用於在一個Grid中顯示成千上萬的資料記錄,在Web中,那將會是一個非常大的HTML文檔,而且在用戶載入的時候,是非常慢的。當一個開發者意識到這個事實情況的時候,他們經常會使用 “Next”和 “Previous”按鈕以便於讓DBGrid能局部地顯示,但是,這樣做會讓佔用更多的伺服器記憶體,消耗更多的伺服器資源,同時,作為提供資料來源的資料庫也會回為記憶體大量的佔用而變得越來越慢,試著想想一些普通的Delphi應用程式的作法,重新考慮一下在Web上的使用者介面。當然,利用創建一個空的Grid同時用一個搜索功能來解決也是通常用來緩解上述問題的辦法之一,通過讓用戶提供他所要篩選的資料參數,就能從成千上萬的資料中篩選出十幾個,或僅僅是幾百個記錄,這不但是降低網路頻寬佔用的好辦法,同時,它也可以說是提供了一個很好的使用者介面,並且,同時也最小化地讀取資料庫。允許用戶輸入搜索條件仍然有可能產生就像上面提到的得到成千上萬記錄的可能性,為了避免這種情況的產生,TIWDGBrid有一個RowLimit屬性,它預設值是0,也就是說它默認是被禁止的。你可以給它設置一個最大值,這樣,不管查詢出多少記錄,返回給使用者的記錄數也不會超過你在RowLimit中所設置的最大值,你可以查閱其它的技術參考來證實這一點。許多的搜尋引擎也都限制了最大返回結果數,這不僅僅是為了節省網路頻寬,在大多數情況下,資料的精確程度是伴隨著資料量的減少而增加的,如果不是這樣的話,那麼返回給使用者大量的記錄,他們還是會想方設法地去篩選的。如果你還是決定用Next/previous選項來使用 “paged grid”技術以減少傳遞的資料數,你也可以通過設置TIWDBGrid的 “StartFirst”屬性成“false” ,把RowLimit屬性設置一個最大值來決定一次傳給使用者的資料記錄數,這樣,在資料顯示之前,你也可以通過Next/Previous來移動資料記錄。創建一個新的應用程式寫你的第一個應用程式所有的IntraWeb應用程式都應該通過新建專案中的IntraWeb Tab來創建,點擊 File - New,選擇IntraWeb Tab,選擇 Stand Alone Application,一個對話方塊會提示你輸入你要把由Delphi自動創建的檔應該被放在電腦的什麼地方。這將為一個新的IntraWeb Stand Alone Application創建一個框架,它把一些開發所需的檔複製到專案所在的資料夾,並且創建了一個範本檔以及一個空白的Form,儘管現在的項目已經可以編譯和運行了,但是它實際上還不能做任何事情。一個標準的調試FORM將顯示一些關於IW和相關功能表項目的資訊,選擇“運行功能表,運行這個程式,將自動打開一個流覽器顯示一個空白的頁面,這是因為主FORM中沒有包括任何組件或功能項。program IWProject;usesIWInitStandAlone,ServerController in ServerController.pasIWServerController: TDataModule,IWUnit1 in IWUnit1.pas formMain:TIWFormMain;$R *.resbeginIWRun(TFormMain, TIWServerController);end.上面的代碼顯示了這個專案檔案中的內容,它包含一個用來運行程式的叫做IWRun的過程。procedure IWRun(AMainFormClass: TIWFormModuleClass;AServerControllerClass: TIWServerControllerBaseClass);IWRun接受兩個必須的參數(指定Main Form Class和Server Controller Class)和一個可選的參數(Server Type)。IntraWeb 用戶手冊正如我們以前提到過的,一個新的項目是創建任何一個IntraWeb應用程式的開始,就像其它的Delphi項目一樣,一個Main IntraWeb From會被自動創建,並做為一個新程式的主介面,為了證明IW開發的強大能力及簡易性,下面我們舉一個小例子。1 打開剛才創建的那個默認的IWForm(IWUnit1.Pas)。2 分別在這個Form中放入 IWButton, IWEdit, IWLabel。3 把下面的代碼放入IWButton 的 OnClick事件中:procedure TIWFormModule.IWButton1Click(Sender: TObject);beginIWLabel1.Caption := IWEdit1.Text;end;完成後,編繹運行程式,為了測試它,按F9鍵。預設的流覽器將自動打開並顯示主介面。輸入一些文字到文字方塊中,然後點擊按鈕,輸出結果將顯示到Label上。雖然,我們這個例子不像發明火箭那樣激動人心,但是,它確實表明我們全部使用標準的Delphi語句,並沒有寫一句HTML代碼,我們之所以要選擇這個例子,是因為它很簡單,它證明我們用IntraWeb來開發Web應用程式確實就像我們用Delphi開發普通的應用程式一樣,一樣的方法,一樣的屬性,一樣的事件,等等都可以用同樣的方法。然而在開發完善的資料庫應用程式時,IntraWeb卻更強大。要獲取更多的關於開發IntraWeb應用程式的例子,請訪問 / Working With Forms在程式中,我們要介紹的是都要包含的單元IntraWeb Form,所有的IntraWeb From都可以通過“File-New-IntraWeb Form”來創建,所有在IntraWeb中使用的Form 必須是一個專門的 IntraWeb Form,標準的Delphi Form是不能在IntraWeb應用程式中使用的,一個新的Unit創建時,可用的Form會顯示在螢幕上,使用IntraWeb Form和與使用普通的Delphi Form有一點不同,簡單的說就是IntraWeb 的 Form要使用 Show方法來顯示,換句話說,也就是在IntraWeb開發中,ShowModal方法是不被支援的。更多的資訊你可以參考Demos.Images and GraphicsIntraWeb通過Templates來支援圖像,包括 TIWimage, TIWDBImage and TIWImageFile。在IntraWeb中,你可以使用許多種方法來支援圖像,同時,它們也有一些基本的方法。Templates在templates中使用圖像也就是將圖像插入到HTML中去,但是任何影像檔都必須在Files資料夾中,或者是一個標準的WEB伺服器中。TIWImageTIWImage被使用在創建動態的圖像上,每當要顯示一個圖片時,圖片都會被轉換成JPG格式,這樣,圖片是做為應用程式中功能的一部分來使用的。你可以參考關於動態互動式圖片的演示程式來獲得更多的資訊。如果你使用的是靜態的圖片,你可以使用TIWImageFile.TIWDBImageTIWDBImage 從資料庫欄位中自動把圖片轉換為JPG格式,它的使用就像普通的TDBImage一樣,它提高了從資料庫中把圖片輸出到流覽器上的開發效率。TIWImageFileTIWImageFile提供了從磁片上的一個檔中顯示圖片的能力,因為它不會轉換圖片模式,TIWImageFile是一個比TIWImage更有效率的顯示圖片的元件,如果你僅僅是完整地顯示一個靜態的圖片,你應該經常使用TIWImageFile。TIWImageFile也提供了設計時顯示圖片的能力,你可以在設計Form的同時顯示圖片,然而,這個圖片只是純粹地顯示,圖片資訊不會儲存在Form中,只有當程式在運行時,圖片才會被Load到Form中。Filename指定了要顯示的圖片的完整路徑。在運行時,路徑將會被省略,只有檔案名會被使用,所以,在選擇時,要顯示的圖片應該在Files目錄下。GIF SupportIntraWeb支援GIF的顯示,然而,安裝程式將沒有預設的安裝GIF的支持,就參考IntraWeb FAQ來獲得臬安裝和使用GIF檔的資訊。其它的文件其它的檔,例如圖片、下載的檔等等都可以通過指定主程序所在的相對路徑來訪問,創建一個Files目錄,把所有的HTML物件都放到這個目錄下,在HTML頁面中,你就可以通過使用 img Src=./files/image.jpg這樣的形式來訪問。請確認,在流覽器中你要使用 / 而不是 來訪問,在IE中,這種錯誤會自動被改正,但是在其它的流覽器中卻不會被自動改正。通常,這種方法不僅限於對圖片的顯示,也可以用在其它所有的檔案格式中。訪問的檔都會被流覽器緩存,如果你希望創建一個不會被流覽器緩存的檔連結,那麼,你可以用./filesnc/來代替./files/。檔將會從一個同樣的目錄來訪問,但是不會被流覽器緩存。其它的FormProperties請仔細地查看那些經常會被開發都忽略的Form的屬性,這些屬性可以控制例如HTML的輸入及其它更多的。Server Controller每一個應用程式都包含一個ServerController單元,這個單元包含了會影響應用程式在全域範圍中的動作及行為的屬性,它也包含了能在應用程式中定義的事件。DataModules如果你要使用DataModules,請參考一下 FishfactDM演示,有一點要提醒的是,如果你在設計時連結了一個DataSource,就像在FishFactDM裡一樣,你的DataModules必須被一個WebApplication所擁用,這在FishFactDM中是通過設置DataModuless owner到 Session Datas owner的WebApplication Variable來實現的,如果做了這一步,那個Form在屬性中是不可讀的,並且,所有的Form都將會被連結到第一個也就是同一個DataModuleExtanding IntraWeb自訂群組件(Custom Components)所有的IntraWeb元件都是用一個開放的API來寫的,這將允許你更容易的將你自已寫的元件增中到IntraWeb裡,這就像是其它的Delphi所做的一樣。嵌入純HTML通過使用TIWText,你可以不編寫一個元件就把你自己的HTML語句嵌入到IntraWeb中,簡單地把一個TIWText元件拖放到你的Form裡,設置RawText屬性為True,並且把WantReturns設置為False,最後,把你需要的HTML語句放到Lines屬性裡,你的HTML將會成為你輸出的Form的一部分。HTML TemplatesHTML templates(可以參考一下其它地方的Template)用於增加一些複雜的HTML到你的應用程式中用來定義你的應用程式的外觀。你可以看看Layout Manager部分來獲得更多的資訊。Form Managerment 介紹在一個IntraWeb應用程式中管理Form就像在普通的Delphi程式中一樣簡單,但也有一點限制。限制1 只有一個Form是可見的,這是因為在實際情況中,流覽器裡只能顯示一個Form.2 模式的Forms是不能使用的,然而,因為在流覽器中一次只能顯示一個Form,所以實際上所有的Form都是模式的。3 所有的Form都必須是Owned By WebApplicaton.使用方法Form ListIntraWeb保留了一個Forms的列表做為用戶Session的一部分,它就像是時裝店裡的新上架商品一樣,最近顯示的Form將會被保留在最頂端,當一個Form被隱藏時或被釋放時,這個列表用來確定應該啟動哪一個Form,如果沒有明確的通過.Show方法來提出應該顯示哪一個Form.通常,Form List從來不會直接與用戶進行交互,而是通過Call的方法來確定顯示哪一個Form,但是,在有的情況下,Form List必須與用戶進行交互,在這些情況下,TIWApplication包含了一系列的方法來實現與用戶的交互,這在幫助文檔裡都有說明。Showing Forms顯示一個Form通常的語句格式如下:第一次看來,這有點讓人迷惑,但是它是以下格式的略縮:除了它在這裡是一個WebApplication這外,就像是通常的應用程式一樣,不同的是,普通的應用程式在調用了Call之後,Form是馬上就顯示,在IntraWeb中,當Call調用一個Form之後,只是純粹地指定了哪一個Form是在一個事件退出之後下一個活動的Form,也僅僅當一個事件被執行之後Form才會顯示。Destorying Forms一個普通的應用程式中,當一個Form不在需要的時候,它能通過使用.Free或.Destroy方法來Destory掉,在IntraWeb應用程式中,有一點相似,但是,你不能直接調用.Free或.Destroy方法,你必須調用一個.Release方法,.Release方法並沒有真正地Destory這個Form,這個Form直到退出了事件並且把控制權還給IntraWeb的時候才會真正地Destory.這是因為.Release是Form本身在事件中調用的,儘管這並不是經常發生。當Relase被調用的時候,就像一個普通的應用程式一樣,當前活動的Form變成前一個被Destory的Form,如果你不想用戶回到上一個Form,你就必須調用.Show方法來啟動另一個Form,可以在.Release將程序控制權還給IntraWeb之前或之後調用.Show方法。當一個Form被釋放後,所有對這個Form List的參考都會被刪除,如果在這些Form在Hidden或Release的時候沒有調用.Show方法,將改變Form的序列。Hiding Froms在普通的應用程式中可以不調用.Hide方法來Destory一個Form,同樣的功能也可以在IntraWeb中調.Hide方法來實現,.Hide方法可以在調用.Release方法時隱藏一個Form而不必Destroy它。調用.Release時,.Hide刪除了所有的關於對這個Form List的引用,但是並沒有Destory它,正因如此,如果你想在以後還想繼續使用這個Form,你必須保留一個對這個Form的引用,換句話說,也就是這個Form變成孤立的了。Passing Data Between Forms像普通的應用程式一樣,資料可以在Form之前傳遞,因為Form的資訊可以做為Form Class的一個變數儲存在記憶體中。作為一個試例,你要定義兩個Form, TFormMain和TFormDialog.TFormMain是主Form並且包含一個Butoon 和一個Edit Box。TFormDialog包含一個memo Field和一個Label。當使用者在主表單中點擊按鈕時,主表單的Edit Box中的文字會被加到Dialog Form的Memo Field中去,同時,Dialog Form也會被顯示,Dialog Form也同時顯示了它已經被顯示了多少次,並且允許使用者返回到主表單中去。IWLink1 OnClick這個事件以連結的形式與標識Caption為”Quit”相關,當使用者點擊這個連結時,簡單地終止了這個應用程式。OnCreateOnCreate事件將會在這個Form被創建時調用,在這個事件中創建了別一個Form,同時,這個Form的引用也做為Form的member Variable儲存起來了,以便於再次調用。butnOk OnClickOnClick事件中將會檢查Edit Box中是否有資料,如果沒有資料存在,那麼程式將調用WebApplication.ShowMessage向使用者顯示一些資訊,當釋放MessageBox後,Form將會再次顯示,如果使用者已經輸入了資料,那麼,Using FDialogForm(在當前Form的OnCreate事件中創建)將會顯示,EditBox中的資料會被加到Memo Field中,TFormDialog的member variable會更新,調用.Show方法顯示這個Form,就像你看到的,資料在兩個不同的Form中被傳遞了,如同普通的Delphi應用程式一樣。Complete Demo你可以看看FormData.dpr這個Demo來獲得完整的示例。State ManagementInherent State標準的Web開發工具都有一個自動的Session Management,但僅僅意味著它會為你跟蹤Session的資訊,你仍然不得不在頁面之間處理這些狀態資訊,或者在不同的狀態物件中處理這些資訊,狀態物件通常也局限於字串和那些字串中整理出來的資料,這不利於處理更複雜的資料類型。IntraWeb在這方面有了一定的改善,它是一種固有的狀態管理。你倒底是在說什麼呀?新的詞語?不,問問你自己吧,你是怎樣在普通的Delphi程式中管理這些狀態的呢?什麼?你不需要管理?正是這樣,在IntraWeb中你確實也需要管理這些。限制Global Variables全域變數通常不會使用,如果你需要使用全域變數來指定每一個用戶Session都要用到的變數,我們下面將會提到的。如果你需要對所有的使用者Session都使用一個變數,那你就用一個全域變數吧,然而,IntraWeb是一個執行緒化的環境,你必須指定一個屬性來保護當前訪問的變數。ThreadVarsThreadVars在IntraWeb應用程式中永遠不會被使用到,除非某種臨時的儲存的使用。IntraWeb是基於HTTP的表態訪問的,這在本質上就意味著所有的執行緒都沒有指定給某一個特定的用戶,並且用戶是在HTTP請求和執行緒中轉移的。Safe StorageForm/Datamodule Members因為IntraWeb Form和DataModules是持續的,就像普通的Delphi程式一樣,你能以member Variables 和屬性的方法來儲存資訊,這些資訊能在Form自身需要時或在接收來自其它Form的時候儲存在記憶體裡。User SessionUser Session(在Session Management部分將會更多的介紹)包含一個.Data屬性,它能控制到一個物件的Reference.當你需要儲存一個使用者的特定資訊時,你可以把資訊儲存在.Data屬性裡,它接受即時的TObject,並且能在Session釋放的時候自動Destory。最簡單的方法就是創建一個物件,把你要的Fields加到裡面,創建一個物件時,當Session創建時,把Session儲存在這個Session的Data屬性裡。Phonetics示例演示了一個較為完整的例子。當創建一個新的IntraWeb項目時,一個Shell的使用者Session物件也會在ServerController裡被自動創建了,一個缺省的ServerController看上去就像這個樣子:TUserSession是一個空的Session物件,你可以把members, Properties and methods加到上面,為每一個Session創建一個TUserSession的同時,它也會被創建到OnNewSession事件中。以Function Named UserSession也是已經存在的用來簡單訪問物件的方法,所以,如果你把TUserSession的聲明改成以下的樣子:你可以訪問這些屬性,在你的代碼中就像這樣:如果你不再需要一個使用者的Session了,你可以在代碼裡終止它,當然,它不是必須的,這在一個缺省的template裡是作為一個部分自動存在的。TUserSession的Class Type可以是任何類型的,在一個由DataModule生成的項目中,TUserSession是TCompnonet的派生,而不是這裡顯示的TObject。TComponent允許Session own component例如Datamodule 允許簡單地清除。(cleanup).複雜的State和後退按鈕許多人很快會發現,當然使用IntraWeb開發裡,流覽器裡的後退按鈕沒有用了,缺省的IntraWeb禁止了後退按鈕,點擊它時,不會有任何事情發生,請注意,這僅僅適用於Application Mode,在Page mode裡,後退按鈕是有用的,這個限制是因為IntraWeb為了使用複雜的狀態才會有的。Scenario-Normal Appplication試想一個普通的程式設計成運行在使用者本地電腦上,它有五個不同的Form,並且為了滿足Forms multiple instances of that form may be created different data(例如屬性對話方塊顯示了不同物件的不同屬性)。試想一下現在在任何時候,不需要警告或是提示你,使用者能在程式裡訪問任何一個Form。但不僅僅訪問任何一個Form,他們還能訪問任何一種過去的狀態,甚至是訪問一個已經從記憶體物件中移除的Form。在他們訪問那個Form的時候,他們還能與之交互,怎樣的一個程式會這樣呢?這裡有一些,但不是全部的問題:Form所依賴的資料在資料庫中的資料已經在資料庫中不存在了,因為用戶已經刪了。Form所依賴的資料在資料庫中正被改變,並且用戶可能正定位元到一個非法的資料記憶體中的物件已經被改變了,或者不再存在了。在非IntraWeb 系統中的後退按鈕不是由IntraWeb開發的系統通常支援後退按鈕,然而,它會處於這樣一些情況:_ Stateless They are completely stateless and reconstruct state between each page.This is usually very inefficient on the server side for weblications and putsconsiderably extra load on databases because data is read and written unnecessarily._ State Streaming These types stream the state into and out of each web page. Thisconsumes bandwidth and slows down page accesses. They also cannot use complexdata, or usage of complex data causes the same problems described prior.Even applications that support the back button, such problems are still encountered.However because they allow old data to be posted they must check the data to see if therequested operations can be performed. This adds significantly to the amount of user codeexcept in the simplest of systems. Such systems are typically not weblications, butindividual dynamic pages.IntraWeb is Not Alone如果你試過許多的線上Bank應用程式或是定購系統,他們中許多都有同樣的限制,但運行得都不是很好,大多數的系統允許你後退,但是會告訴你你所請求的頁面是一個過期的內容,這是一種很不友好的介面,並且會讓那些非技術出身的用戶感覺迷惑。用後退按鈕來訪問歷史資料在有限的環境下,後退按鈕在Application mode下是被支援的,它支援訪問歷史資料。這就意味著,後退按鈕將可用,讓使用者返回歷史資料。然而,如果用戶如果嘗試在歷史頁裡與資料進行交互操作時,就會失敗。如果用戶嘗試這樣的操作,那就會出現一個警告:在這個警告頁顯示之後,頁面將返回到使用者通過後退按鈕訪問的頁面之前的那個頁面。這個功能通過設置Server Controller中的.HistoryEnabled屬性來實現。這個警告也可以關閉,要這樣做,可以在Server Controller中把.ShowResyncWarning屬性設為False,如果這樣做的話,使用者將不會看到警告頁面,而是直接轉到當前頁面。Session ManagementWebApplication ObjectTIWApplication 指的是一個IntraWeb apllication,TApplication是一個標準的Delphi應用程式。就像近來,TIWApplication不是一個視覺化的元件,它不會出現在屬性對話面板中,因此,沒有公開它的屬性,然而,它也有一些公開的屬性和方法可以通過代碼在IWApplication中訪問,針對每一個使用者的Session,TIWApplication物件都會創建。它會重新提供用戶一個”Application”或是一個”session”。Session 的生命期用戶Session是由IntraWeb自動管理的,當一個新的Session開始時,IntraWeb會自動創建一個新的實例給使用者並且跟蹤它,它能被用來獲得使用者的資訊,控制使用者資訊或者儲存一些典型的資訊。對於開發者,不需要實現Session的管理,或者跟蹤用戶。只有當TIWApplication的Terminate方法被調用或者它超時,才會終止一個Session,否則它將一直存在,如果在特定的時間內,一個使用者沒有訪問應用程式,這個使用者的Session將會被Destory,缺省的超時期是10分鐘,但是在ServerController裡,通過設定Session Timeout屬性,你可以改變這個時間。Session ImplementationSession是由IntraWeb自動管理的。Session是保存在伺服器的記憶體裡的,同時會防止用戶人為的修改Session的資料,每一個Session ID都是由安全的方法來創建的,所以不可預見,同時不容易被修改,通常情況下,每一個Session都是綁在用戶的流覽器上的,並且如果另一個流覽器被檢測到試圖訪問一個同樣的Session,那麼會得到一個錯誤。要獲得更好的安全性,可以設置ServerController的RestrictIPs 屬性。這會檢查用戶的IP位址,如果IP位址改變了,那麼伺服器將拒絕該Session的訪問。這個選項缺省是設為False的,它只有在控制Intranets或是Extranets的用戶時才會被設為True。這是因為,一些代理伺服器比如Microsoft ISA Proxy Server在實現HTTP請求的時候會改變IP位址,這會造成給IntraWeb多個IP位址。缺省的,Session ID是嵌入到每一個HTML頁面並且由每一個HTTP請求來跟蹤的,這允許一個單一的使用者在一個應用程式中擁有多個Session,但是這樣不方便的地方是,一旦使用者開始使用程式,那他就不能離開程式和返回它。因為這一點,使用Session ID來跟蹤任何非Applicatoin的頁面時,必須新開一個視窗,除非是等到終止應用程式時再運行。Session Tracking可以被設置為使用Cookies而不是嵌入到HTML頁面中,你可以設置ServerController裡的Session TrackingMethod屬性為tmCookie來實現。這會讓IntraWeb 使用Cookies來跟蹤用戶的Session,優點是使用者可以隨便地在程式內與程式外移動。缺點是許多使用者都Disabled了Cookies並且在一個應用程式中,使用者只能有一個Session。Accessing the Session應用的應用程式可以通過很多種方法來訪問。WebApplication Property of the Form你可以簡單地使用引用了Form的WebApplication屬性來定義所有的事件和方法。這將滿足近期來幾乎所有的情況。然而,值得注意的是這個屬性中不容易理解的是Global procedures, Tframes, Datamodules and non IntraWeb classes.WebApplication Property of a Control在寫一個用戶Controls的時候,基本的IntraWeb Control也包含了一個能使用的WebApplication屬性。RWebApplicationRWebApplication是一個特殊的全域變數,它能被用在當一個Form或是一個Control Reference不再有效時訪問當前用戶Session。這在Datamodules,Tframess, global procedures and non IntraWeb classes時會非常有用。RWebApplicatoin是一個ThreadVar,在開發者使用它時,沒有什麼預告的警告,要引用RWebApplication你需要加一個IWInit到你的 usese clause。Storing Additiong DataAddition data能被儲存在.Data屬性裡,在State Management 部分我們已經提到了。Session Related EventsServer Controller有一些與Session Management相關的方法, are fired for session createion and destruction.OnNewSessionOnNewSession在一個新的用戶Session創建的時候就被取消了,它傳遞進來兩個參數,ASession和VMainFrom。ASession是一個對新創建的Session的引用,能被用在查詢使用者資訊或是修改儲存在.Data屬性的物件中的使用者資訊時。VMainForm就像一個定義的參數一樣被傳遞,它如果在專案檔案(dpr)中沒有設定缺省的主表單的話,那麼它就會被初始化為nil,VMainForm可以從Start URL傳遞的參數中或是通過其它的規則來修改它,要指定一個交替的主表單,只要簡單地創建它,並且馬上把它返回給VMainForm參數。OnCloseSessionOnCloseSeesion在一個用戶Session要終止的時候會被調用。它不會在一個WebApplication的Form關閉或是一個Session超時的時候被調用。Memory Consumption每一個Session所消耗的基本記憶體是非常小的,通常情況下這不是一個主要要考慮的問題。實際的佔用的大小可以通過一個Session到另一個Session時改變,但是,佔用的基本記憶體除了儲存在.Data屬性中的任何一個使用者資料之外,通常不會超過1024bytes。Reference要獲得更多的方法和屬性的資訊,你可以看看IntraWeb 幫助檔中關於TIWApplication的介紹。Debugging當你在Standalone方式開發時,調試就像開發其他的Delphi應用程式一樣,設置中斷點、監視、運行之類的。Debug Output當你的程式運行在Standalone模式時,你可以返回一個調試結果來看看Session的創建、消亡以及HTTP請求,你可以把調試輸出打開,從檔功能表中選擇 “Show Debug Information”,或者點擊工具條上的圖示。Detecting Error on Startup如果在運行一個程式時碰到了錯誤,那麼IntraWeb會終止這個程式,並且會把錯誤的Log存成一個.err檔,一個以應用程式名加

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论