日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

wap2.0开发

發(fā)布時間:2025/3/20 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 wap2.0开发 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

移動通信和互聯(lián)網(wǎng)的迅速發(fā)展,使得互聯(lián)網(wǎng)從固定向移動轉(zhuǎn)移(即移動互聯(lián)網(wǎng))成為一種必然的趨勢。由于手機終端本身的限制條件和無線鏈路的特點,現(xiàn)有無線傳送技術(shù)的效率和可靠性會越來越難以令用戶滿意。如何讓手機上網(wǎng)是WAP協(xié)議所要解決的問題。

一、認(rèn)識WAP協(xié)議

無線應(yīng)用協(xié)議WAP(Wireless Application Protocol)也稱為無線應(yīng)用程序協(xié)議,是在數(shù)字移動電話、Internet及其他個人數(shù)字助理機PDA、計算機應(yīng)用之間進行通信的開放性全球標(biāo)準(zhǔn)。WAP由一系列協(xié)議組成,用于標(biāo)準(zhǔn)化無線電通信設(shè)備,也可用于Internet訪問,包括收發(fā)E-mail、訪問WAP網(wǎng)站上的頁面等等。WAP將移動網(wǎng)絡(luò)和Internet以及企業(yè)的局域網(wǎng)緊密地聯(lián)系起來,提供了一種與網(wǎng)絡(luò)類型、運行商和終端設(shè)備都獨立的、無地域限制的移動增值業(yè)務(wù)。通過這種技術(shù),無論用戶身在何地、何時,只要通過WAP手機,即可享受無窮無盡的網(wǎng)上信息資源。

利用WAP實現(xiàn)的網(wǎng)絡(luò)業(yè)務(wù)以其移動性、靈活性、個人化、信息實時性、信息簡短實用而受到廣大數(shù)字移動電話用戶的普遍歡迎。據(jù)預(yù)測,到2002年,中國Internet用戶將達6500萬,其中移動上網(wǎng)的用戶可達3000萬,超過使用PC上網(wǎng)的用戶;到2004年,全球Internet用戶將突破10億,其中約有3.5億用戶將通過移動方式接入Internet。顯然,用于解決無線移動接入的WAP技術(shù)將發(fā)揮愈來愈重要的作用。

二、WAP的前世今生

1. wap 1.x

WAP1.0版本是WAP的第一個版本,在1998年夏被通過。這一版本推介出了WAP的核心內(nèi)容、i.e.WAP協(xié)議條款、WML以及WMLScript等。

WAP1.1版本于1999年夏推出,這是1.0版本的改良版,是對以前的版本進行歸納反饋的結(jié)果。1.1版是第一個商業(yè)版,在這一版本中的主要變化仍然是用XHTML對WML進行編排以得出W3C的詳細(xì)說明。這一版本支持WBMP格式的圖像操作,從而提高了無線電話應(yīng)用(WTA)-規(guī)格及WML的所有標(biāo)記,現(xiàn)在它已用小寫取代了大寫。

? WAP1.2版本現(xiàn)已被通過,這一版本采用了WAP推進架構(gòu)、用戶代理結(jié)構(gòu)(UAPROF)、WDP通道、提高無線電話應(yīng)用(WTA)規(guī)格以及包括支持附加的用戶網(wǎng)絡(luò)技術(shù)。

?

?

2. wap推陳出新

 ?????? 1 WAP2.0于2001年8月正式發(fā)布,它在WAP1.x的基礎(chǔ)上集成了Internet上最新的標(biāo)準(zhǔn)和技術(shù),并將這些技術(shù)和標(biāo)準(zhǔn)應(yīng)用到無線領(lǐng)域。這些新技術(shù)和標(biāo)準(zhǔn)包括XHTML、TCP/IP、超文本協(xié)議(HTTP/1.1)和傳輸安全層(TLS)。在這些新技術(shù)的支持下,新增加了數(shù)據(jù)同步、多媒體信息服務(wù)、統(tǒng)一存儲接口、配置信息提供和小圖片等新的業(yè)務(wù)和應(yīng)用,同時加強了無線電話應(yīng)用、Push技術(shù)和用戶代理特征描述等原有的應(yīng)用。這些新的業(yè)務(wù)和應(yīng)用將會帶來一種全新的使用感受,并極大地激發(fā)人們對無線應(yīng)用服務(wù)的興趣,從而推動移動互聯(lián)網(wǎng)的發(fā)展。

?

3. wap2.0最新的標(biāo)準(zhǔn)和技術(shù)

3.1 對XHTML的支持

XHTML是由萬維網(wǎng)聯(lián)盟W3C制定的一項新標(biāo)準(zhǔn),它是在HTML4.0的基礎(chǔ)上產(chǎn)生的,是現(xiàn)在和將來要產(chǎn)生的文檔類型和模塊的集合。這些文檔類型是在HTML4.0基礎(chǔ)上的擴展、改進或者是其子集的某一部分;XHTML是基于XML的,其最終將會在基于XML的用戶代理環(huán)境中執(zhí)行。

在XML中引入新元素和新屬性相對簡單一些,在XHTML集合中的擴展是通過使用XHTML的各種模塊和采用開發(fā)基于XHTML模塊的技術(shù)來實現(xiàn)的。這樣,在進行內(nèi)容開發(fā)和用戶代理設(shè)計時,在這些模塊中就能夠?qū)⒃瓉砗同F(xiàn)有的特征集合組合在一起。

利用XHTML的好處有以下3點:XHTML文檔符合XML的標(biāo)準(zhǔn),可以使用標(biāo)準(zhǔn)的XML工具對其進行瀏覽、編輯和驗證;XHTML文檔可以在XHTML的用戶代理中執(zhí)行,也可以在現(xiàn)存的HTML4.0的用戶代理中執(zhí)行;XHTML文檔可以開發(fā)基于HTML文檔對象模型的應(yīng)用,也可以開發(fā)基于XML文檔對象模型的應(yīng)用。隨著XHTML集合的演進,基于XHTML的文檔更容易在各種各樣的XHTML環(huán)境中或者它們之間進行互操作。通過利用XHTML,內(nèi)容開發(fā)商能夠逐步進入XML,同時還能保持它們內(nèi)容的前后兼容。

XHTMLBasic文檔類型包括了保持XHTML語言特征的最小的模塊集合。此外它還包括了圖像、窗體、基本表格和對象支持等,文檔類型豐富,但它不包括全部的XHTML集合,因為有些網(wǎng)絡(luò)客戶端不支持全部的XHTML特征,如移動電話、PDA、尋呼機和機頂盒等設(shè)備。XHTMLBasic被設(shè)計成能擴展的通用的基本集合,例如,其中事件模塊比傳統(tǒng)的XHTML4.0的事件系統(tǒng)更加通用,而且能通過另外的XHTMLModularization模塊集合進行增減和功能擴展。XHTMLBasic的目標(biāo)是能夠支持各種各樣的用戶代理的通用語言。XHTMLBasic是WML2.0的基礎(chǔ)。

WAP2.0利用XHTML和CSSMobileProfile等標(biāo)準(zhǔn),同時保持了對WML1.x的向后兼容,減少了開發(fā)、測試一種應(yīng)用和為多種設(shè)備編制內(nèi)容的時間,減少了開發(fā)成本。另外,XHTML的模塊化架構(gòu)可以很容易、很快地適應(yīng)不同的硬件環(huán)境的應(yīng)用。通過使用級聯(lián)樣式單(Cascading Style Sheets,CSS),開發(fā)商可以將實際編碼和一個或多個XML文檔的樣式屬性分離開,減少了在瀏覽器緩存中的代碼量。

我們可以利用現(xiàn)有的開發(fā)固定互聯(lián)網(wǎng)內(nèi)容和應(yīng)用的工具和資源來開發(fā)WAP2.0的內(nèi)容和應(yīng)用,允許開發(fā)商使用通用的語言子集和開發(fā)工具同時為PC和WAP客戶端開發(fā)應(yīng)用。因此支持WML2.0的瀏覽器同樣能夠支持XTHML,也能夠支持HTML。另外,支持WAP2.0的手機完全可以瀏覽現(xiàn)有的Internet內(nèi)容。這樣,可以大大豐富WAP2.0的應(yīng)用。

3.2 對TCP/IP協(xié)議棧的支持

互聯(lián)網(wǎng)工程任務(wù)組(IETF)一直致力于TCP/IP協(xié)議的優(yōu)化研究,并特別制定了針對無線鏈路的TCP/IP協(xié)議。WAP論壇吸收了IETF的最新的技術(shù)成果,除了繼續(xù)支持原有WAP1.x的協(xié)議棧以外,在WAP2.0中還采用了如下IETF規(guī)范。

在傳輸層,WAP2.0采用具有無線特征的WP-TCP/IP協(xié)議,以使得網(wǎng)絡(luò)可以基于IP進行數(shù)據(jù)傳輸。WP-TCP提供面向連接的服務(wù),它被優(yōu)化用于無線環(huán)境,可與互聯(lián)網(wǎng)上的標(biāo)準(zhǔn)TCP應(yīng)用充分交互操作。IETF PILC小組推薦使用一些在長距離瘦網(wǎng)絡(luò)中的TCP實現(xiàn)機制。這些機制已經(jīng)被Standards Track RFC收錄,并作為有效的性能穩(wěn)定的機制被互聯(lián)網(wǎng)組織接受。

在會話層,WAP2.0采用具有無線特征的HTrP協(xié)議(WP-HTTP),WP-HTTP規(guī)范針對無線環(huán)境的HTTP的協(xié)議子集,完全能夠與HTTP/1.1共同使用。WAP設(shè)備和WAP代理服務(wù)器/WAP服務(wù)器之間交互工作的基本模型是HTTP請求/回應(yīng)處理機制。WP-HTTP支持回應(yīng)的信息體壓縮和安全通道的建立。這樣,在WAP2.0中不一定需要WAP代理服務(wù)器,因為在客戶端和源服務(wù)器端通過使用HTTP/1.1就可以直接完成。

WAP2.0增加了更多的安全保證措施,包括采用TLS協(xié)議,提供改進的端到端的安全,集成有線Internet等,以保證使用移動商務(wù)和移動銀行應(yīng)用等移動業(yè)務(wù)的安全。TLS協(xié)議的無線協(xié)議子集允許針對安全傳輸?shù)慕换ゲ僮鳌LS的協(xié)議子集包括加密簇、驗證字格式、簽名規(guī)則和會話恢復(fù)等安全措施。

4. 新增加和增強的業(yè)務(wù)和應(yīng)用

WAP2.0規(guī)范能夠幫助內(nèi)容開發(fā)商向移動互聯(lián)網(wǎng)用 戶提供更豐富和更安全的移動互聯(lián)網(wǎng)服務(wù)。WAP2.0在世界標(biāo)準(zhǔn)領(lǐng)域是一個巨大進步,它允許應(yīng)用開發(fā)商利用他們已經(jīng)非常熟悉的開發(fā)Intemet應(yīng)用的技術(shù)和工具開發(fā)各種移動應(yīng)用。據(jù)Cahners ln-Stat Group預(yù)測,無線互聯(lián)網(wǎng)的用戶從2000年的3000萬可以發(fā)展到2005年的74200萬,WAP2.0通過新的應(yīng)用和下一代的設(shè)備將極大地促進這一進程。在WAP2.0中聽融合的新技術(shù)將會使用戶切身體驗到WAP2.0中的新業(yè)務(wù)。

(1)推服務(wù)(WAP Push)

這種業(yè)務(wù)是一種基于服務(wù)器的應(yīng)用,利用推代理服務(wù)器(Push Proxy)將內(nèi)容送到或者推到手機設(shè)備中。這種功能在WAP2.0發(fā)行版中得到了加強,這種推的功能實際上是將像短消息、股票價格和交通信息之類的實時應(yīng)用信息發(fā)給用戶:沒有這種推功能時,需要這種實時應(yīng)用信息的用戶就要去詢應(yīng)用最務(wù)器以得到最新的信息,在無線環(huán)境里這種詢操作效率不僅低,而且還浪費了無線網(wǎng)絡(luò)的資源。

(2)用戶代理特征描述(User Agent Profile,UAProf)

這種壹務(wù)羹供了一種機制,這種機制是將客戶的能力和用戶的喜好描述提供給應(yīng)用服務(wù)器。WAF2。0是以W3C的能力組合/喜好特征(CC/PP)工作成果為基礎(chǔ)的。UAProf支持客戶機、服務(wù)器交互模式,用戶可以請求向服務(wù)器端發(fā)送客戶端或者用戶信息。服務(wù)器可以根據(jù)這些信息準(zhǔn)備定制的內(nèi)容響應(yīng)給客戶端或者用戶,這種業(yè)務(wù)模型允許直接增加一些業(yè)務(wù)適配層。插人中間代理來提供增值業(yè)務(wù)。

考慮到用戶隱私的重要性,所以這種業(yè)務(wù)模型能夠由用戶控制其請求中的個人信息。

(3)無線電話應(yīng)用(Wireless Telephony Application, WTA)

這種業(yè)務(wù)提供了一種可以開發(fā)一系列高級電話應(yīng)用的工具。其中的高級電話應(yīng)用可以在支持傳統(tǒng)數(shù)據(jù)功能的應(yīng)用環(huán)境里運行。這些電話應(yīng)用所有的呼叫處理服務(wù),如呼叫建立、呼叫應(yīng)答、呼叫掛起和呼叫轉(zhuǎn)移,可以和數(shù)據(jù)業(yè)務(wù)無縫地結(jié)合,這一點可以使得小區(qū)電話成為充分整合互聯(lián)網(wǎng)和語音業(yè)務(wù)得平臺。

(4)外部功能接口(External Functionality Interface,EFI)

EFI定義了WAE和WAE范圍之外所能運行的應(yīng)用程序中的各組件或者實體之間得接口,類似于提供了一種插件,這種插件擴展和增強了終端瀏覽器或者終端中其他應(yīng)用的功能。EFI的框架結(jié)構(gòu)能夠支持WAP設(shè)備的未來發(fā)展和可擴展能力,而且還可以用來定義接人外部設(shè)備(如智能卡、GPS設(shè)備、醫(yī)療保健設(shè)備和數(shù)字相機)的特定接口。

(5)統(tǒng)一客戶存儲界面(Persistent Storage Interface)

這種能力規(guī)定了一套標(biāo)準(zhǔn)接口的存儲設(shè)備,通過這個接口可以在無線設(shè)備或其他相連的存儲設(shè)備上進行數(shù)據(jù)的組織、存取、存儲和采集。

(6)數(shù)據(jù)同步(Data Synchronization)

數(shù)據(jù)同步是指各種網(wǎng)絡(luò)設(shè)備(包括手機終端、PDA、PC)和各種網(wǎng)絡(luò)服務(wù)器之間某些數(shù)據(jù)集合保持一致的過程。這些數(shù)據(jù)集合包括名片信息、約會信息和公司的銷售賬單等。WAP論壇在WAP2.0中的數(shù)據(jù)同步的解決方案是采用SyncML發(fā)起組的工作成果,選擇SyncML語言作為數(shù)據(jù)同步解決方案的。在WAP和HTTP/1.1協(xié)議中均可以支持SyYncML的消息。

(7)多媒體信息服務(wù)(Multimedia Messaging Service,MMS)

MMS為實現(xiàn)豐富多彩的多媒體信息的傳遞提供了整體架構(gòu),它的特點和功能就是能夠傳送各種類型的內(nèi)容。根據(jù)這種業(yè)務(wù)模型,MMS允許消息的快速發(fā)送(如SMS)和消息的存儲轉(zhuǎn)發(fā)(如E-mail)或兩種模式同時運行。這種靈活性使用戶和運營商可以根據(jù)合理的使用體驗定制服務(wù)。結(jié)合其他的WAP服務(wù),如UAProf和Push服務(wù),MMS還提供了一種高效的信息服務(wù)的解決方案,它可以提供消息公告,即主動調(diào)整服務(wù),以將需要發(fā)送的信息組合在一個表格中,終端接收設(shè)備可以利用這個表格高效地接收信息。

(8)配置信息提供(Provisioning)

這種業(yè)務(wù)提供了一種標(biāo)準(zhǔn)方法,利用這種方法可以給WAP客戶端提供在無線網(wǎng)絡(luò)上進行操作所必要的初始化信息。這就使得運營商可以利用一套通用的工具管理其網(wǎng)絡(luò)上的終端設(shè)備;

(9)小圖片(Pictogram)

用戶可以使用像笑臉符之類的小圖像進行信息的傳遞,有時候比文字更加有效,也更生動活潑。

三、WAP應(yīng)用

3.1 WAP應(yīng)用優(yōu)勢

與普通Internet相比,應(yīng)用WAP協(xié)議的無線Internet在終端、接入方式、帶寬、穩(wěn)定性以及商業(yè)運作模式之間存在巨大差異。無線Internet可以通過掌上服務(wù),把每個用戶個體與Internet緊密地結(jié)合在一起,因此用戶可以得到比傳統(tǒng)的Internet更多的個性化信息服務(wù)。從WAP的組成和特點來看,它具有以下應(yīng)用優(yōu)勢:  

(1) 適用于無線數(shù)據(jù)的傳輸機制;

(2) 獨立于網(wǎng)絡(luò)標(biāo)準(zhǔn);  

(3) 開放的標(biāo)準(zhǔn),并獨立于各生產(chǎn)廠商;  

(4) 可以用作Internet瀏覽器,支持超文本鏈接,具有較強的交互能力;  

(5) 可以從服務(wù)器上直接下載應(yīng)用,從而可以快速提供新的服務(wù)。這一點也是WAP與嵌入式軟件明顯不同的地方。

3.2 WAP應(yīng)用限制

盡管WAP具有較強的應(yīng)用優(yōu)勢,但目前也有一些條件限制了WAP的應(yīng)用。這主要表現(xiàn)在ISP環(huán)節(jié)、網(wǎng)頁顯示內(nèi)容、無線接入及通信速度等方面。

隨著無線技術(shù)、Internet接入和內(nèi)容服務(wù)的日益相互融合,許多廠商都想盡快解決在手持設(shè)備上顯示各種信息的方法。雖然說這對無線上網(wǎng)用戶而言是個好消息,但令人遺憾的是,用戶要享受到這樣的服務(wù),必須經(jīng)由無線ISP這個重要的環(huán)節(jié),也就是說在目前的技術(shù)條件下,這個環(huán)節(jié)是不能越過的,解決這個問題還有待時日。

手持設(shè)備的顯示屏幕非常小,單屏顯示信息有限,這在一定程度上限制了WAP技術(shù)的應(yīng)用。不過,為了使手持設(shè)備用戶可以訪問盡可能多的網(wǎng)站,獲取盡可能多的信息,許多廠商都在想辦法研究信息的表現(xiàn)形式。例如,美國Digital Paths公司開發(fā)出了Digital Paths技術(shù)。利用這種技術(shù),服務(wù)商可以把所有信息以一種簡單實用的文本形式顯示在手機設(shè)備上,這可以大大改善網(wǎng)頁內(nèi)容的可讀性。

另外,Digital Paths公司還采用一臺服務(wù)器作為網(wǎng)站與用戶之間取得聯(lián)系的中介。服務(wù)器上的應(yīng)用軟件可以根據(jù)用戶手持設(shè)備的類型,對截獲的網(wǎng)頁內(nèi)容重新進行格式處理,以實現(xiàn)較好的顯示效果。這種方法突破了普通手持設(shè)備160×160像素的分辨率和手機屏幕5行顯示空間的限制。不過這種技術(shù)真正達到標(biāo)準(zhǔn)化并獲得廣泛普及,恐怕還需要一段時間。

除了上述幾點外,無線接入問題目前一時難以解決,也會限制WAP應(yīng)用。例如,Palm VII這種設(shè)備就必須通過一個采用802.11技術(shù)的基站進行無線電連接,雖然說已有一些廠商推出了802.11基站設(shè)備,但種類和數(shù)量都十分有限,與市場要求的標(biāo)準(zhǔn)還有很大差距。

而且,WAP手機在收發(fā)E-mail、瀏覽網(wǎng)站信息等功能之外,很難提供更復(fù)雜的通信應(yīng)用,比如在線采購和視頻會議等。其關(guān)鍵是目前移動通信網(wǎng)的運行速度根本無法達到要求。只有將來移動通信網(wǎng)進行全面“提速”,并使Internet實現(xiàn)快速移動后,更高級的WAP應(yīng)用功能才可成為現(xiàn)實。

3.3 ?WAP未來

1999年全球有1.35億移動電話用戶,根據(jù)IDC公布的調(diào)查報告,到2005年,全球無線電通信用戶預(yù)計將達到10億。調(diào)查中還發(fā)現(xiàn)了一個值得注意的現(xiàn)象,即許多手機用戶,往往同時也是Internet用戶,這些人在本國內(nèi)的所占比例,通常決定了該國的通信市場大小。一般來說,這些人所占比例越高,他們國家的通信市場就越發(fā)達。比如日本,由于對移動電話技術(shù)和相應(yīng)的基礎(chǔ)設(shè)施進行了巨額投資,使得日本移動電話的用戶很早便享受到了互動信息業(yè)務(wù),雖然一時還不完備,但卻極大地刺激了市場的發(fā)育。據(jù)預(yù)測,到2002年日本的手機用戶數(shù)將會達到全世界移動電話用戶數(shù)的10%。同樣,歐洲的情況也非常令人樂觀。未來幾年中,歐洲移動電話市場的增長速度可能達到300%以上。早在1999年,Ellison,這位美國Oracle公司的CEO便在瑞士日內(nèi)瓦舉行的“TELECOM 99”展覽會上指出,Internet將取代PC在歷史舞臺上扮演主角,利用無線終端與Internet連接的用戶將很快超過使用PC與Internet連接的用戶。

中國信息產(chǎn)業(yè)部電子信息中心和藍田市場研究公司聯(lián)合進行的全國性大范圍調(diào)查,形成了國內(nèi)信息產(chǎn)業(yè)多層面的基礎(chǔ)數(shù)據(jù)(簡稱ITD2000)。結(jié)果顯示,我國移動電話用戶絕對數(shù)量超過5000萬戶,無線尋呼用戶超過7000萬戶,已經(jīng)成為名副其實的移動通信大國。據(jù)ITD2000顯示,10年來,我國移動電話的發(fā)展從無到有,空前迅猛。移動電話用戶數(shù)量一直保持高速增長。1999年我國移動電話用戶達到4000萬戶,目前已超過5000萬戶,僅次于美國和日本,居世界第三位,增長速度居世界第一。而且,國產(chǎn)移動通信制造業(yè)已取得群體性突破。在移動通信市場上,中興、大唐、華為、金鵬等民族通信企業(yè)迅速崛起,并獲得移動設(shè)備入網(wǎng)證。國產(chǎn)品牌手機占領(lǐng)的市場份額日益增大。  

基于WAP的移動通信設(shè)備上網(wǎng)將為我們展示一個全新的空間。雖然WAP技術(shù)本身仍在不斷地完善和發(fā)展,但隨著技術(shù)的不斷進步和用戶市場的日益成熟,所有的問題都會逐步加以解決,與之相應(yīng),在移動通信設(shè)備中發(fā)生的這場信息術(shù)革命,也將變得更加轟轟烈烈。

WAP目前已經(jīng)成為通過移動電話及其他無線移動終端使用無線信息服務(wù)的全球性的技術(shù)與工業(yè)標(biāo)準(zhǔn),它不但使現(xiàn)有移動網(wǎng)絡(luò)的許多應(yīng)用得到了迅速發(fā)展,同時也催生更多的全新的增值業(yè)務(wù),而且這些應(yīng)用還將由純信息的服務(wù)逐漸向更加交互化和電子商務(wù)化的方向發(fā)展。 

如果說移動電話的出現(xiàn)使我們擺脫了地理位置的束縛,那么Internet的出現(xiàn)則給我們提供了一片廣闊的信息天地;移動電話與Internet的結(jié)合,不僅使人們對于信息的獲取能獨立于所處的地理位置,而且還可以獨立于信息的來源。所以WAP技術(shù)必將給我們帶來一個全新的未來,人類最終將超越時間和空間對溝通的束縛,進入更為激動人心的美好時代。

四、WML 編程

  WML(Wireless Markup Language - 無線標(biāo)記語言)這種描述語言同我們常聽說的HTML語言同出一家,都屬于X ML語言這一大家族。HTML語言寫出的內(nèi)容,我們可以在我們的PC機上用IE或是Netscape等瀏覽器進行閱讀,而 WML語言寫出的文件則是專門用來在手機等的一些無線終端顯示屏上顯示,供人們閱讀的,并且同樣也可以向使用者提供人機交互界面,接受使用者輸入的查詢等信息,然后向使用者返回他所想要獲得的最終信息。

?

1.基本規(guī)則

* WML使用XML文檔字符集,目前支持 Unicode 2.0,和HTML不同,WML的所有標(biāo)簽,屬性和規(guī)定的可接收值必須小寫,CARD的名字和變量也是區(qū)分大小寫的。和HTML一樣,對于連續(xù)的空字符,只顯示一個空格。標(biāo)簽內(nèi)屬性的值必須用"或者'括起來,屬性名,=和值之間不能有空格。對于不成對出現(xiàn)的標(biāo)簽,必須在 > 前加 / ,比如<br/>。在對變量的引用上和HTML基本相同,有:

   $(var1:esc)

   $(var1:noesc)

   $(var1:unesc)

三種形式,具體含義參見前面HTML的相關(guān)部分。在對保留字符的處理上也基本相同,對應(yīng)的取代字符有:

   < &lt;

   > &gt;

   ' &apos;

   " &quot;

   & &amp;

   $ $$

   空格 &nbsp;

   - &shy;

這里要指出的是在URL的傳遞過程中,用來連接參數(shù)的 & 必須轉(zhuǎn)化為 &amp;。

?

2.基本格式和文件頭

wml文件的一般格式:

?

<?xml version="1.0"?>

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">

<wml>

<head>

<access/>

<meta..../>

</head>

<card>

Some contents...

</card>

<wml>

?

   結(jié)構(gòu)看上去和HTMl文件很類似,對于每一個DECK(板塊),在其文檔開頭必須指明以下的類型聲明:

<?xml version="1.0"?>

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">

千萬注意字母的大小寫。對于一個DECK,其文件大小最好不要超過1.2K。

?

   <wml>標(biāo)簽和HTML中的<html>標(biāo)簽一樣,用來表明這是一個 WML的DECK,它有一個可選的xml:lang屬性來制定文檔的語言,比如<wml xml:lang="zh">表示文檔語言為中文。

?

   和HTML一樣<head>標(biāo)簽包含了該DESK的相關(guān)信息。<head> 標(biāo)簽之間可以包含一個<access>標(biāo)簽和多個<meta>標(biāo)簽。

?

   <access domain="域" path="/路徑" />相當(dāng)于HTML中的<BASE>標(biāo)簽,指定該DECK的訪問控制信息,它用兩個可選的屬性,domain用來指定域,默認(rèn)值為當(dāng)前域, path用來指定路徑,默認(rèn)值為"/",即根目錄。由于 <access>單獨使用,所以要用/結(jié)尾,以后對于類似的情況不再贅述。

?

   <meta 屬性 content="值" scheme="格式" forua="true|false"/> 和HTML中的類似,提供了該DECK的meta信息。屬性是必選的,包括一下三種情況

   name="name" UP.Link Server忽略meta數(shù)據(jù)

   http-equiv="name" UP.Link Server將meta 數(shù)據(jù)轉(zhuǎn)為 HTTP 響應(yīng)頭(同HTML)

   user-agent="agent" UP.Link Server 直接將 meta 數(shù)據(jù)傳給手機設(shè)備,content屬性也是必選的,其內(nèi)容根據(jù)屬性而定。scheme屬性目前尚不支持。forua 為可選屬性,指定在該wml文件傳到客戶端之前,<meta>標(biāo)簽是不是被中間代理刪除(因為傳輸?shù)膮f(xié)議可能改變),默認(rèn)值為false。

?

   目前支持的meta數(shù)據(jù):

   <meta http-equiv="Cache-Control" content="max-age=3600"/>指定DECK在手機內(nèi)存緩存中的存儲時間段,默認(rèn)的為30天(除非內(nèi)存耗盡),在該期間,手機對于訪問過的DECK直接從緩存里調(diào)用。如果信息是對時間敏感的,可以用max-age指定DECK在緩存里的生存期,最小單位是秒, 如果指定為0, 則每次都需通過連接服務(wù)器來調(diào)用該DECK。

?

   <meta user-agent="vnd.up.markable" content="false"/>和<meta user-agent="vnd.up.bookmark" content="指定的URL"/> 類似于普通瀏覽器的書簽功能。當(dāng)用戶將一個CARD做了書簽后,手機瀏覽器首先用一個標(biāo)記記錄該CARD,這個標(biāo)記默認(rèn)的是<card>標(biāo)簽中的title屬性(以后會講到),然后當(dāng)用戶選擇了該書簽以后,瀏覽器就會打開被記錄的URL。但是因為在默認(rèn)的情況下,手機會記錄所有的DECK,所以,一般<meta>被用來使手機不要記錄當(dāng)前的URL,即

<meta user-agent="vnd.up.markable" content="false"/>。此外, 如果要為書簽指定不同于當(dāng)前DRECk的 URL,用<meta user-agent="vnd.up.bookmark" content="指定的URL"/>。

?

   一個DECK可以包含多個CARD,每個CARD的內(nèi)容可能不止一屏顯示,注意DECK,CARD和屏幕顯示范圍的關(guān)系。一個CARD用<card>和</card>包含。<card>可以包含以下可選的屬性:

<card id="name" title="label" newcontext="false" ordered="true" onenterforward="url" onenterbackward="url" ontimer="url">

   *id屬性用來指定CARD的名字,可用來在CARD間跳轉(zhuǎn),相當(dāng)于在HTML中在頁內(nèi)跳轉(zhuǎn)時用<A NAME="jumpHere">。

   *title屬性用來作為書簽的標(biāo)記,該屬性一般不會顯示在屏幕上。

   *newcontext屬性,默認(rèn)值為false, 用來指示當(dāng)跳轉(zhuǎn)到本CARD時,手機是不是要清除以前保留的信息,包括變量,堆棧里的歷史記錄,重新設(shè)置手機狀態(tài)等。

   *ordered屬性,默認(rèn)值是true,表明該CARD里的內(nèi)容是按固定的順序顯示, 還是按用戶的選擇來顯示。這點和HTMl不同,CARD 頁面里的內(nèi)容可以按一定的順序顯示,默認(rèn)的是按線性順序顯示,即按代碼的順序,但是,要注意的是,以下三個標(biāo)簽必須按以下順序來寫<onevent> <timer> <do>, (這和以后要講的“事件”有關(guān))。這樣做是為了方便填表單,當(dāng)ordered設(shè)置為true時,如果一個表單的內(nèi)容不能在一屏里顯示完,就分成多屏顯示;當(dāng)ordered設(shè)置為false時,手機可以顯示一個概要CARD來總結(jié)有效的選項,用戶可以從中選取表單選項來填寫。

   *onXXX屬性,類似于HTML標(biāo)簽中的onXXX屬性,用來捕捉事件,當(dāng)事件被觸發(fā)時執(zhí)行指定的操作(任務(wù)),在這里是轉(zhuǎn)向某個URL。

?

3.顯示文本

在文本的顯示上WML基本和HTML相同。文字段落包含在<p align= "alignment" mode=" wrapmode">和</p>之間,align屬性指定該段文字的對齊方式,默認(rèn)的是left,其他可選擇right和center;mode屬性指定當(dāng)一行顯示不下所有的文字時是否自動換行,默認(rèn)的是自動換行wrap,如果選nowrap,則在一行中顯示,瀏覽器會通過類似于水平滾動條的機制來顯示所有文字。

?

   換行標(biāo)簽也一樣為<br/>,這里先替一下,在標(biāo)單中如果有多個<input>或者<select>,其間不要用<br/>,否則會使手機瀏覽器認(rèn)為是斷點而把表單分頁顯示。

?

   文字的修飾標(biāo)簽有<b>、<i>、<u>、<em>、<strong>、<big>和<small>,意義和HTML里的相同。

?

   表格的顯示標(biāo)簽也和HTML相近,使用<table title="name" align="left|right|center" columns="列數(shù)">、<tr>和<td>來顯示,<table>的title屬性用來給表格取個名字,columns屬性指定表的列數(shù),不能為0,可選的align屬性和前面提到的一樣是對齊方式。表格中可以包含文字和圖片。

?

test1.wml

--------------

<?xml version="1.0"?>

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">

?

<wml>

<card>

<p align="center">

<i>Hello</i><br/>

<b><i>World!</i></b>

<table title="mytable" align="right" columns="2">

<tr>

<td>1-1</td>

<td>1-2</td>

</tr>

<tr>

<td>2-1</td>

<td>2-2</td>

</tr>

</table>

</p>

</card>

</wml>

?

4.顯示圖片

?

  顯示圖片(1位黑白BMP圖片)的標(biāo)簽一樣類似于HTML,<img alt="text" src="url" localsrc="icon" align="left" height="n" width="n" vspace="n" hspace="n"/>,屬性中alt和src是必須要有的,其他可選。另外要注意的是<img>要放在<p>里,不能放在<do>和<option>等功能健標(biāo)簽和選單標(biāo)簽里。

   *alt屬性用來指定當(dāng)手機不支持圖片顯示時用來顯示的文字。

   *src屬性指定圖片的URL,但當(dāng)有了以下的localsrc屬性時,手機瀏覽器就忽略src屬性。

   *localsrc屬性用來指定顯示存在手機ROM中的圖標(biāo),如果找不到,則到UP.Link Server上去找。

   *可選的align屬性用來表明圖片同當(dāng)前行文本的對齊方式,默認(rèn)值為bottom,可選to和middle。

   *height、width、vspace、hspace屬性分別指定圖片的長寬和距環(huán)繞文字的間距,目前不是所有的WAP手機都支持這些屬性。

?

test2.wml

---------------

<?xml version="1.0"?>

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">

?

<wml>

<card>

<p align="center"><img alt=":)" src="xxx.bmp" localsrc="smileyface"/></p>

</card>

</wml>

?

5.錨和任務(wù)

連接是 HTML 頁面里最基本的功能, 在 WML 里也一樣用 <a href="url" title="label"> 和 </a>來包括用來建立連接的文字,必選屬性href指定了要打開的URL,可選的title屬性給該連接取個標(biāo)記名字,這個名字將作為軟按鈕之一的ACCEPT鍵(詳見以前的HDML入門文章)的標(biāo)記顯示在屏幕的軟按鈕區(qū),所以通常可以將屬性作為提示文字是用。

?

   然而,以上的連接在WML里只是任務(wù)的一種情況,為了能夠使用其它任務(wù),所以引進了新的標(biāo)簽<anchor title="label">任務(wù)標(biāo)簽 文本</anchor>,<a>其實是當(dāng)任務(wù)標(biāo)簽為<go/>時的簡單表示方式。

?

test3.wml

---------------

<?xml version="1.0"?>

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">

?

<wml>

<card>

<p>

<anchor title="Link1"><go href="test1.wml"/>News</anchor><br/>

<a title="Link2" href="test2.wml">Sports</a>

</p>

</card>

</wml>

?

   WML里的任務(wù)標(biāo)簽有以下幾種,除了用于<anchor>,還可以用在事件中:

?

   1)<go>用來指示瀏覽器顯示指定的URL,包括DECK的第一個CARD或者指定的CARD。語法如下:

   <go href="url" sendreferer="false|true" method="get|post" accept-charset="charset">

   <postfield name="name" value="value"/>

   <setvar name="name" value="value"/>

   </go>

?

   其中href屬性為必選,其他為可選。sendreferer屬性表示是否傳遞調(diào)用href所指定的URL的頁面的URL,也就是當(dāng)前頁的URL,即 HTTP 頭中的HTTP_REFERER,默認(rèn)值為false,可選值為true。method和HTML中的表單FORM的method屬性一樣,指定表單是以get的方式還是post的方式遞交,以便cgi處理,默認(rèn)的值為get,但如果未指定method但<go></go>間存在<postfield>,手機自動以post方式傳遞。accept-charset 屬性可覆蓋在HTTP頭里指定的字符集,可以寫多個字符集,如accept-charset="UTF-8,US-ASCII, ISO-8859-1"。

?

   <postfield name="name" value="value"/>可以看作是HTML表單FORM中的<INPUT TYPE="HIDDEN" NAME="變量名" VALUE="值">,通過它可以向指定的URL傳遞以“變量名/值”形式的數(shù)據(jù)。name和value屬性都是必選的。注意只有這里的變量是用來遞交給CGI程序的。

?

   除了<postfield>,還可以在<go>和</go>間加入一句或者多句<setvar name="name" value="value"/>,該語句的意思是,當(dāng)觸發(fā)某一事件時,給變量賦值。

?

   要注意的是,當(dāng)<go>和</go>之間沒有任何語句時,要用<go/>的形式,這點比較特別,比如<anchor title="Link1"><go href="test.wml"/>News</anchor>。

?

   2)<prev>用來將當(dāng)前頁面的URL壓入URL歷史堆棧,并打開此前的URL,若該URL不存在,則<prev>無效。語法類似<go>:<prev><setvar name="name" value="value"/></prev>,<prev>和</prev>之間可加入一句或多句<setvar name="name" value="value"/>,若不加,則必須變成<prev/>的形式。

?

   3)<refresh>用來刷新當(dāng)前的頁面,從而使得頁面內(nèi)的變量刷新,語法為<refresh><setvar name="name" value="value"/></refresh>。

?

   4)<noop>,表示什么也不做,該標(biāo)簽不能用在<anchor>中,一般用在覆蓋DECK級的<do>(以后會說明)

?

6.顯示表單

類似于HTML的<FORM>,<fieldset>可用來包括一組表單選項,但不是必須的。前面說過,當(dāng)<card>的ordered設(shè)置為false時,手機可以顯示一個概要CARD來總結(jié)有效的選項,方便用戶從中選取表單選項來填寫,概要CARD就是根據(jù)<fieldset>和獨立的輸入框<input>以及選單<select>來總結(jié)的。語法為, <fieldset title="label">表單內(nèi)容</fieldset>,可選的title屬性除了可用來表示表單的名字外,還在概要CARD里作為選擇項的標(biāo)題。表單內(nèi)容可以是嵌套的<fieldset>,輸入框<input>,選單<select>和必要的提示文本。

?

   <input name="variable" title="label" type="type" value="value" default="default" format="specifier" emptyok="false|true" size="n" maxlength="n" tabindex="n"/>,用來輸入文本,除了name屬性是必要的,其他可選。

   *name屬性,指定了用來存儲該輸入文本的變量名字。

   *title屬性,該輸入框的名字,同樣可被用來作為概要CARD頁中的選項名。

   *type屬性,默認(rèn)值為text,如選擇password,則輸入的數(shù)據(jù)顯示為*。

   *value屬性,在語法和行為上等同于下面的default屬性,

   *default屬性,指定輸入框的默認(rèn)值,即name屬性指定變量的默認(rèn)值,當(dāng)用戶輸入新值時,該值無效,如果該值不符合以下format屬性的規(guī)定,則手機也忽略該默認(rèn)值。

   *format 屬性,用來格式化輸入的數(shù)據(jù),可用的標(biāo)記如下,使用時可用“一位數(shù)字標(biāo)記”和“*標(biāo)記”的形式,前者代表N個標(biāo)記型字符,如3X, 后者代表任意個(小于maxlength屬性的值)標(biāo)記型字符。

   標(biāo)記   描述

   A     任何符號或者大寫字母(不包括數(shù)字)

   a     任何符號或者小寫字母(不包括數(shù)字)

   N     任何數(shù)字(不包括符號或者字母)

   X     任何符號、數(shù)字或者大寫字母(不可改變?yōu)樾懽帜?

   x     任何符號、數(shù)字或者小寫字母(不可改變?yōu)榇髮懽帜?

   M     任何符號、數(shù)字或者大寫字母(可改變?yōu)樾懽帜?或者多個字符,默認(rèn)為首字大寫

   m     任何符號、數(shù)字或者小寫字母(可改變?yōu)榇髮懽帜?或者多個字符,默認(rèn)為首字小寫

?

   *maxlength屬性,指定了用戶可輸入的最大字符長度,最大限制為256個字符。

   *emptyok屬性,表示用戶可否不填輸入框,默認(rèn)為false,即要填。

   *size屬性,輸入框顯示長度,目前未被支持。

   *tabindex屬性,類似于在HTML表單中按TAB鍵后,焦點落在哪個選項上,該值決定了這個選擇順序,數(shù)字大的排在后面。目前未被支持。

?

test4.wml

---------------

<?xml version="1.0"?>

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">

?

<wml>

<card id="card1" ordered="false">

<p>

USERNAME:<input name="userName" title="User Name" type="text" value="YourNameHere" format="*M" emptyok="false" maxlength="12" tabindex="1"/>

PASSWORD:<input name="password" title="Password" type="password" format="8x" emptyok="false" maxlength="8" tabindex="2"/>

COMMENTS:<input name="comments" title="comment" type="text" value="YourCommentsHere" format="*M" emptyok="true" maxlength="30" tabindex="3"/>

</p>

</card>

</wml>

   將上例<card>中的odered的值改為"true"試試看,然后再在<p>和</p>內(nèi)加入<fieldset title="field1">和</fieldset>試試看。

?

   <select>選單類似于HTML表單中的<SELECT>,<select>和</select>間可包含<optgroup>和<option>標(biāo)簽,語法如下,所有屬性都為可選:

   <select title="label" multiple="false|true" name="variable" default="default" iname="index_var" ivalue="default" tabindex=" n">

   <optgroup title="label">選單內(nèi)容</optgroup>

   <option title="label" value="value" onpick="url">

   事件或者文本

   </option>

   </select>

   *title屬性,如以上<input>的title屬性。

   *multiple屬性,指定用戶可否進行多項選擇,默認(rèn)值為false。

   *name屬性,用來存儲用戶選擇項的變量名,其值為 <option>標(biāo)簽的value屬性,若用戶沒有選擇又沒有用 default 屬性指定默認(rèn)值,則手機將改變量賦值為空字符串"",對于多項選擇,每個值用“;”分開。

   *default屬性,可為name屬性指定的變量賦默認(rèn)值。

   *iname屬性,用來記錄用戶選擇項的位置,相應(yīng)的值從 1 開始。 若沒選,則該值為0。

   *ivalue屬性,用來記錄默認(rèn)值所在的位置。

?

   <optgroup>可用來將多個<option>分組,<optgroup>和</optgroup>間還可包括<optgroup>和<option>,該標(biāo)簽?zāi)壳吧形幢恢С帧?/p>

?

   <option>,類似于HTML中選單的<OPTION>,用來表示選單的可選項。<option>和</option>間可包括事件(見下節(jié))和選單的顯示文本。<option> 的屬性為可選,其中value屬性用來提供值,當(dāng)選到該項后,將該值賦給<select> 的name屬性所指定的變量。onpick屬性,用來指定用戶選到該項并按ACCEPT鍵后所打開頁面的URL。

?

test5.wml

---------------

<?xml version="1.0"?>

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">

?

<wml>

<card id="card0" ordered="false">

<p>

Please select a city...

<select title="Cities List" name="city">

<option title="Beijing" value="c1">Beijing</option>

<option title="Shanghai" value="c2">Shanghai</option>

<option title="Hongkong" value="c3">Hongkong</option>

</select>

Please select columns...

<select title="Column List" multiple="true" name="col">

<option title="Hot News" value="l1">News</option>

<option title="Cool Sports" value="l2">Sports</option>

<option title="Pop Enter,,," value="l3">Entertainment</option>

</select>

</p>

</card>

</wml>

?

WML的事件基本上分為兩大類,一類是鍵盤(包括軟硬按鈕)輸入事件,用<do>標(biāo)簽來處理,另一類是相關(guān)頁面內(nèi)部的事件,用<onevent>標(biāo)簽來處理。

?

   <do>的語法如下:<do type="type" label="label" name="name" optional="false|true">任務(wù)</do>,任務(wù)就是以前提到的四種任務(wù)。<do>的屬性中,type是必選的,其他為可選。

   *label屬性,指定了軟按鈕在屏幕上的顯示文本。目前type屬性為delete,help,prev時該屬性無效。 

   *name屬性,為<do>取個名字,同一的CARD里的<do>不能重名。如果CARD級的<do>和DECK級的<do>同名,則覆蓋DECK級的<do>。

   *optional屬性,指定手機是不是可以忽略這個事件,默認(rèn)值是false。

   *type屬性,指定觸發(fā)的事件,具體如下;

   type值    觸發(fā)原因

   accept    調(diào)用ACCEPT按鈕機制

   delete    調(diào)用DELETE按鈕機制

   help     調(diào)用HELP按鈕機制

   options   調(diào)用選擇按鈕機制

   prev     調(diào)用PREV按鈕機制

   reset    調(diào)用清除和重新設(shè)定手機狀態(tài)時的RESET機制(目前不支持)

   unknown    調(diào)用unknown機制,等于type=""(目前不支持)

   vnd. co-type 調(diào)用廠商特定的機制(目前不支持)

   X-*, x-*   供以后使用(不保留)(目前不支持)

?

test6.wml

---------------

<?xml version="1.0"?>

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">

?

<wml>

<head>

<meta http-equiv="Cache-Control" content="max-age=0"/>

</head>

<card id="card0" ordered="false">

<do type="accept" label="InputName" name="do1">

<go href="#card01"/>

</do>

<p>

NAME:<input name="userName" title="User Name" type="text" format="*M" emptyok="false" maxlength="12"/>

</p>

</card>

<card id="card01">

<p>

You name is $(userName:noesc).

</p>

</card>

</wml>

?

   <onevent>的語法如下,<onevent type="type">任務(wù)</onevent>,必選屬性type的取值如下:

   type值     如果用戶執(zhí)行了以下操作就執(zhí)行任務(wù)

   onpick     用戶選擇或不選一個<option>項時。

   onenterforward 用戶使用<go>任務(wù)到達一個CARD時。

   onenterbackward 用戶使用<prev>任務(wù)返回到前面的CARD時,或者按BACK按鈕時。

   ontimer     當(dāng)<timer>過期時。

?

test7.wml

---------------

<?xml version="1.0"?>

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">

?

<wml>

<head>

<meta http-equiv="Cache-Control" content="max-age=0"/>

</head>

<card id="card0" ordered="false">

<p>

Please select a city...

<select title="Cities List" name="city">

<option title="Beijing" value="Beijing">

<onevent type="onpick">

<go href="#card01"/>

</onevent>Beijing</option>

<option title="Shanghai" value="Shanghai" onpick="#card01">Shanghai</option>

<option title="Hongkong" value="Hongkong" onpick="#card01">Hongkong</option>

</select>

& lt;/p>

</card>

<card id="card01">

<p>

You are Living in $(city:noesc)

</p>

</card>

</wml>

?

   <timer/>可以用來在用戶不進行任何操作的一段時間后,自動執(zhí)行一個任務(wù),任何激活CARD頁面的任務(wù)和用戶操作都會啟動<timer/>,而任務(wù)進行時,<timer/>就停止。每個CARD只能有一個<timer/>,一個<timer/>只能觸發(fā)一個任務(wù)。語法如下:<timer name="variable" value="value"/>,其中name為可選屬性,指定為一個變量名,當(dāng)退出該CARD時,該變量存儲此時定時器的值,當(dāng)定時器超時時,手機將該變量設(shè)為0;value為必選屬性,用來設(shè)置定時器的定時值,最小單位為0.1秒。

?

test8.wml

---------------

<?xml version="1.0"?>

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">

?

<wml>

<head>

<meta http-equiv="Cache-Control" content="max-age=0"/>

</head>

<card id="card1" ontimer="#card2">

<timer name="time1" value="50"/>

<p align="center">

After 5s, goto card2

</p>

</card>

<card id="card2">

<onevent type="ontimer">

<go href="#card1"/>

</onevent>

<timer name="time2" value="50"/>

<p align="center">

Here is card2!

</p>

</card>

</wml>

?

   再提一下,<onevent> <timer> <do>三者必須按以上順序?qū)憽?/p>

?

   此外在DECK級還可以加入<template>,用來將事件捆綁在DECK級上,語法如下:

   <template onenterforward="url" onenterbackward="url" ontimer="url">

   <do>或者<onevent>

   </template>

?

?

test9.wml

---------------

<?xml version="1.0"?>

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">

?

<wml>

<head>

<meta http-equiv="Cache-Control" content="max-age=0"/>

</head>

<template>

<do type="accept" label="deckPress" name="do1">

<go href="#card01"/>

</do>

</template>

<card id="card0" ordered="false">

<do type="accept" label="cardPress" name="do1">

<go href="#card02"/>

</do>

<p>

Press ACCEPT...

</p>

</card>

<card id="card01">

<p>

Here is card01

</p>

</card>

<card id="card02">

<p>

Here is card02

</p>

</card>

</wml>

?

7.編程

  1)在WEB服務(wù)器上添加WML的MIME類型

?

    對于IIS4,可在其管理器里的站點屬性中加入新的MIME類型,后綴.wml和 MIME類型text/vnd.wap.wml。

    對于PWS,可修改注冊表,先在 HKEY_CLASSES_ROOT層加入主鍵.wml,再加入串值Content Type為text/vnd.wap.wml,然后在HKEY_LOCAL_MACHINE\Software\CLASSES\MIME\Database\Content Type\中加入主鍵text/vnd.wap.wml,再加入串值Extension為.wml。

    以前提到的HDML也用類似的方法。

?

   2)以http方式訪問wml文件

?

    在手機瀏覽器的URL欄里輸入http://localhost/test.wml,就可以訪問WML文件了。

?

   3)CGI設(shè)計

?

    和普通CGI變成的方式差不多,只是返回結(jié)果時,先要輸出Content-Type為text/vnd.wap.wml,然后再輸出WML內(nèi)容。

?

test10.wml

---------------

<?xml version="1.0"?>

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">

?

<wml>

<head>

<meta http-equiv="Cache-Control" content="max-age=0"/>

</head>

<card id="card0">

<do type="accept" label="Input Name" name="do1">

<go href="http://localhost/test.asp" method="post">

<postfield name="uid" value="123456"/>

<postfield name="uname" value="$(userName:esc)"/>

</go>

</do>

<p>

NAME:<input name="userName" title="User Name" type="text" format="*M" emptyok="false" maxlength="12"/>

</p>

</card>

?

test10.asp

---------------

<%

uid=Request.Form("uid")

userName=Request.Form("uname")

Response.ContentType="text/vnd.wap.wml"

%>

<?xml version="1.0"?>

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">

?

<wml>

<card>

<p>

USERNAME:<%=userName%>

USER__ID:<%=uid%>

</p>

</card>

</wml>

?

?

?

五、流行的手機瀏覽器

1.YoYo手機瀏覽器是一款可以運行于大多數(shù)手機上的受瀏覽器,具有快速、穩(wěn)定、省流量、方便、快捷等特點。

2.UCWEB UCWEB是一款國產(chǎn)手機網(wǎng)絡(luò)瀏覽器,擁有眾多的功能,安裝過程方便快捷且不過多占用手機中寶貴存儲資源,在兼容性和網(wǎng)頁支持方面較出色。

?3.Opera 著名瀏覽器的手機版本,在全球約有兩千萬用戶,擁有很好的人性化設(shè)計和兼容性。

4.?? GO瀏覽器是3G門戶獨立開發(fā)的一款手機瀏覽器軟件,可以在手機上實現(xiàn)瀏覽WAP、WWW網(wǎng)頁。

?

六、jsp技術(shù)在WAP開發(fā)中的應(yīng)用

1? jsp技術(shù)?

使用jsp(java server api)技術(shù)可以簡單而快速地在wap終端上生成動態(tài)的wap頁面,而且能夠利用jsp的諸多功能,實現(xiàn)復(fù)雜的wap應(yīng)用。我們?nèi)砸詗ml為例,講解jsp技術(shù)在wap開發(fā)中的應(yīng)用。

?

2? 基本規(guī)則

使用jsp技術(shù)前,首先要建立它的開發(fā)環(huán)境。一般是在windows nt上安裝并建立java server web development kit(jswdk),其版本可為1.01版或更高的版本。

為了測試和瀏覽jsp實現(xiàn)的wap應(yīng)用,還需要安裝wap模擬器(瀏覽器),如nokia wap toolkit,并安裝java runtime environment (jre) 1.2.2或以上版本。

安裝配置好tomcat

完成以上準(zhǔn)備工作之后,就可以按照以下的基本規(guī)則使用jsp編寫wml程序了。

(1) wml的標(biāo)簽和語句均可直接寫在jsp程序中。

(2) 如果想使用jsp來處理wml的標(biāo)簽和語句,則需要使用“<%”和“%>”引起來,格式為:

<%

……(jsp編寫的wml語句行);

%>

例如,以下幾行語句就是利用jsp的out.println來輸出wml的標(biāo)簽和語句:

<%

???????? out.println("<p>");

?????????????????? out.println("hello from script code!<br/>");

???????? out.println("</p>");

%>

?

(3) jsp編寫的wml語句要用引號(" ")引起來,然后再用括號括起來,而且后面還要加上分號( ; ),格式為:

jsp對象.方法/關(guān)鍵字(" ……wml標(biāo)簽或語句行 ");

例如,下面就是反映jsp書寫wml語句格式的例子:

out.println("hello from script code!<br/>");

?

(4) wml的文件類型可以使用jsp的response對象進行聲明,也可以在聲明頁面語言時一塊兒聲明,它們的格式分別如下:

<% response.setcontenttype("text/vnd.wap.wml"); %>

或 <%@ page language="java" contenttype="text/vnd.wap.wml" %>

(5) 最后的程序文件保存時要采用“.jsp”的擴展名,即保存為jsp的程序文件。jsp將被編譯成java源文件,最后成為servlet。

了解了以上基本規(guī)則,我們下面給出一個利用jsp向wap瀏覽器顯示“hello from script code!”信息的簡單程序,通過該程序大家可以進一步認(rèn)識利用jsp開發(fā)wml頁面的具體方法。

<?xml version="1.0"?>

<!doctype wml public "-//wapforum//dtd wml 1.1//en" "http://www.wapforum.org/dtd/ wml_1.1.xml">

<% response.setcontenttype("text/vnd.wap.wml"); %>

<wml>

???????? <card id="start">

?????????????????? <do type="accept">

??????????????????????????? <go href="index.jsp#test"/>

?????????????????? </do>

?????????????????? <p>jsp test:<br/>

??????????????????????????? press accept to continue!<br/>

??? ???????????????</p>

???????? </card>

?

???????? <card id="test">

?????????????????? <do type="prev">

??????????????????????????? <prev/>

?????????????????? </do>

???????? <%

?????????????????? out.println("<p>");

??????????????????????????? out.println("hello from script code!<br/>");

?????????????????? out.println("</p>");

???????? %>

???????? </card>

</wml>

?

3? 程序舉例

我們下面利用jsp和wml實現(xiàn)一個為移動用戶定時更新約會的例子。該例的應(yīng)用程序共包括兩個頁面。第一個頁面的文件是pick_appointment.jsp,它提供了一個選擇卡片,當(dāng)用戶選擇了其中某一個約會時間時,瀏覽器就會帶著本次約會的id號進入到第二個頁面,即文件名為show_appointment_data.jsp的頁面。我們在第二個頁面編寫了兩個卡片,其中第一個卡片用于顯示會面的時間,第二個卡片用于顯示數(shù)據(jù)輸入,讓用戶通過輸入id而取消約會。

?

程序中動態(tài)的約會數(shù)據(jù)是通過java bean的實例來取得的,具體過程其實是通過jdbc連接到數(shù)據(jù)庫的過程。取消約會的操作是通過servlet實現(xiàn)的。由于用戶可能隨時取消某個約會,所以我們需要對pick_appointment.jsp頁面進行定時刷新。下面我們就給出這一應(yīng)用程序的源程序。

pick_appointment.jsp頁面文件的程序代碼如下:

<%@ page language="java" contenttype="text/vnd.wap.wml" %>

<jsp:usebean id="appointmentbean" class="mwebber.samples.appointmentbean" scope

="application" />

<%!

// 下面創(chuàng)建針對每次約會的選項<option>元素

private string getoptions(mwebber.samples.appointmentbean appointmentbean) {

???????? stringbuffer sb = new stringbuffer();

???????? int[] appointmentids = appointmentbean.getappointmentids();

???????? for(int i=0; i<appointmentids.length; i++) {

?????????????????? sb.append("<option onpick=\"show_appointment_data.jsp?id=");

?????????????????? sb.append(i);

?????????????????? sb.append("\">");

?????????????????? sb.append(appointmentbean.getappointmenttime(i));

?????????????????? sb.append("</option>");

???????? }

???????? return sb.tostring();

}

%>

<%! string strxmlprologue = "<?xml version=\"1.0\"?>"; %>

?

<%-- wml內(nèi)容開始 --%>

<%= strxmlprologue %>

<!doctype wml public "-//wapforum//dtd wml 1.1//en" "http://www.wapforum.org/dtd/ wml_1.1.xml">

<wml>

???????? <card id="pick" title="appointments">

?????????????????? <!-- 每分鐘刷新一次卡片組 -->

?????????????????? <onevent type="ontimer">

??????????????????????????? <go href="pick_appointment.jsp"/>

?????????????????? </onevent>

?????????????????? <timer value="600"/>

?????????????????? <!-- 回顯卡片 -->

?????????????????? <do type="prev">

??????????????????????????? <prev/>

?????????????????? </do>

?????????????????? <!-- 為要選擇約會而顯示"select" -->

?????????????????? <p>

??????????????????????????? <select title="appointments">

???????????????????????????????????? <%= getoptions(appointmentbean) %>

??????????????????????????? </select>

?????????????????? </p>

???????? </card>

</wml>

<%-- wml內(nèi)容結(jié)束 --%>

show_appointment_data.jsp頁面文件的程序代碼如下:

<%@ page language="java" contenttype="text/vnd.wap.wml" %>

<jsp:usebean id="appointmentbean" class="mwebber.samples.appointmentbean" scope="application" />

?

?<%

// 使用request對象的方法獲取"id"參數(shù)的值

int intappointmentid = integer.parseint(request.getparameter("id"));

%>

<%! string strxmlprologue = "<?xml version=\"1.0\"?>"; %>

<p>

<%-- wml內(nèi)容開始 --%>

<%= strxmlprologue %>

<!doctype wml public "-//wapforum//dtd wml 1.1//en" "http://www.wapforum.org/dtd/ wml_1.1.xml">

<wml>

???????? <card id="main_data" title="main data">

?????????????????? <p align="center">

??????????????????????????? <b>

????????????????????????????????? ???<%= appointmentbean.getappointmenttime(intappointmentid) %>

??????????????????????????? </b>

?????????????????? </p>

?????????????????? <p>

??????????????????????????? <br/>

???????????????????????????????????? <%= appointmentbean.getappointmentdetails(intappointmentid) %>

??????????????????????????? <br/>

??????????????????????????? <a href="#check_off">check off this appointment</a><br/>

??????????????????????????? <a href="http://localhost:8080/pick_appointment.jsp">back to appointments list</a>

???? ??????????????</p>

???????? </card>

?

????????? <card id="check_off" title="check off">

?????????????????? <!--設(shè)置向服務(wù)器發(fā)送輸入數(shù)據(jù)的選擇項 -->

?????????????????? <do type="accept">

??????????????????????????? <go href="/servlet/processcheckoff" method="post">

??????? ?????????????????????????????<postfield name="check_off_code" value="$check_off_code"/>

??????????????????????????? </go>

?????????????????? </do>

?????????????????? <p>

??????????????????????????? <input name="check_off_code" emptyok="false" maxlength="6"/>

?????????????????? </p>

?????????????????? <p>

??????????????????????????? <a href="#main_data">back to appointment data</a>

?????????????? &nbsp;??????????? <br/>

??????????????????????????? <a href="http://localhost:8080/pick_appointment.jsp">back to appointments list</a>

?????????????????? </p>

???????? </card>

</wml>

<%-- wml內(nèi)容結(jié)束 --%>

?

?

?

結(jié)束語

WAP2.0將世界上最新的標(biāo)準(zhǔn)和技術(shù)集成在一個移動環(huán)境中,提供了更多的移動業(yè)務(wù)和應(yīng)用,是一個具有更豐富移動體驗的平臺:在WAP2.0的支持下,設(shè)備制造商有機會開發(fā)支持經(jīng)過優(yōu)化的具有WAP2.0特征的WAP應(yīng)用的手機設(shè)備,這些WAP2.0的特征包括彩色顯示、多媒體信息、大文件下載以及改善的導(dǎo)航功能、優(yōu)化的用戶界面等。而網(wǎng)絡(luò)運營商將會在支持WAP的這些新業(yè)務(wù)中受益。可以相信,WAP2.0的推出必定會推動移動互聯(lián)網(wǎng)的發(fā)展。

總結(jié)

以上是生活随笔為你收集整理的wap2.0开发的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。