計(jì)算機(jī)網(wǎng)絡(luò)課件_第1頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)課件_第2頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)課件_第3頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)課件_第4頁(yè)
計(jì)算機(jī)網(wǎng)絡(luò)課件_第5頁(yè)
已閱讀5頁(yè),還剩231頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

指導(dǎo)教師:楊建國(guó)計(jì)算機(jī)網(wǎng)絡(luò)二零一零年三月第八章網(wǎng)絡(luò)應(yīng)用編程(需更新)第一節(jié)網(wǎng)絡(luò)應(yīng)用編程實(shí)例第二節(jié)網(wǎng)絡(luò)編程語(yǔ)言8.1網(wǎng)絡(luò)聊天程序任務(wù)8.1.1任務(wù)描述

VB提供了一系列的網(wǎng)絡(luò)編程控件,利用它們,網(wǎng)絡(luò)編程將成為一件快樂(lè)而簡(jiǎn)單的工作。VB網(wǎng)絡(luò)控件主要有三種:(1)Winsok控件主要用于編制基于TCP/IP或UDP協(xié)議的網(wǎng)絡(luò)應(yīng)用程序。(2)InternetTransfer控件主要以來(lái)傳輸文件,執(zhí)行FTP命令以及登錄服務(wù)器等。(3)WebBrowser用于創(chuàng)建瀏覽器本節(jié)先介紹Winsok控件。3

聊天服務(wù)程序:由客戶端和服務(wù)端兩個(gè)程序組成,采用Winsok控件開發(fā)。這兩個(gè)程序可以在同一臺(tái)計(jì)算機(jī)上運(yùn)行,也可以在網(wǎng)絡(luò)上不同的計(jì)算機(jī)上運(yùn)行。整個(gè)系統(tǒng)的運(yùn)行機(jī)制是:第一步:建立連接主要過(guò)程是:由客戶端程序向服務(wù)端程序發(fā)出連接請(qǐng)求,服務(wù)端程序收到并接受連接請(qǐng)求,至此客戶機(jī)與服務(wù)器創(chuàng)建了數(shù)據(jù)交流通道。第二步:開始聊天主要過(guò)程是:在客戶機(jī)的“發(fā)送的信息”文本框中輸入文字時(shí),服務(wù)器端的“收到的信息”文本框中就會(huì)實(shí)時(shí)地顯示相同的文字,反之亦然。5P215習(xí)題一、填空題1.Winsock控件主要用來(lái)編制TCP/IP或

協(xié)議的通話程序。答案:UDP2.在網(wǎng)絡(luò)編程中最常用的方案是

。答案:客戶機(jī)/服務(wù)器程序(Client/Server)6P215習(xí)題三、問(wèn)答題2.簡(jiǎn)述網(wǎng)絡(luò)聊天程序的運(yùn)行過(guò)程。答:網(wǎng)絡(luò)聊天程序的運(yùn)行過(guò)程是:第一步:建立連接主要過(guò)程是:由客戶端程序向服務(wù)端程序發(fā)出連接請(qǐng)求,服務(wù)端程序收到并接受連接請(qǐng)求,至此客戶機(jī)與服務(wù)器創(chuàng)建了數(shù)據(jù)交流通道。第二步:開始聊天主要過(guò)程是:在客戶機(jī)的“發(fā)送的信息”文本框中輸入文字時(shí),服務(wù)器端的“收到的信息”文本框中就會(huì)實(shí)時(shí)地顯示相同的文字,反之亦然。78.1.3服務(wù)器程序代碼設(shè)計(jì)PrivateSubForm_Load()'設(shè)置偵聽端口WinsockServer.LocalPort=10001

'讀取服務(wù)器的IP地址TxtServerIP.Text=WinsockServer.LocalIP

'開始偵聽WinsockServer.ListenEndSubPrivateSubCommand1_Click()'點(diǎn)擊“退出”按鈕后關(guān)閉應(yīng)用程序UnloadMeEndSub98.1.3服務(wù)器程序代碼設(shè)計(jì)PrivateSubCommand2_Click()'只要txtSend文本框的內(nèi)容寫好以后就由WinsockServer控件發(fā)送WinsockServer.SendDataTxtSend.TextEndSubPrivateSubWinsockServer_ConnectionRequest(ByValrequestIDAsLong)'當(dāng)收到連接請(qǐng)求時(shí),Winsock處于偵聽狀態(tài)'此時(shí)應(yīng)該使用Close方法關(guān)閉Winsock,然后使用Accept方法接受連接請(qǐng)求WinsockServer.CloseWinsockServer.AcceptrequestIDEndSub108.1.3服務(wù)器程序代碼設(shè)計(jì)PrivateSubWinsockServer_DataArrival(ByValBytesTotalAsLong)'當(dāng)客戶端有信息發(fā)送來(lái)時(shí),利用WinsockServer控件的GatData方法讀取數(shù)據(jù)'并將其顯示在txtReceive文本框中DimMyStrAsStringWinsockServer.GetDataMyStrTxtReceive.Text=MyStrEndSub118.1.4.客戶機(jī)的程序代碼設(shè)計(jì)PrivateSubForm_Load()'設(shè)置聊天服務(wù)器的偵聽端口WinsockClient.RemotePort=10001

'讀取本機(jī)的IP地址txtClientIP.Text=WinsockClient.LocalIPEndSubPrivateSubCommand1_Click()'點(diǎn)擊“退出”按鈕后關(guān)閉應(yīng)用程序UnloadMeEndSub138.1.4.客戶機(jī)的程序代碼設(shè)計(jì)PrivateSubCommand2_Click()'根據(jù)txtServerIP文本框中輸入的服務(wù)器IP,連接聊天服務(wù)器WinsockClient.RemoteHost=txtServerIP.TextWinsockClient.ConnectEndSubPrivateSubCommand3_Click()'輸入txtSend文本框的內(nèi)容后由WinsockServer控件發(fā)送WinsockClient.SendDatatxtSend.TextEndSub148.1.4.客戶機(jī)的程序代碼設(shè)計(jì)PrivateSubWinsockClient_Connect()'如果與服務(wù)器連接成功,則向用戶提供下列信息MsgBox"你成功地與聊天服務(wù)器進(jìn)行了連接",vbInformationEndSubPrivateSubWinsockClient_DataArrival(ByValBytesTotalAsLong)'當(dāng)服務(wù)器有信息發(fā)送來(lái)時(shí),利用WinsockClient控件的GatData方法讀取數(shù)據(jù)'并將其顯示在txtReceive文本框中DimMyStrAsStringWinsockClient.GetDataMyStrtxtReceive.Text=MyStrEndSub158.2Winsock控件及網(wǎng)絡(luò)應(yīng)用程序設(shè)計(jì)基礎(chǔ)Winsock控件是建立在TCP協(xié)議的基礎(chǔ)上,能夠完成遠(yuǎn)程計(jì)算機(jī)間的通信,用途非常廣泛。即使我們對(duì)TCP/IP,TCP這些知識(shí)不太熟悉,只要理解了網(wǎng)絡(luò)應(yīng)用程序設(shè)計(jì)的一般原理,并對(duì)Winsock的主要屬性、方法和事件有所了解,也可以在很短時(shí)間內(nèi)創(chuàng)建一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)通信程序。178.2.1Winsock控件的主要屬性Winsock控件主要有八個(gè)屬性:1.BytesReceived屬性:返回接收到的數(shù)據(jù)。通常用GetData方法來(lái)獲取這些數(shù)據(jù)。2.LocalHostName屬性:返回本地計(jì)算機(jī)的名稱。3.LocalIP屬性:返回本地計(jì)算機(jī)的IP地址。4.LocalPost屬性:返回或者設(shè)置所用的端口,如果設(shè)置為0,則使用隨機(jī)端口。5.Protocol屬性:返回或設(shè)置Winsock所用的協(xié)議(TCP或UDP)。6.RemoteHostName屬性,返回或設(shè)置遠(yuǎn)程計(jì)算機(jī)的名稱。7.RemoteHostIP屬性,返回遠(yuǎn)程計(jì)算機(jī)的IP地址。8.State屬性:返回Winsock控件的當(dāng)前狀態(tài)。18Winsock控件的State屬性198.2.2Winsock控件的主要方法Winsock控件的方法主要有六個(gè):1.Listen方法語(yǔ)法:Winsock對(duì)象.Listen作用:使服務(wù)器處于偵聽狀態(tài),等待客戶訪問(wèn)。2.Connect方法語(yǔ)法:Winsock對(duì)象.Connect[遠(yuǎn)程主機(jī)IP,遠(yuǎn)程端口]作用:用于向遠(yuǎn)程主機(jī)發(fā)出連接請(qǐng)求。3.Accept方法語(yǔ)法:Winsock對(duì)象.AcceptRequestID作用:用于接受一個(gè)連接請(qǐng)求,其中RequestID是客戶機(jī)發(fā)來(lái)的請(qǐng)求信號(hào)218.2.2Winsock控件的主要方法Winsock控件的方法主要有六個(gè):4.SendData方法語(yǔ)法:Winsock對(duì)象.SendData數(shù)據(jù)作用:用于發(fā)送數(shù)據(jù)5.GetData方法語(yǔ)法:Winsock對(duì)象.GetData變量[數(shù)據(jù)類型[,最大長(zhǎng)度]作用:用來(lái)獲得接收到的數(shù)據(jù)6.Clcse方法語(yǔ)法:Winsock對(duì)象.Close作用:關(guān)閉當(dāng)前連接22P215習(xí)題二、填空題5.Winsock1.Listen語(yǔ)句的含義是

。答案:LocalIP使服務(wù)器處于偵聽狀態(tài),等待客戶訪問(wèn)。23P214習(xí)題一、單項(xiàng)選擇題1.一旦數(shù)據(jù)到達(dá),將首先觸發(fā)Winsock控件的()。A.DataArrival事件B.ConnectionRequest事件C.DataSand事件D.DataGet事件答案:B25P214習(xí)題一、單項(xiàng)選擇題2.要發(fā)送數(shù)據(jù),通常使用Winsock控件的()。A.SendData方法B.Listen方法C.Accept方法D.GetData方法答案:A26P214習(xí)題一、單項(xiàng)選擇題5.當(dāng)使用SendData將數(shù)據(jù)發(fā)送到主機(jī)后時(shí),將觸發(fā)的Winsock控件的是()。A.SendProgressB.MouseDownC.ClickD.KeyPress答案:A298.2.4網(wǎng)絡(luò)應(yīng)用程序設(shè)計(jì)基礎(chǔ)1.基于Socket的通信過(guò)程Winsock控件是基于Socket接口(套接字)創(chuàng)建的。它是現(xiàn)在TCP/IP網(wǎng)絡(luò)中最通用的API(應(yīng)用程序接口),也是在Internet上進(jìn)行應(yīng)用程序開發(fā)最通用的API。WindowsSocket規(guī)范已成為Windows網(wǎng)絡(luò)編程的標(biāo)準(zhǔn)。Socket在計(jì)算機(jī)中提供了一個(gè)通信端口,可以通過(guò)這個(gè)端口與任何一個(gè)也同樣具有Socket接口的計(jì)算機(jī)進(jìn)行通信。應(yīng)用程序在網(wǎng)絡(luò)上傳輸、接收的信息都通過(guò)這個(gè)Socket接口來(lái)實(shí)現(xiàn)?;赟ocket的通信過(guò)程如下頁(yè)圖所示:30SocketSocket應(yīng)用程序A發(fā)送發(fā)送接收接收應(yīng)用程序B通信細(xì)節(jié)利用Socket進(jìn)行網(wǎng)絡(luò)編程,只需對(duì)Socket接口進(jìn)行數(shù)據(jù)的讀寫操作,根本不必關(guān)心兩臺(tái)計(jì)算機(jī)間的通信細(xì)節(jié)就能夠完成數(shù)據(jù)的發(fā)送和接收工作。31SocketSocket應(yīng)用程序A發(fā)送發(fā)送接收接收應(yīng)用程序B通信細(xì)節(jié)利用Socket進(jìn)行網(wǎng)絡(luò)編程,只需對(duì)Socket接口進(jìn)行數(shù)據(jù)的讀寫操作,根本不必關(guān)心兩臺(tái)計(jì)算機(jī)間的通信細(xì)節(jié)就能夠完成數(shù)據(jù)的發(fā)送和接收工作。P215習(xí)題三問(wèn)答題1.簡(jiǎn)述基于Socket的通信過(guò)程。322.基于Winsock控件的開發(fā)模式VB提供的Winsock控件正是基于Socket規(guī)范創(chuàng)建的。利用Winsock控件開發(fā)網(wǎng)絡(luò)通信系統(tǒng)時(shí),通常要涉及到服務(wù)器和客戶機(jī)兩類應(yīng)用程序:(1)服務(wù)器程序的開發(fā)模式服務(wù)器程序必須設(shè)置好LocalPort屬性,作為偵聽端口。該值可設(shè)置成任何一個(gè)整數(shù),只要其它應(yīng)用程序沒(méi)有使用過(guò)的值即可,單習(xí)慣上應(yīng)大于1000。使用Listen方法使服務(wù)器進(jìn)入偵聽狀態(tài),等待客戶機(jī)的連接請(qǐng)求。332.基于Winsock控件的開發(fā)模式(1)服務(wù)器程序的開發(fā)模式客戶機(jī)程序發(fā)出連接請(qǐng)求后,將觸發(fā)服務(wù)器程序的ConnectionRequest事件,該事件得到一個(gè)參數(shù)RequestID。服務(wù)器程序使用Accept方法接受客戶機(jī)程序的RequestID請(qǐng)求。至此,服務(wù)器程序就可以使用SendData方法向客戶機(jī)發(fā)送數(shù)據(jù)了。當(dāng)服務(wù)器接收到數(shù)據(jù)時(shí),會(huì)產(chǎn)生DataArrival事件。在該事件中可使用GetData方法接收數(shù)據(jù)。34(2)客戶機(jī)程序的開發(fā)模式

●首先設(shè)置好RemoteHost屬性,用來(lái)指向運(yùn)行服務(wù)器程序的遠(yuǎn)程計(jì)算機(jī)的的主機(jī)名或IP地址。

●設(shè)置RemotePort屬性,用來(lái)指向服務(wù)器程序的偵聽端口號(hào)。

●使用Connect方法向服務(wù)器提出連接請(qǐng)求。

●如果服務(wù)器接受了上述請(qǐng)求,客戶機(jī)程序就會(huì)產(chǎn)生Connect事件,可以根據(jù)需要,在此事件中編寫程序,比如使用MsgBox函數(shù)向用戶提示“連接已成功”之類的信息。

●連接成功后,就可以根據(jù)需要使用SendData方法向服務(wù)器發(fā)送數(shù)據(jù)了。

●當(dāng)客戶機(jī)程序接收的數(shù)據(jù)時(shí),就會(huì)產(chǎn)生DataArrival事件,可以用GetData方法接收數(shù)據(jù)。35P215習(xí)題三、問(wèn)答題3.簡(jiǎn)述基于Winsock控件的開發(fā)過(guò)程。答:1)服務(wù)器程序的開發(fā)模式服務(wù)器程序必須設(shè)置好LocalPort屬性,作為偵聽端口。使用Listen方法使服務(wù)器進(jìn)入偵聽狀態(tài),等待客戶機(jī)的連接請(qǐng)求??蛻魴C(jī)程序發(fā)出連接請(qǐng)求后,將觸發(fā)服務(wù)器程序的ConnectionRequest事件,該事件得到一個(gè)參數(shù)RequestID。服務(wù)器程序使用Accept方法接受客戶機(jī)程序的RequestID請(qǐng)求。至此,服務(wù)器程序就可以使用SendData方法向客戶機(jī)發(fā)送數(shù)據(jù)了。當(dāng)服務(wù)器接收到數(shù)據(jù)時(shí),會(huì)產(chǎn)生DataArrival事件。在該事件中可使用GetData方法接收數(shù)據(jù)。36P215習(xí)題三、問(wèn)答題3.簡(jiǎn)述基于Winsock控件的開發(fā)過(guò)程。2)客戶機(jī)程序的開發(fā)模式首先設(shè)置好RemoteHost屬性,用來(lái)指向運(yùn)行服務(wù)器程序的遠(yuǎn)程計(jì)算機(jī)的的主機(jī)名或IP地址。設(shè)置RemotePort屬性,用來(lái)指向服務(wù)器程序的偵聽端口號(hào)。使用Connect方法向服務(wù)器提出連接請(qǐng)求。如果服務(wù)器接受了上述請(qǐng)求,客戶機(jī)程序就會(huì)產(chǎn)生Connect事件。連接成功后,就可以根據(jù)需要使用SendData方法向服務(wù)器發(fā)送數(shù)據(jù)了。當(dāng)客戶機(jī)程序接收的數(shù)據(jù)時(shí),就會(huì)產(chǎn)生DataArrival事件,可以用GetData方法接收數(shù)據(jù)。378.3其它網(wǎng)絡(luò)應(yīng)用程序設(shè)計(jì)8.3.1局域網(wǎng)中保證聯(lián)網(wǎng)計(jì)算機(jī)時(shí)間同步當(dāng)采用客戶機(jī)/服務(wù)器模式在局域網(wǎng)上開發(fā)系統(tǒng)時(shí),必須保證所有計(jì)算機(jī)的時(shí)鐘時(shí)間一致。在就需要用到統(tǒng)一的時(shí)間,以便協(xié)調(diào)工作,最號(hào)的方法就是通過(guò)程序的方法,解決時(shí)鐘同步的問(wèn)題。38數(shù)據(jù)服務(wù)器MyServer應(yīng)用程序1應(yīng)用程序2應(yīng)用程序n……這是某一應(yīng)用系統(tǒng)的網(wǎng)絡(luò)拓補(bǔ)結(jié)構(gòu),我們可以采用Winsock控件解決眾多客戶機(jī)與數(shù)據(jù)服務(wù)器間的時(shí)間同步問(wèn)題。39解決時(shí)鐘同步的基本思路是:首先精確調(diào)整服務(wù)器的時(shí)鐘,然后,當(dāng)客戶機(jī)啟動(dòng)時(shí)與服務(wù)器連接,并與服務(wù)器“對(duì)時(shí)”。這樣,每當(dāng)執(zhí)行應(yīng)用程序時(shí),客戶機(jī)就會(huì)與服務(wù)器時(shí)鐘同步了。404.如何保證局域網(wǎng)中聯(lián)網(wǎng)的計(jì)算機(jī)同步運(yùn)行?答:解決時(shí)鐘同步的基本思路是:首先精確調(diào)整服務(wù)器的時(shí)鐘,然后,當(dāng)客戶機(jī)啟動(dòng)時(shí)與服務(wù)器連接,并與服務(wù)器“對(duì)時(shí)”。這樣,每當(dāng)執(zhí)行應(yīng)用程序時(shí),客戶機(jī)就會(huì)與服務(wù)器時(shí)鐘同步了。P215習(xí)題三、問(wèn)答題

411.客戶機(jī)程序的主要代碼(1)與服務(wù)器建立連接在客戶機(jī)主窗體的Load事件中連接服務(wù)器程序,具體方法與聊天程序相同。PrivateSubForm_Load()'設(shè)置聊天服務(wù)器的偵聽端口WinsockClient.RemotePort=10001'讀取本機(jī)的IP地址txtClientIP.Text=WinsockClient.LocalIP'根據(jù)txtServerIP文本框中輸入的服務(wù)器IP,連接聊天服務(wù)器WinsockClient.RemoteHost=txtServerIP.TextWinsockClient.Connect'如果與服務(wù)器連接成功,則向用戶提供下列信息MsgBox"你成功地與聊天服務(wù)器進(jìn)行了連接",EndSub42(2)其它代碼PrivateSubWinsockClient_DataArrival(ByValbytesTotal)’當(dāng)收到服務(wù)器發(fā)來(lái)的數(shù)據(jù)時(shí),完成以下工作:’(1)日期數(shù)據(jù)類型接收數(shù)據(jù);’(2)設(shè)置本機(jī)的系統(tǒng)日期’定義一個(gè)日期類型數(shù)據(jù)變量DimMyDateAsDate

’以日期數(shù)據(jù)類型接受服務(wù)器日期數(shù)據(jù)WinsockClient.GetDataMyDate,VbDate

’使本機(jī)的系統(tǒng)日期等于服務(wù)器日期Date=MyDateEndSub432.服務(wù)端程序主要代碼PrivateSubWinsockServer_ConnectionRequest_(ByValRequestIDAsLong)’當(dāng)收到客戶機(jī)的連接請(qǐng)求時(shí),完成以下工作:’(1)結(jié)束Winsock的偵聽狀態(tài);’(2)接受連接請(qǐng)求;’(3)將服務(wù)器的系統(tǒng)日期發(fā)送給客戶機(jī)WinsockServer.CloseWinsockServer.AcceptRequestID

’將系統(tǒng)當(dāng)前的時(shí)間Date發(fā)送給提出請(qǐng)求的客戶機(jī)WinsockServer.SendDateEndSub448.3.2Web瀏覽器1.一個(gè)簡(jiǎn)單的瀏覽器應(yīng)用程序示例(1)創(chuàng)建一個(gè)新的“標(biāo)準(zhǔn)EXE”工程。利用“工程”菜單的“部件”選項(xiàng)添加“WindowsInternetControls”以獲得對(duì)WebBrowser控件的支持。(2)在Form1窗口上添加Text1、Command1和WebBrowser1等控件。(3)在Command1控件的Click事件中,添加如下代碼:PrivateSubCommand1_Click()’連接要瀏覽的網(wǎng)站地址WebBrowser1.NavigateText1.TextEndSub(4)運(yùn)行程序。在Text1輸入網(wǎng)址后,單擊Command1連接按鈕,即可進(jìn)入有關(guān)網(wǎng)頁(yè)。(演示)452.一個(gè)較完整的瀏覽器應(yīng)用程序一個(gè)真正的瀏覽器(比如IE)至少需要后退(Back)、前進(jìn)(Forword)、停止(Stop)、刷新(Refresh)、主頁(yè)(Home)和搜索(Search)等功能按鈕,還能夠顯示當(dāng)前網(wǎng)頁(yè)的下載速度。要完成這些工作,就必須深入學(xué)習(xí)WebBrowser控件的有關(guān)知識(shí)。46(1)LocationURL和LocationName屬性LocationURL屬性返回裝入網(wǎng)頁(yè)的地址,LocationName屬性則返回當(dāng)前裝入網(wǎng)頁(yè)的標(biāo)題。它們均是只讀的,不能通過(guò)VB程序改變其值。(2)ProgressChange事件下載網(wǎng)頁(yè)通常會(huì)花費(fèi)一定的時(shí)間,可利用ProgressChange事件了提醒用戶當(dāng)前下載的進(jìn)度。只要網(wǎng)頁(yè)正在下載,改事件就會(huì)被周期性地觸發(fā)。可將該事件與Progress控件結(jié)合使用,實(shí)現(xiàn)下載進(jìn)度條提示效果。(3)停止網(wǎng)頁(yè)下載的方法當(dāng)用戶覺(jué)得下載一個(gè)網(wǎng)頁(yè)花費(fèi)的時(shí)間太長(zhǎng)而想終止下載時(shí),可使用Stop方法。47(4)后退與前進(jìn)的方法如果要實(shí)現(xiàn)大多數(shù)瀏覽器所具有的后退與前進(jìn)功能,則可以使用GoBack,GoForword方法。這兩個(gè)方法的基本原理是:對(duì)Windows目錄下的History文件夾進(jìn)行搜索,重新調(diào)出已查看過(guò)的HTMT頁(yè)面緩存,從而完成后退與前進(jìn)的功能。但如果要得到當(dāng)前網(wǎng)頁(yè)的最新內(nèi)容,則要使用Refresh方法進(jìn)行刷新。此外,如果想要在自己的瀏覽器程序中加入主頁(yè),搜索等功能,則可以使用GoHome,GoSearch方法。(5)DownLoadBegin和DownLoadComplete事件當(dāng)網(wǎng)頁(yè)下載工作開始和結(jié)束時(shí),分別觸發(fā)這兩個(gè)事件。這兩個(gè)事件通常與ProgressChange事件結(jié)合使用,起到提示用戶的作用。48演示程序“Web瀏覽器”49

網(wǎng)絡(luò)編程技術(shù)2023/2/6徐敏

User:xuminPassword:23250參考書籍WindowsSockets網(wǎng)絡(luò)程序設(shè)計(jì)大全清華大學(xué)出版社蔣東興等編著Windows網(wǎng)絡(luò)編程技術(shù)機(jī)械工業(yè)出版社AnthonyJones/JimOhlundMicrosoftPressVisualc++網(wǎng)絡(luò)通信程序開發(fā)指南機(jī)械工業(yè)出版社郎銳羅發(fā)根編著51課程簡(jiǎn)介

網(wǎng)絡(luò)編程是指利用網(wǎng)絡(luò)編程接口來(lái)編寫在網(wǎng)絡(luò)上交換信息的應(yīng)用程序。本課程主要講授帶有共性的網(wǎng)絡(luò)編程的原理和方法,并在windows下對(duì)網(wǎng)絡(luò)程序設(shè)計(jì)的各種方法進(jìn)行實(shí)踐。52第一章緒論531-1概述

計(jì)算機(jī)網(wǎng)絡(luò)程序設(shè)計(jì)就是利用網(wǎng)絡(luò)應(yīng)用編程接口編寫網(wǎng)絡(luò)應(yīng)用程序,實(shí)現(xiàn)網(wǎng)絡(luò)應(yīng)用進(jìn)程間的信息交互功能。應(yīng)用進(jìn)程間的通信可以分為兩種:同一系統(tǒng)上的應(yīng)用進(jìn)程間的通信(IPC)實(shí)現(xiàn)方法:文件、管道、消息隊(duì)列、共享存儲(chǔ)段和信號(hào)燈不同系統(tǒng)上的進(jìn)程間的通信計(jì)算機(jī)網(wǎng)絡(luò)程序設(shè)計(jì)就是利用網(wǎng)絡(luò)應(yīng)用編程接口編寫網(wǎng)絡(luò)應(yīng)用程序,實(shí)現(xiàn)網(wǎng)絡(luò)應(yīng)用進(jìn)程間的信息交互功能。學(xué)習(xí)網(wǎng)絡(luò)編程,必須具備操作系統(tǒng)、計(jì)算機(jī)網(wǎng)絡(luò)、以及編程語(yǔ)言基礎(chǔ)。541.2網(wǎng)絡(luò)服務(wù)

應(yīng)用層傳輸層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層55應(yīng)用程序訪問(wèn)TCP/IP協(xié)議提供的服務(wù)來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)上進(jìn)程間的通信。網(wǎng)絡(luò)應(yīng)用編程的目的是如何利用各協(xié)議層所提供的功能實(shí)現(xiàn)用戶的應(yīng)用.通過(guò)應(yīng)用編程接口訪問(wèn)某一協(xié)議層提供的服務(wù),事實(shí)上還需要間接用到其下各層提供的服務(wù)。56571-2-1傳輸層服務(wù)傳輸層的任務(wù)是根據(jù)下面通信子網(wǎng)的特性最佳地利用網(wǎng)絡(luò)資源,并以可靠和經(jīng)濟(jì)的方式為兩端主機(jī)上的進(jìn)程之間透明地傳送報(bào)文。TCP/IP協(xié)議棧中的兩個(gè)最主要的傳輸層協(xié)議是TCP和UDP。TCP提供可靠的、有序的、端到端的數(shù)據(jù)傳輸服務(wù)。UDP則提供的是不可靠的、不保證有序到達(dá)的、端到端的數(shù)據(jù)傳輸服務(wù)。581-2-2數(shù)據(jù)鏈路層服務(wù)數(shù)據(jù)鏈路層負(fù)責(zé)在兩個(gè)相鄰結(jié)點(diǎn)間的鏈路上,無(wú)差錯(cuò)地傳送以幀為單位的數(shù)據(jù)。數(shù)據(jù)鏈路層要負(fù)責(zé)建立、維護(hù)和釋放數(shù)據(jù)鏈路的連接。在傳送數(shù)據(jù)時(shí),若接收結(jié)點(diǎn)檢測(cè)到數(shù)據(jù)有差錯(cuò),就要通知發(fā)方重發(fā)這一幀,直到這一幀正確到達(dá)接收結(jié)點(diǎn)為止。591-3網(wǎng)絡(luò)應(yīng)用編程接口網(wǎng)絡(luò)應(yīng)用編程接口(API)是網(wǎng)絡(luò)應(yīng)用程序訪問(wèn)網(wǎng)絡(luò)協(xié)議提供的服務(wù)的橋梁。流行的網(wǎng)絡(luò)應(yīng)用編程接口Berkeley插口APIBerkeley插口是在1983年由4.2BSDUnix引入的網(wǎng)絡(luò)編程接口WindowsSocketsWinSock是以Berkeley插口API為范例定義的一套MicrosoftWindows下的網(wǎng)絡(luò)編程接口60可視化編程環(huán)境下的網(wǎng)絡(luò)控件在VC、VB、Delphi、PowerBuilder等可視化編程工具中,大部分網(wǎng)絡(luò)編程都是通過(guò)網(wǎng)絡(luò)控件來(lái)進(jìn)行的其它網(wǎng)絡(luò)編程接口遠(yuǎn)程過(guò)程調(diào)用(RPC)是由本地系統(tǒng)上的進(jìn)程激活遠(yuǎn)程系統(tǒng)上的進(jìn)程,由遠(yuǎn)程過(guò)程完成某項(xiàng)任務(wù)后將結(jié)果返回給本地進(jìn)程。611-4網(wǎng)絡(luò)編程模式網(wǎng)絡(luò)編程模式一般采用客戶-服務(wù)器模式;大多數(shù)應(yīng)用系統(tǒng)由兩部分組成:客戶(client)和服務(wù)器(Server);客戶和服務(wù)器的通信關(guān)系一旦建立,它們就可以相互接收和發(fā)送消息;根據(jù)實(shí)現(xiàn)方式的不同,服務(wù)器分為串行服務(wù)器和并發(fā)服務(wù)器;并發(fā)服務(wù)器又可分為預(yù)先創(chuàng)建服務(wù)子進(jìn)程并發(fā)服務(wù)器預(yù)先創(chuàng)建服務(wù)線程并發(fā)服務(wù)器按需創(chuàng)建服務(wù)子進(jìn)程并發(fā)服務(wù)器按需創(chuàng)建服務(wù)線程并發(fā)服務(wù)器621-5網(wǎng)絡(luò)編程要考慮的問(wèn)題 網(wǎng)絡(luò)程序設(shè)計(jì)因?yàn)樯婕暗讲煌脚_(tái)之間的信息交互,它比單機(jī)上的程序設(shè)計(jì)要復(fù)雜很多,以下問(wèn)題需要注意:并發(fā)環(huán)境下的網(wǎng)絡(luò)編程異構(gòu)環(huán)境下的網(wǎng)絡(luò)編程阻塞與非阻塞通信服務(wù)類型的選擇631-5-1并發(fā)環(huán)境下的網(wǎng)絡(luò)編程在多進(jìn)程或多線程應(yīng)用中,涉及到資源共享、進(jìn)程或線程間的同步,因而更復(fù)雜。在多進(jìn)程或多線程應(yīng)用中,使用的系統(tǒng)調(diào)用或函數(shù)必須是可重入的。(所謂可重入函數(shù)是指一個(gè)可以被多個(gè)任務(wù)調(diào)用的過(guò)程,任務(wù)在調(diào)用時(shí)不必?fù)?dān)心數(shù)據(jù)是否會(huì)出錯(cuò)。)對(duì)于不可重入的調(diào)用或函數(shù),系統(tǒng)如果沒(méi)有提供多線程安全的版本,程序員需要避免使用或自己編寫相應(yīng)的函數(shù)。641-5-2異構(gòu)環(huán)境下的網(wǎng)絡(luò)編程 網(wǎng)絡(luò)通信常常是在不同的操作系統(tǒng)之間運(yùn)行,所以網(wǎng)絡(luò)應(yīng)用程序必須考慮不同的OS之間的差異,尤其是不同OS上的數(shù)據(jù)格式的差異。字節(jié)順序大數(shù)在前的字節(jié)順序:指將一個(gè)多字節(jié)數(shù)的高序字節(jié)存儲(chǔ)在內(nèi)存的起始地址小數(shù)在前的字節(jié)順序:指將一個(gè)多字節(jié)數(shù)的低序字節(jié)存儲(chǔ)在內(nèi)存的起始地址字的長(zhǎng)度不同的OS對(duì)于相同的數(shù)據(jù)類型可能有不同的表示長(zhǎng)度。字節(jié)邊界問(wèn)題不同的OS對(duì)相同的數(shù)據(jù)類型打包方式不相同,因?yàn)樗鼈兊亩ń缦拗撇灰粯印?5例如:結(jié)構(gòu)struct{chara;intb}解決方法方法一:對(duì)于具有相同字節(jié)順序的OS,通信雙方均以單字節(jié)定界;對(duì)于具有不同字節(jié)順序的OS,顯示地定義格式(位數(shù)、字節(jié)順序類型)方法二:將需要發(fā)送的消息的結(jié)構(gòu)在發(fā)送前變換成一種統(tǒng)一的格式,到達(dá)接收方后再執(zhí)行相反的過(guò)程。661-5-3阻塞與非阻塞通信阻塞模式通信:利用TCP協(xié)議發(fā)送一個(gè)報(bào)文時(shí),如果低層協(xié)議沒(méi)有可用空間來(lái)存放用戶數(shù)據(jù),則應(yīng)用進(jìn)程將阻塞等待直到協(xié)議有可用的空間;在應(yīng)用進(jìn)程調(diào)用接收函數(shù)接收?qǐng)?bào)文時(shí),若沒(méi)有到達(dá)的數(shù)據(jù),則調(diào)用將一直阻塞直到有數(shù)據(jù)到達(dá)或出錯(cuò);對(duì)于面向連接的協(xié)議,如果沒(méi)有連接請(qǐng)求到達(dá),則等待連接調(diào)用將阻塞直到有連接請(qǐng)求到達(dá);67非阻塞模式通信利用TCP協(xié)議發(fā)送一個(gè)報(bào)文時(shí),如果低層協(xié)議沒(méi)有可用空間來(lái)存放用戶數(shù)據(jù),調(diào)用將直接返回而不需等待;在應(yīng)用進(jìn)程調(diào)用接收函數(shù)接收?qǐng)?bào)文時(shí),若沒(méi)有到達(dá)的數(shù)據(jù),則調(diào)用將直接返回而不需等待;對(duì)于面向連接的協(xié)議,如果沒(méi)有連接請(qǐng)求到達(dá),等待連接調(diào)用將直接返回;68兩種通信方式的優(yōu)缺點(diǎn)在非阻塞模式下,應(yīng)用程序不斷地輪詢查看是否有數(shù)據(jù)到達(dá)或有連接請(qǐng)求到達(dá)。這種輪詢方式比其他的技術(shù)耗費(fèi)更多的CPU時(shí)間,因而要盡量避免使用,可以采用多路復(fù)用技術(shù)來(lái)解決這一問(wèn)題阻塞模式的缺點(diǎn)是進(jìn)程或線程在執(zhí)行I/O操作時(shí)將被阻塞而不能執(zhí)行其它的工作,所以在單進(jìn)程或單線程應(yīng)用中不能使用這種模式,在多線程應(yīng)用中比較適合采用阻塞模式,一個(gè)線程被阻塞不影響其它線程的工作691-5-4服務(wù)類型的選擇從通信的角度看,網(wǎng)絡(luò)協(xié)議棧中的各層所提供的服務(wù)可以分為兩大類:面向連接服務(wù)與無(wú)連接服務(wù)面向連接服務(wù):所謂連接,就是兩個(gè)對(duì)等實(shí)體為進(jìn)行數(shù)據(jù)通信而進(jìn)行的一種結(jié)合。在數(shù)據(jù)交換之前,必須先建立連接;當(dāng)數(shù)據(jù)交換結(jié)束后,而應(yīng)終止這個(gè)連接;面向連接服務(wù)過(guò)程分為三個(gè)階段:連接建立、數(shù)據(jù)傳輸和連接釋放;在TCP/IP協(xié)議棧中,TCP協(xié)議提供面向連接的服務(wù)。70無(wú)連接服務(wù):無(wú)連接服務(wù)指的是兩個(gè)實(shí)體之間的通信不需要先建立好一條連接,其所需的下層資源在數(shù)據(jù)傳輸時(shí)動(dòng)態(tài)地進(jìn)行分配無(wú)連接服務(wù)的優(yōu)點(diǎn)是靈活方便和效率高;但它不能防止報(bào)文的丟失、重復(fù)或失序無(wú)連接服務(wù)又可分為三種類型:數(shù)據(jù)報(bào):不需要接收端做任何響應(yīng)證實(shí)交付:這種服務(wù)對(duì)每一個(gè)報(bào)文都產(chǎn)生一個(gè)證實(shí)給發(fā)方,不過(guò)這個(gè)證實(shí)不是來(lái)自接收端的用戶而是來(lái)自提供服務(wù)的協(xié)議層。請(qǐng)求應(yīng)答:這種服務(wù)對(duì)每一個(gè)報(bào)文都產(chǎn)生一個(gè)證實(shí)給發(fā)方,不過(guò)這個(gè)證實(shí)是來(lái)自接收端的用戶。71項(xiàng)目\服務(wù)類型面向連接服務(wù)無(wú)連接服務(wù)端到端的連接必須有不需要目的站地址僅在連接建立階段使用每個(gè)分組都要有目的站的完整地址路由選擇在連接建立時(shí)確定每個(gè)分組獨(dú)立選擇路由分組的順序總是按發(fā)送順序到達(dá)目的站到達(dá)目的站的順序可能與發(fā)送順序不同端端排序由通信子網(wǎng)負(fù)責(zé)由主機(jī)負(fù)責(zé)端端的差錯(cuò)處理和端端的流量控制由通信子網(wǎng)負(fù)責(zé)由主機(jī)負(fù)責(zé)靈活性差好可靠性好差效率低高適用場(chǎng)合適合有許多連續(xù)報(bào)文且要求可靠、有序地?cái)?shù)據(jù)發(fā)送適合少量零星報(bào)文、且可靠性要求不高的數(shù)據(jù)傳送兩種服務(wù)的比較72小結(jié) 本章我們學(xué)習(xí)了計(jì)算機(jī)網(wǎng)絡(luò)程序設(shè)計(jì)中的一些基本概念、內(nèi)容和方法,包括:網(wǎng)絡(luò)應(yīng)用程序所訪問(wèn)的網(wǎng)絡(luò)服務(wù)網(wǎng)絡(luò)程序設(shè)計(jì)模式網(wǎng)絡(luò)程序設(shè)計(jì)所依賴的網(wǎng)絡(luò)應(yīng)用編程接口網(wǎng)絡(luò)程序設(shè)計(jì)要特別考慮的問(wèn)題73ServerClientServiceshttp(80)SMTP(25))telnet(23)74網(wǎng)絡(luò)編程語(yǔ)言沈衛(wèi)平75762008編程語(yǔ)言走勢(shì)解盤Java類語(yǔ)言:Java似乎會(huì)逐漸走下坡。J2ME會(huì)受到GoogleAndroid、AdobeFlashLite、.NETCompactFramework的影響;J2SE的對(duì)手則是.NET和AIR;J2EE在中小型網(wǎng)站受到PHP、Ruby-on-Rails(RoR)很大的沖擊。幸好,目前大型企業(yè)好像還是買J2EE的帳。在J2ME和J2SE方面,未來(lái)似乎可以用JavaFX奮力一搏;在J2EE方面,也有Groovy/Grails可以抵擋RoR。尤其目前大家懷疑PHP和RoR只適合用在中小型網(wǎng)站,大型企業(yè)網(wǎng)站似乎還是用J2EE比較安心,Groovy/Grails可以保障大家在J2EE上既有的投資。如果你是Java愛(ài)好者,最近有點(diǎn)想改用RoR,那么你可以去看看Grails,或許你會(huì)因此想繼續(xù)留在Java陣營(yíng)。772008編程語(yǔ)言走勢(shì)解盤PHP語(yǔ)言:因?yàn)镻HP對(duì)初學(xué)者相當(dāng)友善,所以過(guò)去這幾年使用者數(shù)量增加快速,但是似乎已經(jīng)到達(dá)瓶頸,這可能是RoR造成的。隨著RoR推出新版,PHP會(huì)受到更大的挑戰(zhàn)。連開發(fā)工具廠商CodeGear都在2007年推出Ruby和PHP的開發(fā)工具,顯見這兩個(gè)語(yǔ)言似乎都會(huì)逐漸走入企業(yè)市場(chǎng)。Python語(yǔ)言:Python早就移植到.NET和Java,2008年會(huì)持續(xù)推出修訂版本,而且也會(huì)推出全新的Python3000。Python3000不以相容于2.x版為目的,而是要運(yùn)用過(guò)去培養(yǎng)出來(lái)的經(jīng)驗(yàn),徹底翻新Python。目前Python編程員的需求也已經(jīng)超越Perl。782008編程語(yǔ)言走勢(shì)解盤Perl語(yǔ)言:目標(biāo)遠(yuǎn)大是一件好事,但目標(biāo)遠(yuǎn)大卻沒(méi)有足夠的資源可以完成目標(biāo),就會(huì)陷入絕境。Perl6就是這樣的例子,它比.NET更早提出,但這幾年下來(lái),.NET已經(jīng)從1.0進(jìn)入到3.5,Perl6卻連1.0都還沒(méi)誕生。Perl擅長(zhǎng)文字?jǐn)?shù)據(jù)處理,但是在大部分語(yǔ)言都支持RegularExpression,加上文字?jǐn)?shù)據(jù)大量XML化之后,Perl的優(yōu)勢(shì)已經(jīng)消失大半。Ruby語(yǔ)言:Ruby可能會(huì)在2008年推出2.0,加上2007年底已經(jīng)推出的RoR2.0,Ruby整個(gè)就是一股擋不住的氣勢(shì)??赡茉?008年底之前,Ruby在TIOBE的排行榜上就會(huì)超越Perl,只剩下Python和PHP這兩個(gè)對(duì)手了。792008編程語(yǔ)言走勢(shì)解盤JavaScript語(yǔ)言:Web應(yīng)用蔚為主流,而JavaScript又是瀏覽器的標(biāo)準(zhǔn)語(yǔ)言,所以這幾年來(lái)相當(dāng)受到重視。在Adobe推出AIR,Mozilla推出Prism之后,JavaScript可以開發(fā)出「某些種類」的桌面應(yīng)用,JavaScript的用途變得更廣。而JavaScript的兄弟ActionScript,隨著AIR的推出又會(huì)更受歡迎一些,但是Silverlight的推出,又會(huì)抵銷ActionScript成長(zhǎng)力道。802008編程語(yǔ)言走勢(shì)解盤C語(yǔ)言:系統(tǒng)語(yǔ)言語(yǔ)言方面,C語(yǔ)言的地位還是一樣重要,C++則會(huì)慢慢走下坡;D語(yǔ)言崛起,將會(huì)接收相當(dāng)多原來(lái)C++的使用者,而Delphi則是一蹶不振,當(dāng)年Delphi/Kylix跨Windows/Linux的美夢(mèng)已然消失。D語(yǔ)言:多年來(lái),D語(yǔ)言平均一個(gè)月推出兩個(gè)版本,改版速度相當(dāng)快,在2007年1月推出1.0版后,不出幾個(gè)月,又推出2.0版。1.0版持續(xù)做bug修訂,盡量不加新特色,2.0版則繼續(xù)進(jìn)行實(shí)驗(yàn)性的翻修。雖然D語(yǔ)言1.0才正式推出1年,但已經(jīng)成為相當(dāng)受歡迎的系統(tǒng)語(yǔ)言,可惜至今仍然沒(méi)有很好用的IDE。812008編程語(yǔ)言走勢(shì)解盤Lua、PowerShell、Erlang語(yǔ)言:可說(shuō)是未來(lái)幾年竄升力道最強(qiáng)的潛力之星,但都還不至于成為主流語(yǔ)言。Lua是相當(dāng)小的語(yǔ)言,適合嵌入其他的環(huán)境中,和其他語(yǔ)言一同使用,根據(jù)TIOBE開發(fā)語(yǔ)言排行榜數(shù)據(jù)顯示,這幾年Lua越來(lái)越受到重視,尤其2007年Lua更是往上猛竄二十幾個(gè)名次,由此可見Lua的需求大增。隨著WindowsVista系統(tǒng)的出貨,未來(lái)幾年P(guān)owerShell會(huì)成為相當(dāng)重要的系統(tǒng)管理語(yǔ)言。目前的多核心環(huán)境、網(wǎng)絡(luò)分布式計(jì)算、容錯(cuò)的需求,則讓Erlang持續(xù)受到重視。822008編程語(yǔ)言走勢(shì)解盤在2007年第三季,AppleiPhone在美國(guó)的Smartphone市場(chǎng)占有率已經(jīng)到達(dá)27%,超過(guò)WindowsMobile。繼美洲和歐洲之后,2008年iPhone會(huì)在亞洲開始販賣,并推出第二代機(jī)種,也預(yù)計(jì)在2008年推出SDK(軟件開發(fā)工具包),讓我們可以為iPhone寫原生(Native)程序。所以,如果你需要為Smartphone開發(fā)應(yīng)用,除了考慮WindowsMobile之外,你也必須思考是否要用Objective-C語(yǔ)言開發(fā)的MacOS應(yīng)用了(iPhone使用精簡(jiǎn)版的MacOSX)。832008編程語(yǔ)言走勢(shì)解盤轉(zhuǎn)換語(yǔ)言的成本通常很高,所以一年之內(nèi),各個(gè)語(yǔ)言通常不會(huì)有太大的興衰變化,這里是描述以2008為中心,前后數(shù)年期間各類編程語(yǔ)言的整體狀況;把時(shí)間拉長(zhǎng),發(fā)展態(tài)勢(shì)會(huì)比較明顯,不受到短期震蕩的影響,預(yù)測(cè)未來(lái)就不至于太過(guò)離譜,讓大家當(dāng)作未來(lái)選擇語(yǔ)言的參考。84WEB2.0互聯(lián)網(wǎng)下一步,是要讓所有的人都忙起來(lái),全民織網(wǎng),然后用軟件,機(jī)器的力量使這些信息更容易被需要的人找到和瀏覽。如果說(shuō)WEB1.0是以數(shù)據(jù)為核心的網(wǎng),那WEB2.0是以人為出發(fā)點(diǎn)的互聯(lián)網(wǎng)。我們看一看最近的一些WEB2.0產(chǎn)品,就可以理解以上觀點(diǎn)。

Blog:用戶織網(wǎng),發(fā)表新知識(shí),和其他用戶內(nèi)容鏈接,進(jìn)而非常自然的組織這些內(nèi)容。

RSS:用戶產(chǎn)生內(nèi)容自動(dòng)分發(fā),定閱

Podcasting:個(gè)人視頻/聲頻的發(fā)布/定閱

SNS:blog+人和人之間的鏈接

WIKI:用戶共同建設(shè)一個(gè)大百科全書85WEB2.0從知識(shí)生產(chǎn)的角度看,WEB1.0的任務(wù),是將以前沒(méi)有放在網(wǎng)上的人類知識(shí),通過(guò)商業(yè)的力量,放到網(wǎng)上去。WEB2.0的任務(wù)是,將這些知識(shí),通過(guò)每個(gè)用戶的瀏覽求知的力量,協(xié)作工作,把知識(shí)有機(jī)的組織起來(lái),在這個(gè)過(guò)程中繼續(xù)將知識(shí)深化,并產(chǎn)生新的思想火花;

從內(nèi)容產(chǎn)生者角度看,WEB1.0是商業(yè)公司為主體把內(nèi)容往網(wǎng)上搬,而WEB2.0則是以用戶為主,以簡(jiǎn)便隨意方式,通過(guò)blog/podcasting方式把新內(nèi)容往網(wǎng)上搬;

從交互性看,WEB1.0是網(wǎng)站對(duì)用戶為主;WEB2.0是以P2P為主。

從技術(shù)上看,WEB客戶端化,工作效率越來(lái)越高。比如像Ajax技術(shù),GoogleMAP/Gmail里面用得出神入化。

我們看到,用戶在互聯(lián)網(wǎng)上的作用越來(lái)越大;他們貢獻(xiàn)內(nèi)容,傳播內(nèi)容,而且提供了這些內(nèi)容之間的鏈接關(guān)系和瀏覽路徑。在SNS里面,內(nèi)容是以用戶為核心來(lái)組織的。WEB2.0是以用戶為核心的互聯(lián)網(wǎng)。

86REST

(RepresentationalStateTransfer)

REST軟件架構(gòu)是由RoyThomasFielding博士在2000年首次提出的。他為我們描繪了開發(fā)基于互聯(lián)網(wǎng)的網(wǎng)絡(luò)軟件的藍(lán)圖。REST軟件架構(gòu)是一個(gè)抽象的概念,是一種為了實(shí)現(xiàn)這一互聯(lián)網(wǎng)的超媒體分布式系統(tǒng)的行動(dòng)指南。利用任何的技術(shù)都可以實(shí)現(xiàn)這種理念。而實(shí)現(xiàn)這一軟件架構(gòu)最著名的就是HTTP協(xié)議。通常我們把REST也寫作為REST/HTTP,在實(shí)際中往往把REST理解為基于HTTP的REST軟件架構(gòu),或者更進(jìn)一步把REST和HTTP看作為等同的概念。今天,HTTP是互聯(lián)網(wǎng)上應(yīng)用最廣泛的計(jì)算機(jī)協(xié)議。HTTP不是一個(gè)簡(jiǎn)單的運(yùn)載數(shù)據(jù)的協(xié)議,而是一個(gè)具有豐富內(nèi)涵的網(wǎng)絡(luò)軟件的協(xié)議。它不僅僅能夠?qū)τ诨ヂ?lián)網(wǎng)資源進(jìn)行唯一定位,而且還能告訴我們對(duì)于該資源進(jìn)行怎樣運(yùn)作。這也是REST軟件架構(gòu)當(dāng)中最重要的兩個(gè)理念。而REST軟件架構(gòu)理念是真正理解HTTP協(xié)議而形成的。有了REST軟件架構(gòu)理念出現(xiàn),才使得軟件業(yè)避免了對(duì)HTTP協(xié)議的片面理解。只有正確的理論指導(dǎo),才能避免在軟件開發(fā)的實(shí)際工作過(guò)程中少走彎路。87REST與URI(資源定位)REST軟件架構(gòu)之所以是一個(gè)超媒體系統(tǒng),是因?yàn)樗梢园丫W(wǎng)絡(luò)上所有資源進(jìn)行唯一的定位,不管你的文件是圖片、文件Word還是視頻文件,也不管你的文件是txt文件格式、xml文件格式還是其它文本文件格式。它利用支持HTTP的TCP/IP協(xié)議來(lái)確定互聯(lián)網(wǎng)上的資源。88REST與CRUD原則REST軟件架構(gòu)遵循了CRUD原則,該原則告訴我們對(duì)于資源(包括網(wǎng)絡(luò)資源)只需要四種行為:創(chuàng)建(Create)、獲?。≧ead)、更新(Update)和銷毀(DELETE)就可以完成對(duì)其操作和處理了。其實(shí)世界萬(wàn)物都是遵循這一規(guī)律:生、見、變、滅。所以計(jì)算機(jī)世界也不例外。這個(gè)原則是源自于我們對(duì)于數(shù)據(jù)庫(kù)表的數(shù)據(jù)操作:insert(生)、select(見)、update(變)和delete(滅),所以有時(shí)候CRUD也寫作為RUDI,其中的I就是insert。這四個(gè)操作是一種原子操作,即一種無(wú)法再分的操作,通過(guò)它們可以構(gòu)造復(fù)雜的操作過(guò)程,正如數(shù)學(xué)上四則運(yùn)算是數(shù)字的最基本的運(yùn)算一樣。89REST與網(wǎng)絡(luò)服務(wù)盡管在Java語(yǔ)言世界中網(wǎng)絡(luò)服務(wù)目前是以SOAP技術(shù)為主,但是REST將是網(wǎng)絡(luò)服務(wù)的另一選擇,并且是真正意義上的網(wǎng)絡(luò)服務(wù)。基于REST思想的網(wǎng)絡(luò)服務(wù)不久的將來(lái)也會(huì)成為是網(wǎng)絡(luò)服務(wù)的主流技術(shù)。REST不僅僅把HTTP作為自己的數(shù)據(jù)運(yùn)輸協(xié)議,而且也作為直接進(jìn)行數(shù)據(jù)處理的工具。而當(dāng)前的網(wǎng)絡(luò)服務(wù)技術(shù)都需要使用其它手段來(lái)完成數(shù)據(jù)處理工作,它們完全獨(dú)立于HTTP協(xié)議來(lái)進(jìn)行的,這樣增加了大量的復(fù)雜軟件架構(gòu)設(shè)計(jì)工作。REST的思想充分利用了現(xiàn)有的HTTP技術(shù)的網(wǎng)絡(luò)能力。在德國(guó)電視臺(tái)上曾經(jīng)出現(xiàn)過(guò)一個(gè)這樣的五十萬(wàn)歐元智力題:如何實(shí)現(xiàn)網(wǎng)絡(luò)服務(wù)才能充分利用現(xiàn)有的HTTP協(xié)議?該問(wèn)題給出了四個(gè)答案:去問(wèn)微軟;WSDL2.0/SOAP1.2;WS-Transfer;根本沒(méi)有。這個(gè)問(wèn)題告訴我們HTTP并不是一個(gè)簡(jiǎn)單的數(shù)據(jù)傳來(lái)傳去的協(xié)議,而是一個(gè)聰明的會(huì)表現(xiàn)自己的協(xié)議,這也許是REST=RepresentationalStateTransfer的真正含義。實(shí)際上目前很多大公司已經(jīng)采用了REST技術(shù)作為網(wǎng)絡(luò)服務(wù),如Google、Amazon等。在Java語(yǔ)言中重要的兩個(gè)以SOAP技術(shù)開始的網(wǎng)絡(luò)服務(wù)框架XFire和Axis也把REST作為自己的另一種選擇。它們的新的項(xiàng)目分別是ApacheCXF和Axis2。Java語(yǔ)言也制定關(guān)于REST網(wǎng)絡(luò)服務(wù)規(guī)范:JAX-RS:JavaAPIforRESTfulWebServices(JSR311)。相信還會(huì)出現(xiàn)更多與REST相關(guān)的激動(dòng)人心的信息。90REST與AJAX技術(shù)盡管AJAX技術(shù)的出現(xiàn)才不到兩年時(shí)間,但是AJAX技術(shù)遵循了REST的一些重要原則。AJAX技術(shù)充分利用了HTTP來(lái)獲取網(wǎng)絡(luò)資源并且實(shí)現(xiàn)了HTTP沒(méi)有的對(duì)于異步數(shù)據(jù)進(jìn)行傳輸?shù)墓δ?。AJAX技術(shù)還使得軟件更好地實(shí)現(xiàn)分布性功能,在一個(gè)企業(yè)內(nèi)只要一個(gè)人下載了AJAX引擎,其它企業(yè)內(nèi)部的人員,就可以共享該資源了。AJAX技術(shù)遵守REST準(zhǔn)則的應(yīng)用程序中簡(jiǎn)單和可伸縮的架構(gòu),凡是采用AJAX技術(shù)的頁(yè)面簡(jiǎn)潔而又豐富,一個(gè)頁(yè)面表現(xiàn)了豐富多彩的形態(tài)。AJAX技術(shù)還使用了一種不同于XML格式的JSON文件格式,這個(gè)意義在哪里呢?在REST軟件架構(gòu)下我們不能對(duì)于XML文件進(jìn)行序列化處理,這樣程序員必須要使用自己的XML綁定框架。而以序列化的JavaScript對(duì)象為基礎(chǔ)的JSON已經(jīng)獲得了廣泛認(rèn)可,它被認(rèn)為能以遠(yuǎn)比XML更好的方式來(lái)序列化和傳輸簡(jiǎn)單數(shù)據(jù)結(jié)構(gòu),而且它更簡(jiǎn)潔。這對(duì)REST是一個(gè)極大貢獻(xiàn)和補(bǔ)充。當(dāng)前的網(wǎng)絡(luò)應(yīng)用軟件還違背了REST的“無(wú)狀態(tài)服務(wù)器”約束。REST服務(wù)器只知道自己的狀態(tài)。REST不關(guān)心客戶端的狀態(tài),客戶端的狀態(tài)自己來(lái)管理,這是AJAX技術(shù)的應(yīng)用之地。通過(guò)AJAX技術(shù),可以發(fā)揮有狀態(tài)網(wǎng)絡(luò)客戶機(jī)的優(yōu)勢(shì)。而REST的服務(wù)器關(guān)心的是從所有網(wǎng)絡(luò)客戶端發(fā)送到服務(wù)器操作的順序。這樣使得互聯(lián)網(wǎng)這樣一個(gè)巨大的網(wǎng)絡(luò)得到有序的管理。91REST與Rails框架

RubyonRails框架(簡(jiǎn)稱Rails或者Rails框架)是一個(gè)基于Ruby語(yǔ)言的越來(lái)越流行的網(wǎng)絡(luò)應(yīng)用軟件開發(fā)框架。它提供了關(guān)于REST最好的支持,也是當(dāng)今應(yīng)用REST最成功的一個(gè)軟件開發(fā)框架。Rails框架(從版本1.2.x起)成為了第一個(gè)引入REST作為核心思想的主流網(wǎng)絡(luò)軟件開發(fā)框架。在Rails框架的充分利用了REST軟件架構(gòu)之后,人們更加堅(jiān)信REST的重要性和必要性。Rails利用REST軟件架構(gòu)思想對(duì)網(wǎng)絡(luò)服務(wù)也提供了一流的支持。從最直觀的角度看待REST,它是網(wǎng)絡(luò)服務(wù)最理想的手段,但是Rails框架把REST帶到了網(wǎng)絡(luò)應(yīng)用軟件開發(fā)框架。這是一次飛躍,讓REST的思想從網(wǎng)絡(luò)服務(wù)的應(yīng)用提升到了網(wǎng)絡(luò)應(yīng)用軟件開發(fā)。利用REST思想的simply_restful插件已經(jīng)成為了Rails框架的核心內(nèi)容。92REST安全性

我們把現(xiàn)有基于SOAP的網(wǎng)絡(luò)服務(wù)和基于REST/HTTP網(wǎng)絡(luò)服務(wù)作個(gè)比喻,前者是一種傳統(tǒng)的寄信方式,而后者是現(xiàn)代網(wǎng)絡(luò)的電子郵件方式。要是是寄信和電子郵件都有病毒存在的話,傳統(tǒng)的寄信被送到對(duì)方就很危險(xiǎn),而電子郵件是開發(fā)的,電子郵件供應(yīng)商比如Google為我們檢查了電子郵件是否有病毒。這里并不是說(shuō)明SOAP網(wǎng)絡(luò)服務(wù)消息包含義病毒,而是說(shuō)明HTTP是無(wú)法處理SOAP信息包究竟好不好,需要額外的軟件工具解決這一問(wèn)題,包括防火墻也用不上和管不了。REST/HTTP網(wǎng)絡(luò)服務(wù)的信息包可以被防火墻理解和控制。你可以按照操作和鏈接進(jìn)行過(guò)濾信息包,如你可以規(guī)定從外部來(lái)的只能讀?。℅ET操作)自己服務(wù)器的資源。這樣對(duì)于系統(tǒng)管理員而言使得軟件管理更為簡(jiǎn)單。REST的安全性還可以利用傳輸安全協(xié)議SSL/TLS、基本和摘要式認(rèn)證(BasicundDigestAuthentication)。除了這些REST自身的安全性功能外,還可以利用像基于信息的WebServicesSecurity(JSR155)作為REST不錯(cuò)的補(bǔ)充。93參考文獻(xiàn)中文參考文獻(xiàn)

RoyThomasFielding博士論文中文版本

RoyThomasFielding博士論文英文版本

94RSSRSS是在線共享內(nèi)容的一種簡(jiǎn)易方式(也叫聚合內(nèi)容,ReallySimpleSyndication)。通常在時(shí)效性比較強(qiáng)的內(nèi)容上使用RSS訂閱能更快速獲取信息,網(wǎng)站提供RSS輸出,有利于讓用戶獲取網(wǎng)站內(nèi)容的最新更新。網(wǎng)絡(luò)用戶可以在客戶端借助于支持RSS的聚合工具軟件(例如SharpReader,NewzCrawler、FeedDemon),在不打開網(wǎng)站內(nèi)容頁(yè)面的情況下閱讀支持RSS輸出的網(wǎng)站內(nèi)容。說(shuō)得更加簡(jiǎn)單一點(diǎn),RSS就是一種用來(lái)分發(fā)和匯集網(wǎng)頁(yè)內(nèi)容的XML格式!如果你還是不太明白,沒(méi)有關(guān)系,RSS是什么其實(shí)并不重要,重要的是RSS可以做什么,下面我們就來(lái)了解一下,RSS能給我們帶來(lái)什么?95RSS可以干什么1.訂閱BLOG(你可以訂閱你工作中所需的技術(shù)文章;也可以訂閱與你有共同愛(ài)好的作者的Blog,總之,你對(duì)什么感興趣你就可以訂什么)

2.訂閱新聞(無(wú)論是奇聞怪事、明星消息、體壇風(fēng)云,只要你想知道的,都可以訂閱)

你再也不用一個(gè)網(wǎng)站一個(gè)網(wǎng)站,一個(gè)網(wǎng)頁(yè)一個(gè)網(wǎng)頁(yè)去逛了。只要這將你需要的內(nèi)容訂閱在一個(gè)RSS閱讀器中,這些內(nèi)容就會(huì)自動(dòng)出現(xiàn)你的閱讀器里,你也不必為了一個(gè)急切想知道的消息而不斷的刷新網(wǎng)頁(yè),因?yàn)橐坏┯辛烁?,RSS閱讀器就會(huì)自己通知你!96RSS閱讀器目前,RSS閱讀器基本可以分為兩類。

第一類大多數(shù)閱讀器是運(yùn)行在計(jì)算機(jī)桌面上的應(yīng)用程序,通過(guò)所訂閱網(wǎng)站的新聞供應(yīng),可自動(dòng)、定時(shí)地更新新聞標(biāo)題。在該類閱讀器中,有Awasu、FeedDemon和RSSReader這三款流行的閱讀器,都提供免費(fèi)試用版和付費(fèi)高級(jí)版。國(guó)內(nèi)最近也推出了幾款RSS閱讀器:周博通,看天下,博閱。另外,開源社區(qū)也推出了很多優(yōu)秀的閱讀器,RSSOWl(完全java開發(fā),點(diǎn)擊下載)它不僅是完全支持中文界面,而且還是完全的免費(fèi)軟件!(后面我們就將以開源軟件周博通和rssowl為例,為大家介紹怎樣來(lái)使用RSS閱讀器-周伯通,怎樣使用RSS閱讀器-rssowl))

第二類新聞閱讀器通常是內(nèi)嵌于已在計(jì)算機(jī)中運(yùn)行的應(yīng)用程序中。例如,NewsGator內(nèi)嵌在微軟的Outlook中,所訂閱的新聞標(biāo)題位于Outlook的收件箱文件夾中。另外,Pluck內(nèi)嵌在InternetExplorer瀏覽器中!

另外,F(xiàn)ireFox瀏覽器內(nèi)置對(duì)RSS支持,可以使用Firefox訂閱RSS哦。97RSS的聯(lián)合(Syndication)和聚合(Aggregation)發(fā)布一個(gè)RSS文件(RSSFeed)后,這個(gè)RSSFeed中包含的信息就能直接被其他站點(diǎn)調(diào)用,而且由于這些數(shù)據(jù)都是標(biāo)準(zhǔn)的XML格式,所以也能在其他的終端和服務(wù)中使用,如PDA、手機(jī)、郵件列表等。而且一個(gè)網(wǎng)站聯(lián)盟(比如專門討論旅游的網(wǎng)站系列)也能通過(guò)互相調(diào)用彼此的RSSFeed,自動(dòng)的顯示網(wǎng)站聯(lián)盟中其他站點(diǎn)上的最新信息,這就叫著RSS的聯(lián)合。這種聯(lián)合就導(dǎo)致一個(gè)站點(diǎn)的內(nèi)容更新越及時(shí)、RSSFeed被調(diào)用的越多,該站點(diǎn)的知名度就會(huì)越高,從而形成一種良性循環(huán)。

而所謂RSS聚合,就是通過(guò)軟件工具的方法從網(wǎng)絡(luò)上搜集各種RSSFeed并在一個(gè)界面中提供給讀者進(jìn)行閱讀。這些軟件可以是在線的WEB工具,如,,,,等,當(dāng)然,可以使用我們以上提到的客戶端工具。98RSS的未來(lái)發(fā)展隨著越來(lái)越多的站點(diǎn)對(duì)RSS的支持,RSS已經(jīng)成為目前最成功的XML應(yīng)用。RSS搭建了信息迅速傳播的一個(gè)技術(shù)平臺(tái),使得每個(gè)人都成為潛在的信息提供者。相信很快我們就會(huì)看到大量基于RSS的專業(yè)門戶、聚合站點(diǎn)和更精確的搜索引擎。99常見RSS訂閱工具BitsCastRSSNewsReader/Podcaster

onelurv

BOKEE

GreatNews

HEXUNRSSREADER和訊博攬

iSpaceDesktop

Liferea

NewsFire

NetNewsWire

Plazoo

RSSBandit

RSSOwl

RSSReader

SharpReader

Straw

Vienna

百博

新浪點(diǎn)點(diǎn)通閱讀器100參考文獻(xiàn)1、RSS0.9Specification2、RSS1.0Specification3、RSS2.0Specification101ATOMATOM是一種訂閱網(wǎng)志的格式。它與RSS相比來(lái)講,有更大的彈性。

atom是一種基于XML的文檔格式以及基于HTTP的協(xié)議,它被站點(diǎn)和客戶工具等用來(lái)聚合網(wǎng)絡(luò)內(nèi)容,包括weblog和新聞標(biāo)題等,它借鑒了各種版本RSS的使用經(jīng)驗(yàn)

Atom正走在通往IETF標(biāo)準(zhǔn)的路上,在這之前,Atom的最后一個(gè)版本是"Atom0.3",并且已經(jīng)被相當(dāng)廣泛的聚合工具使用在發(fā)布和使用(consuming)上。值得一提的是,Blogger和Gmail這兩個(gè)由Google提供的服務(wù)正在使用Atom.102開放API以前的開放API(應(yīng)用程序接口)主要指桌面應(yīng)用軟件,希望通過(guò)開放API融合更多的應(yīng)用。在WEB1.0時(shí)代只有少數(shù)網(wǎng)站,比如EBAY,亞馬遜公司(Amazon)、雅虎公司、Google公司等,在設(shè)計(jì)之初就遵循各種工業(yè)化標(biāo)準(zhǔn),進(jìn)而開放API接口,正是由于這些開放的API,他們獲得了不少有趣、有意思的應(yīng)用。但大多數(shù)公司當(dāng)時(shí)還沒(méi)有這種意識(shí),不過(guò)在Web2.0時(shí)代,開放API已經(jīng)成為不可忽視的趨勢(shì)。

對(duì)于公司來(lái)說(shuō),技術(shù)領(lǐng)域的競(jìng)爭(zhēng)已經(jīng)演化為標(biāo)準(zhǔn)之爭(zhēng),標(biāo)準(zhǔn)的形成在于有多少人在使用,因此開放API就意味更多的人采用,也就意味著標(biāo)準(zhǔn)。Google公司顯然深諳此道。它所推出的諸多產(chǎn)品都是基于開放的API標(biāo)準(zhǔn)。最典型的例子就是Googlemap,開放GoogleMap的API后,Google公司無(wú)需花費(fèi)力氣做更多的市場(chǎng)推廣,其他公司就會(huì)主動(dòng)地整合它的應(yīng)用。如前文我們提到的美國(guó)房地產(chǎn)交易地圖網(wǎng)就是在其網(wǎng)站中主動(dòng)整合GoogleMap。正是看到開放后的巨大前景,微軟、雅虎、Skype也紛紛加入其中。

103AJAXAJAX的全稱是AsynchronousJavaScriptandXML,它不是一種技術(shù)而是數(shù)種技術(shù)的組合。AJAX采用遠(yuǎn)程腳本調(diào)用技術(shù),通過(guò)JavaScript語(yǔ)言與XMLHttpRequest對(duì)象來(lái)實(shí)現(xiàn)數(shù)據(jù)請(qǐng)求,將處理由服務(wù)器轉(zhuǎn)移到客戶端,減少了服務(wù)器的資源占用,加快了數(shù)據(jù)處理的速度。采用AJAX開發(fā)的軟件能讓你在使用網(wǎng)絡(luò)應(yīng)用軟件時(shí)感覺(jué)就象在本機(jī)上一樣。

目前AJAX技術(shù)已經(jīng)廣泛應(yīng)用于網(wǎng)絡(luò)應(yīng)用軟件開發(fā)中,Google也許是AJAX技術(shù)開發(fā)投入最大收獲最多的公司,AJAX已經(jīng)成功應(yīng)用于GMail、GoogleSuggest和GoogleMaps等網(wǎng)絡(luò)應(yīng)用軟件中。

除了Google以外還有更多的公司在采用AJAX。在AJAX的幫助下Zimbra公司開發(fā)的電子郵件中,比GMail和HotMail更加互動(dòng)。M公司也在即時(shí)通訊軟件中采用AJAX技術(shù),以創(chuàng)造更好的用戶體驗(yàn)。即使微軟也不能阻擋AJAX的魅力,微軟聲稱將在下一代HotMail中加入AJAX工具條。104Ajax工具和技術(shù)綜述Ajax(AsynchronousJavaScript+XML)編程技術(shù)正逐漸主導(dǎo)Web應(yīng)用程序開發(fā)領(lǐng)域。每天都有新的開發(fā)人員步入Ajax開發(fā)的殿堂,他們擁有不同的開發(fā)背景。本系列的第1部分將提供來(lái)自IBM?Ajax開發(fā)人員專家組的Ajax開發(fā)資源備忘單。作者根據(jù)他們自己的ramp-up經(jīng)驗(yàn)為您提供了一些實(shí)用的信息,這些信息可以幫助您快速進(jìn)入高效Ajax開發(fā)的軌道。Ajax是一種Web應(yīng)用程序客戶機(jī)技術(shù),它結(jié)合了JavaScript、層疊樣式表(CascadingStyleSheets,CSS)、HTML、XMLHttpRequest對(duì)象和文檔對(duì)象模型(DocumentObjectModel,DOM),關(guān)于各種標(biāo)準(zhǔn)的更多信息,請(qǐng)參閱參考資料。運(yùn)行在瀏覽器上的Ajax應(yīng)用程序以一種異步的方式與Web服務(wù)器通信,并且只更新頁(yè)面的一部分。通過(guò)利用Ajax技術(shù),可以提供豐富的、基于瀏覽器的用戶體驗(yàn)。在開始Ajax之旅以前,需要熟悉很多不同的語(yǔ)言、標(biāo)準(zhǔn)、工具和庫(kù)。一開始就要在不同選項(xiàng)之間做出選擇并組合出一個(gè)開發(fā)環(huán)境來(lái)可能有些勉為其難。作者將根據(jù)他們自己的ramp-up(項(xiàng)目初始階段的準(zhǔn)備工作)經(jīng)驗(yàn)幫助您在旅途中避免可能遇到的一些比較常見的、令人厭煩的問(wèn)題。105Ajax工具和技術(shù)綜述Ajax將改變用戶在網(wǎng)站上的體驗(yàn),之前的單擊-顯示頁(yè)面式的體驗(yàn)將變成具有交互性、靈活性的桌面應(yīng)用程序體驗(yàn)。用戶可以避免頁(yè)面重新加載,避免等待下一部分內(nèi)容的呈現(xiàn)。您可能在想,這一切聽起來(lái)是不錯(cuò),但是如何才能做得到呢?為了回答這個(gè)問(wèn)題,先來(lái)看看Ajax技術(shù)背后的一些幕后故事。Ajax是以下Web技術(shù)和標(biāo)準(zhǔn)的集合,它允許使用客戶端的機(jī)器在背后運(yùn)行應(yīng)用程序邏輯的重要部分,而不僅僅是呈現(xiàn)應(yīng)用程序的輸出:超文本標(biāo)記語(yǔ)言(HypertextMarkupLanguage,HTML):定義最終呈現(xiàn)給用戶的內(nèi)容。層疊樣式表(CascadingStyleSheets,CSS):定義所呈現(xiàn)內(nèi)容的樣式(或裝飾)。文檔對(duì)象模型(DocumentObjectModel,DOM):一種API,瀏覽器使用它將被呈現(xiàn)內(nèi)容公開給JavaScript腳本。然后,腳本可以使用DOM在用戶看到內(nèi)容之前動(dòng)態(tài)地修改內(nèi)容。XmlHttpRequest對(duì)象:為瀏覽器與服務(wù)器之間的交互提供便利,通過(guò)JavaScript腳本調(diào)用。JavaScript:在瀏覽器中執(zhí)行的一種編程語(yǔ)言,將所有其他的Ajax組成部分黏合在一起。腳本可以偵聽瀏覽器中發(fā)生的事件(例如單擊一個(gè)按鈕),并使用XmlHttpRequests回調(diào)服務(wù)器以對(duì)事件作出反應(yīng),然后根據(jù)返回的結(jié)果修改DOM樹。所有這些技術(shù)都在用戶的Web瀏覽器中執(zhí)行,用戶的Web瀏覽器充當(dāng)執(zhí)行Ajax程序的平臺(tái)。106Ajax工具和技術(shù)綜述如果要使用Ajax,那么有一點(diǎn)值得格外注意:組成它的技術(shù)雖然是基于標(biāo)準(zhǔn)的,但又是特定于瀏覽器的。換句話說(shuō),同一個(gè)應(yīng)用程序在不同的瀏覽器上可能表現(xiàn)出不同的行為。然而,由于既不可能限制用戶使用特定的瀏覽器,又不可能忽略客戶機(jī)的瀏覽器可能不支持CSS或DOM這一事實(shí),因此,作為應(yīng)用程序的創(chuàng)建者,您需要理解各種不同瀏覽器之間的差異。要成為一名高效的Ajax開發(fā)人員,需要:了解形成Ajax開發(fā)基礎(chǔ)的技術(shù)。理解可用的運(yùn)行時(shí)平臺(tái)和Web瀏覽器。開發(fā)Ajax應(yīng)用程序時(shí)使用支持各種語(yǔ)言的IDE。擁有用于各種環(huán)境和語(yǔ)言的調(diào)試器和應(yīng)用程序測(cè)試工具。107信息源developerWorks上由BrettMcLaughlin撰寫的掌握Ajax

系列是最好的Ajax教程之一。該系列不要求預(yù)先知道多少Ajax編程知識(shí),并且描述了各種與Ajax相關(guān)的技術(shù)。如果您想更好地理解Web架構(gòu),那么可能需要對(duì)RepresentationalStateTransfer(REST)有所熟悉。“HowtoCreateaRESTProtocol”(請(qǐng)參閱參考資料)這篇文章可以作為這一方面很好的入門資料。閱讀完掌握Ajax

系列,并且親自開始一些開發(fā)之后,您還將需要一些其他的參考信息。W3Schools(請(qǐng)參閱參考資料)提供了核心Ajax技術(shù)(JavaScript、CSS、HTML、DOM、XML等)的在線參考信息。如果您使用的是MozillaFirefox瀏覽器,那么應(yīng)該使用DevEdge側(cè)欄(請(qǐng)參閱參考資料)。這些側(cè)欄包含各種Ajax技術(shù)標(biāo)準(zhǔn)的索引,您可以使用它們作為參考指南。最后,如果您想到Ajax社區(qū)去感受一下,那么應(yīng)該訂閱Ajaxian博客(請(qǐng)參閱參考資料)。108瀏覽器作為運(yùn)行時(shí)環(huán)境Web瀏覽器不僅是Ajax部署環(huán)境,同時(shí)還是調(diào)試環(huán)境。大多數(shù)瀏覽器都可以添加調(diào)試輔助工具,例如DOM樹查看器或調(diào)試器。文章下節(jié)將對(duì)以下各種流行的瀏覽器作一個(gè)概述:Microsoft?InternetExplorer(IE)FirefoxSafari109InternetExplorerIE一直是大多數(shù)用戶的選擇。IE6是一款成熟的瀏覽器,具有非常深的市場(chǎng)底蘊(yùn)。很多CSS和DOM特性在IE6中不受支持,或者以一種專用的形式提供。使用IE6的開發(fā)人員可能會(huì)遇到以下一些問(wèn)題:緩慢的JavaScript解釋器和不一致的標(biāo)準(zhǔn)實(shí)現(xiàn)。缺少透明的PNG支持。DOM事件:一個(gè)事件可能在Firefox中使用一個(gè)名稱,而在IE中又使用另一個(gè)名稱。有些事件的調(diào)用順序不一樣,在IE中和在Firefox中相同的事件對(duì)象可能具有不同的屬性。有關(guān)這一問(wèn)題的更多信息,請(qǐng)閱讀“把應(yīng)用程序從InternetExplorer遷移到Mozilla”(請(qǐng)參閱參考資料)。未實(shí)現(xiàn)的CSS屬性,例如minimum/maximumheight、selectors等等。盡管存在這些問(wèn)題,您還是應(yīng)該相信大多數(shù)用戶都是使用這個(gè)瀏覽器。也可以試著使用各種不同的庫(kù)從而在一定程度上填補(bǔ)IE6的不足,例如/IE7/(請(qǐng)參閱參考資料)。IE7在IE6的基礎(chǔ)上有了很多明顯的改進(jìn),例如對(duì)標(biāo)簽的支持。對(duì)于開發(fā)人員而言,隱藏的改進(jìn)更為重要。IE7提供了一個(gè)性能更佳的JavaScript解釋器,并修復(fù)了IE6中的很多缺陷(例如CSS),使得最遵從標(biāo)準(zhǔn)的Ajax應(yīng)用程序只需要少量的修改便可以在該瀏覽器上運(yùn)行。110IE調(diào)試輔助工具可以使用以下工具在IE中調(diào)試應(yīng)用程序:IEDeveloperToolbar:允許更好地控制IE環(huán)境(緩存,cookie),瀏覽DOM樹,以及瀏覽和操縱元素的樣式。在分析由應(yīng)用程序生成的頁(yè)面時(shí),這是非常有用的工具。(IEDeveloperToolbar可以從Microsoft下載。參考資料中提供了下載鏈接。)MicrosoftScriptDebugger:隨MicrosoftOffice(可以從Microsoft下載,請(qǐng)參閱參考資料)一起發(fā)布,通過(guò)它可以在JavaScript代碼中設(shè)置斷點(diǎn),觀察變量,還可以執(zhí)行常規(guī)的調(diào)試?yán)?。注意,在調(diào)試時(shí),建議在每個(gè)調(diào)試會(huì)話之前通過(guò)IEDeveloperToolbar禁用緩存,否則后面會(huì)調(diào)試緩存版本的代碼。111IE調(diào)試輔助工具IE相關(guān)瀏覽器可以使用Trident(IE瀏覽器引擎)創(chuàng)建“新”的瀏覽器,例如Maxthon。這里新字打上了引號(hào),因?yàn)閺拈_發(fā)人員的角度來(lái)看,瀏覽器的關(guān)鍵特(例如對(duì)Ajax的支持)仍然相同。(請(qǐng)參閱參考資料了解更多關(guān)于Trident的知識(shí)。)112MozillaFirefox雖然Firefox已經(jīng)出來(lái)好幾個(gè)版本,但是這里只討論Firefox2.0。開發(fā)人員和超級(jí)用戶常常使用Firefox,它是UNIX?-類操作系統(tǒng)的首選,而且是開放源碼的,除了IE之外,它是最流行的瀏覽器。Firefox有一個(gè)速度很快的JavaScript解釋器,并且具有各種Web標(biāo)準(zhǔn)的優(yōu)異的實(shí)現(xiàn)。由于它的Ajax友好性,我們強(qiáng)烈建議將Firefox用于大多數(shù)Ajax開發(fā)。通常,很多Ajax開發(fā)人員都是在Firefox上開始應(yīng)用程序開發(fā)的,然后才轉(zhuǎn)而使用其它瀏覽器。113Firefox調(diào)試輔助工具Firefox具有一個(gè)強(qiáng)大的、開放的擴(kuò)展機(jī)制,它的社區(qū)借助這種機(jī)制創(chuàng)建了大量的Web開發(fā)輔助工具。然而,到目前為止,F(xiàn)irebug(請(qǐng)參閱參考資料)是其中最為流行的。(要了解關(guān)于Firebug功能的更多細(xì)節(jié),請(qǐng)參閱“AjaxDebuggingwithFirebug”)。Firebug是一個(gè)集成的擴(kuò)展,通過(guò)它可以:使用斷點(diǎn)、變量查看和逐步方式來(lái)調(diào)試JavaScript代碼。查看網(wǎng)絡(luò)狀況。查看和優(yōu)化各種不同元素的DOM樹和CSS。Firebug1.0的強(qiáng)大性和靈活性為Ajax開發(fā)樹立了里程碑,也是使用Firefox作為首選開發(fā)瀏覽器的有力的理由。Firefox相關(guān)的瀏覽器一些瀏覽器,例如Camino,使用了Firefox的布局引擎MozillaGecko(請(qǐng)參閱參考資料)。這些瀏覽器通過(guò)一個(gè)匹配的Gecko版本能夠提供與Firefox相同的功能。114SafariSafari是隨MacOSX一起發(fā)布的瀏覽器(從第3版開始,也在Windows?上運(yùn)行。)Safari雖然比Firefox和IE7快很多,但是缺少對(duì)標(biāo)準(zhǔn)的支持(不過(guò)最新的WebKit構(gòu)建有了一些改進(jìn);文章下節(jié)將會(huì)更詳細(xì)地介紹WebKit)。還應(yīng)注意,Safari開發(fā)人員社區(qū)規(guī)模遠(yuǎn)遠(yuǎn)小于Firefox和IE的開發(fā)人員社區(qū)。因此,網(wǎng)上關(guān)于Safari的信息較少,而且很多庫(kù)都沒(méi)有在Safari上經(jīng)過(guò)良好的測(cè)試。115Safari調(diào)試輔助工具Safari瀏覽器引擎是在一個(gè)名為WebKit的開放源碼項(xiàng)目(請(qǐng)參閱參考資料)中開發(fā)的。為了在Safari中調(diào)試應(yīng)用程序,建議使用一個(gè)WebKit構(gòu)建。該構(gòu)建包括:經(jīng)過(guò)定制的帶有CSS和DOM查看器的瀏覽器。Drosera:一個(gè)JavaScript調(diào)試器。Drosera可用于調(diào)試應(yīng)用程序,但是與Firebug相比其特性比較有限。如果您堅(jiān)持在Safari中測(cè)試應(yīng)用程序,那么可以打開SafariDebug菜單,通過(guò)該菜單可以查看DOM樹、CSS和緩存等。116Safari相關(guān)的瀏覽器WebKit應(yīng)用于很多瀏覽器,其中最引入注目的是OmniWeb。AjaxIDE和工具在開發(fā)新的Ajax應(yīng)用程序時(shí),如果所使用的IDE支持所有Ajax相關(guān)技術(shù)并且提供快捷、友好的開發(fā)環(huán)境和UI將會(huì)使您如虎添翼。在選擇一款A(yù)jaxIDE時(shí),需要考慮以下一些特性:具有自動(dòng)完成、顏色突出顯示、錯(cuò)誤提示等功能的語(yǔ)法制導(dǎo)編輯功能(用于HTML、CSS、JavaScript和DOM)各種技術(shù)的相關(guān)文檔集成的JavaScript調(diào)試器網(wǎng)絡(luò)監(jiān)控功能DOM內(nèi)省框架集成雖然您可能會(huì)考慮購(gòu)買一個(gè)IDE,但其實(shí)Eclipse和它的相關(guān)插件就提供了一個(gè)功能完善的、基于開放源碼的AjaxIDE,這個(gè)IDE可以免費(fèi)下載。本節(jié)將討論以下這些基于Eclipse的、包括插件的AjaxIDE:含Web工具箱(toolkit)的EclipseEclipseATFAptana117含有Web工具箱的Eclipse如果您是一名Java?開發(fā)人員,負(fù)責(zé)服務(wù)器端的Java開發(fā),那么使用EclipseWeb工具箱也是開始基本Ajax開發(fā)的簡(jiǎn)單易行的方法。通過(guò)添加Eclipse的Web工具(請(qǐng)參閱參考資料),可以獲得一個(gè)可用于開發(fā)Web工件的基本環(huán)境,還可以獲得可編輯HTML、CSS和JavaScript文件的編輯器和編輯工具。注意,EclipseWeb工具環(huán)境不限于Ajax開發(fā),它還支持側(cè)重于服務(wù)器端的Web應(yīng)用程序開發(fā)。因此,它提供了諸如語(yǔ)法突出顯示和基本代碼完成之類的核心功能。它并未提供特定于Ajax開發(fā)任務(wù)的調(diào)試功能或DOM操縱功能。118EclipseATF您可以安裝EclipseAjaxToolkitFramework(ATF)環(huán)境(請(qǐng)參閱參考資料),并將其與EclipseWeb工具箱相結(jié)合,從而產(chǎn)生一個(gè)強(qiáng)大的、支持Ajax開發(fā)需求所有方面的環(huán)境。ATF提供了以下特性:一個(gè)DOM瀏覽器和CSS運(yùn)行時(shí)編輯器一個(gè)JavaScript調(diào)試器(通過(guò)利用MozillaXUL運(yùn)行程序)網(wǎng)絡(luò)流量監(jiān)控通過(guò)庫(kù)配置文件實(shí)現(xiàn)常用庫(kù)的簡(jiǎn)單庫(kù)集成與JSLint(請(qǐng)參閱參考資料)的集成,以執(zhí)行JavaScript驗(yàn)證該工具箱中一個(gè)非常有價(jià)值的特性是在集成的XUL運(yùn)行程序中運(yùn)行、測(cè)試和檢查應(yīng)用程序。119SOAandWebservices面向服務(wù)的體系結(jié)構(gòu)(Service-OrientedArchite

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論