




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第二十五章 應用Internet Express的程序開發(fā)我們可以輕易的使用Web接口,在客戶端來取得服務器里數據庫的信息,讓這些信息顯示在網頁上面。但是如果想要將服務器數據庫的數據先搬動到客戶端,然后在客戶端進行數據庫的修改存取,接著再搬回服務器呢?感覺就復雜多了,而這就是本章所要介紹的InternetExpress所帶給我們強大神奇的功能。 大綱 25-1 InternetExpress導論 25-2 實作范例說明 25-3 建置多層存取架構 25-4 整合數據查詢 本章習題25-1 InternetExpress導論 不同于一般Two-Tier的架構,InternetExpress提供了
2、另外一種的數據庫存取方式。應用程序取得數據庫服務器的數據,經由InternetExpress所提供的服務,將取得的數據轉換成XML格式的網頁,然后再傳送給客戶端去瀏覽這個網頁,并且提供了可以編輯的接口。對于使用者而言,他只需要去編輯者個網頁接口的內容,這個編輯完的內容將會被利用JavaScript以更新的方式將被修改過的數據再寫回數據庫。 所以說,等于是客戶端把數據庫數據般出來,改一改,再全部搬回去。這大概就是InternetExpress的精神所在了。C+ Builder開發(fā)環(huán)境下,在Internet Express這個組件面版分類里有兩個組件,分別為:XMLBroker和InetXPage
3、Producer。 InternetExpress和一般數據庫動作的差異一般Two-Tier架構下,客戶端進行五個updata更新動作的示意圖。 在InternetExpress概念下,進行五個update更新動作的示意圖。 用戶端取得數據集 用戶端編輯取回的數據集 用戶端回存數據集到數據庫服務器25.1.1客戶端取得數據集由于現(xiàn)在我們在客戶端所要使用的瀏覽工具,就是一般的網頁瀏覽器;對于網頁瀏覽器而言,根本不可能辨識ClientDataSet組件所提供的數據,所以我們可以知道,如果要使用這種方式來存取數據庫,一般的C+Builder所提供的方式是行不通的。所以這個時候,XMLBroker的出
4、現(xiàn)就是為了要面對這個問題,這也是InternetExpress作為信息傳遞最重要的概念。 XMLBroker所要處理的事情,跟ClientDataSet的作用是很類似的。由于現(xiàn)在客戶端所使用的應用程序是網頁的瀏覽器,所以最便利的數據結構的格式就是把所有的取得信息轉換成為XML的格式。于是在把數據傳給客戶端之前,必須要先做轉換的動作,而這個動作就是由XMLBroker組件所負責的。 在internetExpress架構下,可以是兩層(Two-Tier)的或是多層(Multi-Tier)的存取結構。在兩層結構下,數據存取組件、數據提供者、和XMLBroker組件都和WEB應用程序放在一起;而多層的
5、存取架構下,數據存取組件、數據集提供者則是放到應用程序服務器里,而在Web應用程序這邊,則包含了XMLBroker和DataSnap這兩個組件。 25.1.1客戶端取得數據集 XMLBroker組件主要用于處理兩件事 從資料提供者或應用程序服務器那邊取得數據庫的數據,并且在取得這些數據以后加以處理成為XML格式的數據結構 當用戶端使用瀏覽器將這些XML格式的數據做完更新以后,XMLBroker必須負責接收這些被更新的數據然后再傳給數據庫系統(tǒng)去做相對應的處理 XMLBroker的重要屬性屬性名稱 說明 RemoteServer 指定建立連線到應用程式伺服器的元件名稱,這是在Multi-Tier多
6、層架構下才需要指定的,一般兩層架構可以忽略。 ProviderName 指定資料集提供者,對於兩層式架構,可以直接從這個屬性選取資料集提供者,若是多層式的存取架構,則需要經由RemoteServer屬性指定應用程式伺服器了以後,才可以用選取的方式指定這個屬性。 MaxRecords 每次轉換的資料最多可以有多少筆,這可以避免過多的資料集一次傳給用戶端,這樣對於用戶端和網路頻寬都會造成很大的負擔。但是如果我們是針對小型的資料庫的話,就可以把這個值設定成為-1,這樣一次就會把伺服器所有的資料集一口氣傳給用戶端。 Params 當資料集透過動態(tài)查詢或呼叫預存程序取得時,可以使用這個屬性來指定條件參數
7、值 XMLBroker的重要事件事件名稱 說明 AfterDispatch 當XMLBroker處理完請求的對應動作時,此事件就會發(fā)生。 BeforeDispatch 元件收到資料更新的請求,這個事件就會發(fā)生,藉由這個事件的發(fā)生,來處理請求的對應動作。 OnGetErrorResponse 當資料的更新動作發(fā)生錯誤的回應,此時此件事就會發(fā)生。 OnGetResponse 當此事件發(fā)生時,表示資料順利的被更新了。 OnRequestRecords 當XMLBroker需要從資料提供者端取得新的資料時,此事件就會發(fā)生。 OnRequestUpdate 正在執(zhí)行資料更新的時候,這個事件就會發(fā)生。 2
8、5.1.2 客戶端編輯取回的數據集InternetExpress分類里的另外一個組件InetXPageProducer了,此組件可以建立網頁畫面,利用這個組件,程序設計師可以鏈接到XMLBroker組件來取得數據集,然后藉由這些取得的數據集來產生相對應的編輯字段。 要產生的網頁接口是由InetXPageProducer組件負責的,當我們要設定網頁內容的樣板格式時,就去設定該組件里的HTMLDoc屬性,也就是說,我們可以先在HTMLDoc屬性里指訂網頁的基本外觀和格式,如背景,插圖,或是題字等等(右圖為編輯畫面)。 25.1.2 客戶端編輯取回的數據集除此之外,InetXPageProducer
9、也提供了一個類似于FrontPage的編輯網頁接口Web Page Editor,在InetXPageProduce組件上面按下鼠標右鍵就可以點選開啟了,其畫面有分兩個部分:HTML就是顯示HTML原始碼的畫面,Brower就是顯示瀏覽器處理這些HTML碼的時候,所會顯示的畫面,如右圖25.1.3客戶端回存數據集到數據庫服務器 當使用者編輯完了這些來自XML格式的網頁以后,將要回傳給數據庫服務器做更新,在InetnetExpress里,是利用JavaScript語言來整合網頁數據和數據庫數據,加上一些附加的功能。所以說,真正處理數據的是交給JavaScript語言來處理,而程序設計師并不需要真
10、的會編輯JavaScript語言,因為這都是要交給C+Builder來做的。最后透過JavaScript就可以把更新的數據套到數據庫的數據,最后再統(tǒng)一格式送回給服務器。25-2 實作范例說明本范例里所使用的數據庫系統(tǒng)為MircoSoft Access,運用的數據庫存取組件為ADO系列組件。一開始先在Access環(huán)境里編輯好一個簡單的通訊簿,如圖,名為AddressBook。這個數據表里面有五筆數據,紀錄了簡單的個人信息。 實作范例說明-1 但是在我們開始使用C+Builder開發(fā)之前,要先把網絡服務器的環(huán)境設定好。由于InternetExpress技術是透過JavaScript來進行數據處理的
11、動作,而這些JavaScript原始碼,都可以由InetXPageProducer來自動產生,而這些自動產生出來的原始碼將會呼叫一些C+Builder所提供的函式庫,所以我們必須要把這些函式庫放到IIS的有效目錄內。 這些函式庫是放在C+Builder安裝好的目錄下的SourceWebMidas子目錄內,我們可以把這個目錄的內容都搬到IIS的根目錄下。 本范例環(huán)境設定如下: IIS的根目錄為C:wwwroot C+Builder的安裝目錄為E:CBuilder6 實作范例說明-2 除了可以把E:CBuilder6SourceWebMidas下的檔案都搬到C:wwwroot下的某個子目錄以外,我
12、們也可以有以個比較技巧的做法, 只需要在IIS設定里,設定一個虛擬目錄到E:CBuilder6SourceWebMidas就可以了。 因為InternetExpress服務是使用CGI的格式由服務器發(fā)送信息給客戶端,所以接下來就是要修改IIS的設定,使其可以執(zhí)行CGI程序,進入默認網址的內容選單 將根目錄權限的Script Acess選項勾選,并且在執(zhí)行權限的下拉選單選擇也可以執(zhí)行執(zhí)行檔。 實作范例說明-3 接著我們就可以開始項目開發(fā)的動作在C+Builder環(huán)境下,新增一個項目。專案的類型為Web Server Application,型態(tài)為CGI Stand Alone Executabl
13、e,我們將會有一個空白的項目。接著開始要加入組件了,首先我們需要使用ADO組件來鏈接Access的mdb檔案數據庫,所以我們需要組件ADOConnection和ADOTable。在ADOConnection的ConnectionString屬性里鏈接到mdb檔案 當資料庫檔案連結成功,設定ADOTable的組件里的Connection屬性為ADOConnection1。然后把TableName屬性指定為AddressBook,并且之后把Active屬性設定為True。 把Data Access分類標簽里的DataSetProvider組件拉進項目里。然后把DataSet屬性設定成ADOTabl
14、e1。 把XMLBroker的ProviderName設定為DataSetProvider1了,別忘了這時要把Connected屬性改成True。 實作范例說明-4下一步,就是要開始建構處理完的數據所要顯示的網頁接口,也就是InetXPageProducer組件此時要拉進項目的時候了。在 InetXPageProducer組件圖標上面按下右鍵,點選Web Page Editor就可以開啟編輯選單,如圖。在左邊的分頁里按下鼠標右鍵,點選New Component,選取DataForm選項。接著點選左邊分頁里新出現(xiàn)的DataForm1再按下選單里的NewItem選項(選單圖示的第一項)。然后按下C
15、trl鍵點選DataNavigator和FieldGroup,新增這兩個選項。 實作范例說明-5在FieldGroup1的屬性XMLBroker里設定成XMLBroker1,而DataNavigator1的XMLComponent屬性設定成FieldGroup1。 實作范例說明-6 接下來在InetXPageProducer1的IncludePathURL屬性,要設定函式庫目錄,也就是我們剛剛所設定的虛擬目錄WebMidas。如: http:/localhost/WebMidas 這個設定是給客戶端瀏覽器看的,也就是說如果設定如上是localhost的話,那么只有服務器本身的瀏覽器可以開啟,其
16、他計算機的瀏覽器將無法找到,所以這里如果是真的要透過網絡來提供InternetExpress服務的話,就要設定實體位置。 實作范例說明-7InternetExpress的架構已經完成了,現(xiàn)在要做的就是修飾的部分 在Web Page Editor的左上框里,將鼠標移到DataNavigator1上面,再按下右鍵選取New Component就可以選擇各式各樣的功能鈕的功能,如刪除,下一筆數據,更新.等等。 把這些功能都選取然后新增,然后在Web Page Editor的下面框就可以點選按鈕,修改其屬性。如筆者如果修改了Apply Updatas按鈕的Caption屬性成為更新數據庫,結果如下圖:
17、 實作范例說明-8最后,就是要測試cgi程序是否能夠順利執(zhí)行。在Project選單里Build好這個項目,然后把產生的執(zhí)行檔案放到IIS的根目錄范圍下。如將執(zhí)行檔ch26_001.exe放到C:wwwroottemp子目錄中。然后到另外一臺有網絡的計算機上面使用瀏覽器開啟這個執(zhí)行檔 ,如果成功,如圖的畫面就會出現(xiàn)了。25-3 建置多層存取架構 在比較大型的數據庫網絡系統(tǒng)下面,我們會希望把服務器端分開來,一是應用程序服務器提供數據庫模塊,另一是單純的Web應用程序服務器用來放置InternetExpress的執(zhí)行程序。 這個Web應用程序服務器可以利用DataSnap的組件來和數據庫取得聯(lián)機。這
18、樣子的架構,就可以把數據庫和網頁處理的動作分開到兩臺不同的機器了。 多層存取架構范例 本范例使用Access的mdb檔案作為數據庫,需要建立兩個BCB的專案:一是應用程序服務器,用來鏈接數據庫并且把數據庫的信息提供給InternetExpress項目作為數據源另一個項目就是InternetExpress的項目,使用CGI的格式,讓客戶端使用瀏覽器來開啟。 多層存取架構范例- 應用程序服務器的建立 1首先建立一個example.mdb的范例數據庫,數據庫里面有一個Person數據表,是個簡單的個人資料記錄,如下圖: 多層存取架構范例- 應用程序服務器的建立 2有了這個數據表以后,我們就開始建立B
19、CB的專案了。首先我們可以先建立一個普通的Application專案,在Form1里隨意編輯一個簡單的畫面,如下圖。 多層存取架構范例- 應用程序服務器的建立 3 接下來就要開始重要的步驟了,我們在這個項目里加入一個Remote Data Module模塊,從工具欄的File里的New選項,選擇Other分類,然后再Multitier頁簽里可以找到這個模塊,這里我們會被要求輸入這個模塊對象的命名,筆者命名為RDMObj25_2。而這個項目就是要利用這個模塊來提供給InternetExpress項目數據庫資源。 后我們就可以在這個模塊上,加入鏈接數據庫必要的組件,首先我們先加入ADOConnec
20、tion組件,在組件功能列的ADO頁簽里。加入后在組件圖標上用鼠標點選兩次,開啟數據庫鏈接的對話框。 多層存取架構范例- 應用程序服務器的建立 4選擇Jet 4.0 OLE DB Provider來連結mdb數據庫 指定mdb檔案的路徑和檔案 多層存取架構范例- 應用程序服務器的建立 5現(xiàn)在我們鏈接好數據庫了,下一步就是拉入ADO頁簽里的ADOQuery組件,組件的Connection屬性當然就是指定為ADOConnection1。 編輯SQL屬性,這個屬性里我們輸入SQL的語法,告訴ADOQuery組件我們需要的數據表和數據字段。 如圖顯示然后把Active屬性改成true,這樣查詢數據表的
21、動作就告一段落。最后一個我們需要的組件,就是Data Access頁簽的DataSetProvider組件了,將這個組件拉進項目里,然后把其中的DataSet屬性設定為 ADOQuery,如此就完成了應用程序服務器的所有動作了。 多層存取架構范例- InternetExpress服務器建立 1 現(xiàn)在我們有了應用程序服務器提供數據庫服務,就欠一個WEB服務器來提供CGI服務了,在這里我們必須要在另外開啟一個新的項目。這個項目的型態(tài)和上一節(jié)所介紹的相同,就是Web Server Application分類里的CGI Stand-alone executable型態(tài)項目。 開啟好了新項目后,首先要做
22、的就是跟剛剛完成的數據庫服務器鏈接,這個時候就需要DataSnap頁簽里的DCOMConnection組件了,當然我們也需要加入InternetExpress頁簽下的XMLBroker和InetXPageProducer兩個組件。 多層存取架構范例- InternetExpress服務器建立 2在DCOMConnection組件里有一個屬性:ComputerName,這是用來指定網絡上的計算機哪一臺是應用程序服務器,如果是在同一個網域下的話,可以直接指定該計算機在網絡上的名稱,或者我們也可以直接指定IP 當這個指定動作無誤以后,在ServerName屬性,就能看到RDMObj25_2這個選項了
23、,我們就指定這個選項。 把Connected選項設定成True了,這個時候本項目就會去做鏈接應用程序服務器的動作了,如果連結成功,那么在應用程序服務器的主窗體畫面就會出現(xiàn) 多層存取架構范例- InternetExpress服務器建立 3在XMLBorker1組件的RemoteServer屬性,選定為DCOMConnection1,然后在ProviderName屬性設定成DataSetProvider1,這個DataSetProvider1組件就是應用程序服務器的組件。然后將Connected屬性設定成true 開始設定InetXPageProducer組件選擇選單上的Web Page Edit
24、or,然后加入一個DataForm,并在此DataForm1里再加入DataNavigator和DataGrid組件,把DataGrid的XMLBroker屬性選擇XMLBroker1,DataNavigator的XMLComponent屬性指定為DataGrid1把這兩個組件的Field都加入到項目里以方便修改 多層存取架構范例- InternetExpress服務器建立 4最后一個步驟,就是在工具欄的Add New里,新增一個WebActionItem組件,把該組件的default屬性設定成true,并且把Producer屬性設定成InetXPageProducer1組件。 把Build好
25、的執(zhí)行檔放到IIS的有效目錄范圍內。我們可以開始利用客戶端瀏覽器來觀看CGI執(zhí)行的結果。 25-4 整合數據查詢 在數據庫里面,某些重要字段是可以有關聯(lián)的(relation),這先關聯(lián)可以透過關鍵值(Key)來做連結。 這樣的連結和讀取的動作,可能會取出大量的數據庫數據造成讀取的負載提高 本節(jié)我們將要介紹,如何使用InternetExpress的架構來一次讀取不同的數據表單。 整合數據查詢范例本節(jié)的范例先利用Access建立一個范例數據庫db1.mbd。這個數據庫里將會有兩個數據表,一個是紀錄學生的基本數據Personal數據表,另外一個是學生的學期成績Grade數據表 所以我們現(xiàn)在有兩個數據
26、表,這兩個數據表里面共同擁有有具有單一性質的字段就是姓名(Name)和學號(sn),由于名字有可能再以后數據庫擴大的時候出現(xiàn)重復的情形,所以在此筆者選擇用學號來當做關鍵值。而建立關聯(lián)的動作,雖然Access本身也有提供,但我們留在BCB再作動作。 整合數據查詢范例-應用程序服務器的建立 1本節(jié)的范例將會和前一節(jié)一樣,建立的是多層的存取架構,但是加入多窗體整合的實作。 首先要做的就是先建立應用程序服務器,做法和前一節(jié)的一樣,我們可以先新開一個普通的項目,然后加入一個Remote Data Module,命名為RDMObj25_3。然后加入ADOConnection組件用來鏈接數據庫。到這里為止,
27、動作都和上一節(jié)的范例是相同的。加入ADO頁簽里面的ADODataSet組件兩個到項目里,每一個個別負責一個數據表的資料。所以這兩個組件的Connection屬性都設定成ADOConnection1。 因為有兩個數據表,一個是Personal,一個是Grade,在此讓ADODataSet1組件負責Personal數據表,而ADODataSet2組件負責Grade數據表。 整合數據查詢范例-應用程序服務器的建立 2在ADODataSet1的CommandText屬性,在編輯框里寫入: Select * From Personal另外在ADODataSet2的CommandText屬性寫入: Sel
28、ect * From Grade如此一來ADODataSet1將會透過ADOConnection1鏈接到數據庫并取出數據表Personl的所有字段,而ADODataSet2也同理取出Grade的所有字段了。把DataAccess頁簽里的DataSource組件加入項目里,我們需要這個組件來做數據表結合的動作(Join)。將DataSource的組件的DataSet屬性指向ADODataSet1,然后再把ADODataSet2的DataSource屬性指定成DataSource1,如此一來,我們就可以以ADODataSet1組件所處理的Personal數據表為基準,加入ADODataSet2組件
29、所負責的Grade數據表的資料了。 整合數據查詢范例-應用程序服務器的建立 3在ADODataSet2的MasterFields屬性開啟編輯窗,我們就可以看到如圖的畫面了,左邊為Detail Fields右邊為Master Fields,所謂的Master Fields就是主要的字段,在這里就是ADODataSet1所負責的Personal數據表的資料,而Detail Fields就是透過連結加入進來的字段,就是ADODataSet2所負責的Grade數據表。 在MasterFields里選擇sn,在Detail Fields里也選擇sn,然后按下Add,那么Joined Fields里就會加
30、入sn這個關鍵值連結關系了。 整合數據查詢范例-應用程序服務器的建立 4 完成了與數據庫的動作,我們需要把這些數據庫的信息提供出去,就又需要加入DataAccess頁簽的DataSetProvider組件了。在DataSetProvider1組件的DataSet屬性,指定為ADODataSet1(非ADODataSet2,因為ADODataSet1負責的才是Master Fields)。 應用程序服務器已經完成了,接下來就是建立InternetExpress服務器。 整合數據查詢范例-InternetExpress服務器的建立 1 在這里,我們所要建立的InternetExpress服務器,和上一節(jié)所要建立的很相似 ,需要加入的組件依然是以下三個 :DCOMConnection,XMLBroker,InetXPageProducer DCOMConnection1組件的Computer Name屬性指定剛剛才完成的應用程序服務器的網絡名稱或網絡位置,然后ServerName就設定為RDMObj25_3 (可用選的)。將XMLBroker組件的RemoteServer屬性指向DCOMConnection1組
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 木材定金合同范本
- 會計臨時勞務合同范本
- 勞務派遣合同范本購買
- 協(xié)議證明合同范本
- 業(yè)委會與物業(yè)委托合同范本
- 別墅規(guī)劃合同范本
- 區(qū)域保護合同范本
- 農村房子修繕承包合同范本
- 公園門衛(wèi)服務合同范本
- 包裝費合同范本
- 2024年社區(qū)工作者考試時事政治模擬題及答案
- 物業(yè)服務行業(yè)禮儀培訓
- 退市新規(guī)解讀-上海證券交易所、大同證券
- 教育部中國特色學徒制課題:現(xiàn)代職業(yè)教育體系建設背景下中國特色學徒制治理體系與資源配置研究
- 22陳涉世家 司馬遷 公開課一等獎創(chuàng)新教學設計 度部編版初中語文九年級下冊
- 《抗戰(zhàn)中的英雄人物》課件
- 外墻真石漆施工方案
- 森林防火安全生產工作
- 護理工作十四五規(guī)劃
- 《服裝市場營銷》課件
- 網絡安全風險評估報告模板
評論
0/150
提交評論