[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 編程技術 > XML/WML > 正文
XML技術系列講座(9)客戶機與服務器的數據交互(上)
本文出自:http://www.computerworld.com.cn 作者: 北京郵電大學 張劍 (2002-02-11 06:15:00)
1、C/S的通信模式
我們在前面文章中討論客戶機與服務器的數據交互時,數據流的方向總是從服務器到客戶機,很少涉及到客戶機向服務器發送請求並處理返回信息的問題。實際上,在電子商務中,客戶機向服務器發送數據也是一個重要的環節,如用戶填寫的貨物訂單等。
在傳統的實現方案中,用戶端只要在訂單中做出微小的變動,就要向服務器發送消息,要求更新數據。這樣就增加了服務器和網絡的負載,降低了工作效率。更有效的工作方式是在客戶機端對變更的信息進行緩存,然分批定量地發送給服務器,這樣一些不確定的修改信息都首先存儲在客戶機,只有那些確定的需要更新的數據才會發送出去,從而避免了網絡和服務器做許多無謂的操作。
2、基XML的C/S
使用XML進行C/S間的通信是一種高效的工作方式。首先在客戶機對XML數據打包,然以XML數據包為單元發送給服務器,服務器在處理完數據之返回消息,客戶機接收到消息執行其他操作,從而結束一次通信周期。
具體實現步驟如下:
● 客戶機構造一個XMLDOM對象,作為發送XML數據的載體;
● 客戶機創建一個XMLHTTP對象,該對象包括多種方法和屬性,可以發送XML數據到服務器上的應用程序(如ASP頁面),同時準備接收響應信息;
● 客戶機將XML數據包轉載到XMLHTTP對象上並發送給ASP頁面;
● 服務器執行ASP,並創建一個服務器端XMLDOM對象來接收XML數據;
● ASP把數據包裝載到服務器端的XMLDOM對象上;
● ASP對XML數據進行必要的處理,並返回確認消息;
● 客戶機接收響應消息,執行下一步操作。
3、向服務器發送數據
客戶機的首要任務是構造XML數據包。XMLDOM作為數據包的載體其數據來源可以是任何XML文檔或是XML文檔的片段(如XML數據島),甚至可以是使用loadXML方法接收用戶輸入信息動態生成的XML文檔。
下面是動態生成的一個XML文檔:
Set docSubmit = CreateObject(“Microsoft.XMLDOM”)
docSubmit.async = False
docSubmit.loadXML
“<?xml version=‘1.0’?>”&
“<customerorder>” &
“<customer>”&
txtCustomerID.Value &
“</customer>”&
“</customerorder>”
如果用戶輸入“5”作為用戶ID,那上面程序的運行結果如下所示:
<?xml version=‘1.0’?>
<customerorder>
<customer>5</customer>
</customerorder>
接下來,將XML數據添加到DOM樹的<customer>元素之。
比如有如下的一個XML數據島:
<xml id=“dsoOrder”>
<?xml version=“1.0”?>
<order>
<orderitem title=“Sushi, Anyone?” isbn=“72-80081-025”>
<price>14.99</price>
<quantity>2</quantity>
</orderitem>
</order>
</xml>
利用前面介紹的DOM技術訪問<order>元素:
Set docOrder = dsoOrder.XMLDocument
Set nodeOrder = docOrder.selectSingleNode(“//order”)
<order>元素是dsoOrder數據島中的一部分,要把它添加到其他的DOM樹中(比如前面的XML數據包),必須把<order>元素及其所有的繼節點進行備份,這是因為appendChild方法在把操作對象添加到其他DOM樹中,就從當前的DOM樹中刪除該對象!所以必須先調用cloneNode方法:
Set nodeOrderToSend = nodeOrder.cloneNode(True)
docSubmit.documentElement.appendChild nodeOrderToSend
經過以上操作,最形成的數據包為:
<?xml version=“1.0”?>
<customerorder>
<customer>5</customer>
<order>
<orderitem title=“Sushi, Anyone?” isbn=“72-80081-025”>
<price>14.99</price>
<quantity>2</quantity>
</orderitem>
</order>
</customerorder>
4、XMLHTTP對象的Open方法
數據包構造完畢之,就可以利用HTTP Request對象把數據包發送給服務器。MSXML中提供了Microsoft.XMLHTTP對象,能夠完成從數據包到Request對象的轉換以及發送任務。
創建XMLHTTP對象的語句如下:
Set poster = CreateObject(“Microsoft.XMLHTTP”)
對象創建調用Open方法對Request對象進行初始化,語法格式為:
poster.open http-method, url, async, userID, password
Open方法中包含了5個參數,前三個是必要的,兩個是可選的(在服務器需要進行身份驗証時提供)。參數的含義如下表所示:
參數 說明
http-method HTTP的通信方式,比如GET或是 POST
url 接收XML數據的服務器的URL地址。通常在URL中要指明 ASP或CGI程序
async 一個布爾標識,說明請求是否為異步的。如果是異步通信方式,客戶機就不等待服務器的響應;如果是同步方式,客戶機就要等到服務器返回消息才去執行其他操作
userID 用戶ID,用服務器身份驗証
password 用戶密碼,用服務器身份驗証
在下面這個例子中,客戶機就是使用異步方式向“CustomerOrder.asp”頁面發送了一個POST請求:
table>
(http://www.fanqiang.com)     進入【UNIX論壇
poster.open "POST", "CustomerOrder.asp", False

相關文章
XML技術系列講座(13)XML與電子商務 (2002-02-13 06:15:00)
XML技術系列講座(12)驗証XML數據合法性(下) (2002-02-12 07:15:00)
XML技術系列講座(11)驗証XLM數據合法性(上) (2002-02-12 06:15:00)
XML技術系列講座(10)客戶機與服務器的數據交互(下) (2002-02-11 07:15:00)
XML技術系列講座(9)客戶機與服務器的數據交互(上) (2002-02-11 06:15:00)
XML技術系列講座(8)通過DOM操作數據(下) (2002-02-10 07:20:01)
XML技術系列講座(7)通過DOM操作數據(上) (2002-02-09 07:20:00)
XML技術系列講座(6)XML與HTML的結合(下) (2002-02-08 07:15:00)
XML技術系列講座(5)XML與HTML的結合(上) (2002-02-08 06:15:00)
XML技術系列講座(4)XML的顯示XSL樣式單(下) (2002-02-07 07:15:01)

===更多相關===
 

★  樊強制作 歡迎分享  ★