在Web頁面中執(zhí)行Windows程序
當(dāng)前位置:點(diǎn)晴教程→知識管理交流
→『 技術(shù)文檔交流 』
現(xiàn)在許多公司都面臨一個難題:如何在web環(huán)境中執(zhí)行存在的windows應(yīng)用程序。這里就介紹實(shí)現(xiàn)這個功能的技術(shù),它爭取對代碼做最小的改變,完成在windows環(huán)境中應(yīng)做的一切。
這里想要在web中執(zhí)行的windows例子程序是非常簡單的,它是用vb編寫的,其中有一個表單。運(yùn)行時,在表單上顯示雇員的信息,這些信息來源于access數(shù)據(jù)庫的一個表。表單上設(shè)有first、next、previous 和 last按鈕,從而允許用戶瀏覽記錄。同時,還可以通過按鈕add、delete 和 update來改變數(shù)據(jù)。這個程序通過一個com類來與數(shù)據(jù)庫通信,它有下面的方法: addemployee() 在表中添加一個記錄,保存新雇員的信息
程序正常運(yùn)行時,瀏覽器顯示如下:
在傳統(tǒng)的web應(yīng)用程序中,大多數(shù)的處理都是在服務(wù)器端完成的。這里,我們將嘗試在客戶端做一些處理,以減少服務(wù)器上的工作量。也就是,讓客戶端完成顯示信息的處理工作,并將商業(yè)規(guī)則和數(shù)據(jù)庫存取留給服務(wù)器端。這就象一個n層處理模型。 當(dāng)用戶需要訪問另一個不同的數(shù)據(jù)時,我們也不想從服務(wù)器上再調(diào)入整個web頁面,因此,需要找到一個web客戶端在后臺與web服務(wù)器交流信息的方法。這個例子中,我們使用了微軟公司的xmlhttp com對象組件,它是隨internet explorer 5.0而來的。當(dāng)然,也可以編寫一個功能類似的java applet來克服這個局限。
服務(wù)器端的代碼 讓我們從研究vb應(yīng)用程序的com類到web的每一個方法開始,這可以通過編寫asp頁面來調(diào)用com類中的每個方法實(shí)現(xiàn)(addemployee.asp, updateemployee.asp, deleteemployee.asp, getemployee.asp)。 明白了這些,就能夠在web中存取com類方法了。 asp頁面應(yīng)該能夠接受與com類一樣的參數(shù),這些頁面向原始的com類發(fā)送調(diào)用。這里主要的區(qū)別就是所有的輸出是以xml格式的。我們使用另外一個叫xmlconverter的com類,轉(zhuǎn)換方法的輸出為xml格式。xmlconverter的代碼包含在下載文件中,它有一個函數(shù),能夠接受一個ado記錄集做為參數(shù),并且轉(zhuǎn)換為一個xml文檔。實(shí)現(xiàn)這個目的的函數(shù)例子可以從internet上很容易地找到,比如: http://vbxml.com/xml/guides/developers/ado_persist_xml.asp 我們也許曾經(jīng)使用過ado記錄集的save函數(shù),加上adpersistxml,來實(shí)現(xiàn)按照xml格式保存,但是在這里,為了簡單起見,我們?nèi)允褂镁幹频暮瘮?shù)。 下面的代碼來自getemployees.asp,它執(zhí)行g(shù)etemployees方法,從而可以讓你清晰地看到這種技術(shù):
客戶端的代碼 現(xiàn)在準(zhǔn)備編寫客戶端代碼,首先,讓我們仔細(xì)看看vb應(yīng)用程序在調(diào)用后如何顯示信息。在vb表單的on_load方法(參見下面的代碼)中,我們調(diào)用了com對象組件getemployees方法,這個方法返回一個附帶雇員信息的ado記錄集。ado記錄集的movefirst()、movenext()以及 movelast() 方法建立了記錄瀏覽的方法。 private sub form_load() 'obtain the employee records in a adodb.recordset
另一個較好的解決方法是使用純java/javascript,它同時可以在非internet explorer的瀏覽器上應(yīng)用。這里,我們?nèi)允褂脁mlhttp對象,它可以讓web客戶端建立一個到web服務(wù)器的http請求。關(guān)于對xml http的詳細(xì)描述,請參考msdn上的文檔。 //create an xmldom on the web client machine // node pointing at root node of the xml document // node to point at current record // integer pointing at the current record number
//open a http connection to the url in strurl //send the request //obtain the response received to the xmlresponse variable //since the response is an xml document we can load it to an xmldoc object //set noderoot to point at the root of the xml document
function rstmovefirst() { //if the root node does not have any child nodes then there are //set the nodecurrentrecord to point at the 0th child of the //return success
現(xiàn)在我們在客戶機(jī)上創(chuàng)建了一個假冒的ado記錄集對象,因此就可以象在vb應(yīng)用程序中一樣來處理這些“記錄集”。 有了這些函數(shù),剩下的就是編寫用戶界面,這就象在vb應(yīng)用程序中一樣。比如,在vb應(yīng)用程序中,“移動到第1條記錄”后面的代碼是: private sub btnfirst_click() 'move to the first record 'displaycurrentrecord is a function that display the current 'records information end if
function btnfirstclick() { 當(dāng)需要更新實(shí)際的數(shù)據(jù)庫時,就發(fā)送更新信息給updateemployee.asp,這個頁面將通過com對象的updateemployee方法來更新數(shù)據(jù)庫。上面描述的應(yīng)用程序,輸出到web上,將顯示如下圖:
在web應(yīng)用中,要建立適當(dāng)?shù)挠媱潄磙D(zhuǎn)換ado記錄集為xml文檔。一旦定義明確了,象那樣標(biāo)準(zhǔn)的應(yīng)用將很好實(shí)現(xiàn)。另外一個我們想研究的領(lǐng)域是客戶端記錄集的操縱函數(shù)(就是rst*函數(shù))。我們可以編寫java applet來處理這些記錄集操縱函數(shù),從而在客戶端建立了java記錄集對象。這種方法將是很面向?qū)ο蟮囊环N處理方法。 點(diǎn)擊此處下載本文相關(guān)資料: 該文章在 2010/7/7 23:36:08 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |