




已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
如何使用kxml解析WAP作者:cleverpi 文章來源:Matrix 點(diǎn)擊數(shù): 22 更新時(shí)間:2006-10-11 10:13:20熱點(diǎn)文章版權(quán)聲明:任何獲得Matrix授權(quán)的網(wǎng)站,轉(zhuǎn)載時(shí)請(qǐng)務(wù)必以超鏈接形式標(biāo)明文章原始出處和作者信息及本聲明作者:cleverpig(/blog/cleverpig)原文:/resource/article/43/43909_Kxml_Wap.html關(guān)鍵字:j2me,wap,kxml一、兩種訪問方法:目前的kxml支持兩種wap格式:WBXML/WML。而有兩種方法將解析WBXML:1。使用j2me將WBXML轉(zhuǎn)換到XML;2。使用kxml直接解析WBXML流。下面我在這里討論一下使用第二種方法實(shí)現(xiàn)client代碼解析WBXML,當(dāng)然要使用kxml了。二、kxml實(shí)現(xiàn)方法:首先需要位于web server的應(yīng)用程序通過開放WAP網(wǎng)關(guān)(關(guān)于JWAP:詳見/)發(fā)送WML文件給j2me client。在WAP網(wǎng)關(guān)將數(shù)據(jù)發(fā)送j2me client之前WAP網(wǎng)關(guān)將WML文件轉(zhuǎn)換為了WBXML文件。下面代碼的展示了j2me client如何接收WBXML數(shù)據(jù),解析數(shù)據(jù),并顯示有用的數(shù)據(jù)在手機(jī)屏幕上。需要注意,在本例程中使用的kxml v1.0版本,kxml v2.0版本在使用上可能有所不同,開發(fā)者可以參考kxml2的手冊(cè)。import java.io.*; import org.kxml.*; import org.kxml.parser.*; import org.kxml.wap.*; import javax.microedition.lcdui.*; import javax.microedition.midlet.*; import javax.microedition.io.*; public class WbxmlTest extends MIDlet implements CommandListener private Display display = null; private List menu = null; private Form form = null; private String incomingText = ; static final Command okCommand = new Command(Ok, Command.OK, 1); static final Command exitCommand = new Command(Exit, Command.EXIT, 0); / This is a hard coded WSP message that contains / address of web server whereour jsp page is located. byte message =(byte)1,(byte)0x40,(byte)0x3D,(byte)h,(byte)t,(byte)t,(byte)p,(byte):,(byte)/,(byte)/,(byte)l,(byte)o,(byte)c,(byte)a,(byte)l,(byte)h,(byte)o,(byte)s,(byte)t,(byte):,(byte)8,(byte)0,(byte)8,(byte)0,(byte)/,(byte)e,(byte)x,(byte)a,(byte)m,(byte)p,(byte)l,(byte)e,(byte)s,(byte)/,(byte)j,(byte)s,(byte)p,(byte)/,(byte)f,(byte)i,(byte)n,(byte)a,(byte)l,(byte)f,(byte)i,(byte)l,(byte)e,(byte)s,(byte)/,(byte)D,(byte)a,(byte)t,(byte).,(byte)j,(byte)s,(byte)p,(byte)0x80,(byte)0x94,(byte)0x88,(byte)0x81,(byte)0x6A,(byte)0x04,(byte)0x83,(byte)0x99 ; / Memory space to receive message. byte msg = new byte 256; public void pauseApp() /* - */ public void destroyApp(boolean unconditional) notifyDestroyed(); public void startApp() display = Display.getDisplay(this);this.mainMenu(); /startApp /Displays the menu screen private void mainMenu() menu = new List( Send Request, Choice.IMPLICIT);menu.append( Send Message,null);menu.addCommand(okCommand);menu.setCommandListener(this);display.setCurrent(menu); /mainMenu /Display the reply from WAPGateway (JWap). private void showReply() form = new Form( Incoming Message );form.append(The price = + incomingText);form.addCommand(exitCommand);form.setCommandListener(this);display.setCurrent(form); /showReply / Makes a WSP Connection with a WAPGateway, / Sends a message and receives the reply. public void getConnect() Datagram dgram =null;DatagramConnection dc=null;try dc = (DatagramConnection)Connector.open (datagram:/:9200); dgram = dc.newDatagram(message, message.length); trydc.send(dgram); catch (InterruptedIOException e) e.printStackTrace(); dgram = dc.newDatagram (msg,msg.length); trydc.receive(dgram); catch (InterruptedIOException e) e.printStackTrace(); catch( IOException e)e.printStackTrace(); / This is the most interesting part. incomingText = this.getIncomingTextOfWmlc(dgram.getData(); this.showReply(); dc.close(); /trycatch (IllegalArgumentException ie) ie.printStackTrace(); catch (ConnectionNotFoundException cnf) cnf.printStackTrace(); catch (IOException e)e.printStackTrace();/getConnect() private String getIncomingTextOfWmlc ( byte wmlc ) try / Remove WSP header./ We know it is 19 bytes for our case./ But for real world applications,/ this should be dynamically deteced. for ( int j = 0; j wmlc.length-19; j+ ) wmlcj = wmlcj+19; WmlParser parser = new WmlParser(new ByteArrayInputStream(wmlc);while (true) try ParseEvent parseEvent = parser.read(); if ( parseEvent.getType() = Xml.START_TAG ) Attribute attr = parseEvent.getAttribute(value);if ( attr != null ) return attr.getValue(); /if/trycatch ( IOException e) /while/trycatch ( IOException e) e.printStackTrace(); return error; /getIncomingTextOfWmlc public void commandAction(Command c, Displayable d) String commandlabel = c.getLabel(); if (commandlabel.equals(Exit) destroyApp(false);else if (commandlabel.equals(Ok) getConnect(); /commandAction /class WbxmlTest為了演示目的,除了建立一個(gè)web Server外,還要在本機(jī)建立一個(gè)JWAP Server。三、代碼說明:上面的代碼將數(shù)據(jù)連接請(qǐng)求發(fā)送到了本機(jī)的JWAP Server的URL:“datagram:/:9200”,并發(fā)送了一個(gè)硬編碼的WSP(wireless Session Protocol)請(qǐng)求:http:/localhost:8080/examples/jsp/finalfiles/Dat.jsp,然后等待并讀取JWAP Server的回應(yīng),在接收到回應(yīng)信息后使用kxml解析提取其中的數(shù)據(jù)(元素屬性名為“value”的屬性值)。在解析完成后,將數(shù)據(jù)顯示于手機(jī)屏幕上。代碼中的getConnect 方法建立與JWAP Server的連接,并發(fā)送請(qǐng)求給JWAP Server,要求訪問web Server上的http:/localhost:8080/examples/jsp/finalfiles/Dat.jsp,在接收到JWAP Server發(fā)回的請(qǐng)求后,getConnect方法調(diào)用getIncomingTextOfWmlc方法提取接收到的WBXML數(shù)據(jù)。由于j2me client與JWAP Server之間的通訊使用了WAP協(xié)議堆棧,所以j2me client接收的數(shù)據(jù)中包含WSP頭,在getIncomingTextOfWmlc方法中首先去掉了這個(gè)WSP頭。之后,getIncomingTextOfWmlc方法使用KXML的事件解析機(jī)制進(jìn)行了4步操作:1。傳入保存WBXML數(shù)據(jù)的字節(jié)數(shù)組構(gòu)造WmlParser 對(duì)象;2。調(diào)用WmlParser的read方法,找到第一個(gè)TAG開始的地方;3。讀取“value”屬性值;4?;氐降?步進(jìn)行2、3之間的循環(huán),直到找不到START_TAG。四、數(shù)據(jù)流程:而在JWAP網(wǎng)關(guān)接收到j(luò)2me client發(fā)來的硬編碼請(qǐng)求后,將這個(gè)請(qǐng)求轉(zhuǎn)發(fā)給了web Server,本例程中的web Server為http:/localhost:8080。w
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 精益生產(chǎn)方式與企業(yè)精益化管理探討
- 殯葬管理辦法實(shí)施效果
- 金融碩士課程體系核心知識(shí)圖譜構(gòu)建
- 高效農(nóng)田建設(shè)與管理策略研究
- 小學(xué)教師教學(xué)研究成果展示
- 機(jī)場勘測(cè)項(xiàng)目管理辦法
- 安全生產(chǎn)知培訓(xùn)
- 什么是對(duì)本單位安全生產(chǎn)工作提出建議的權(quán)利
- 教育體系:慣性導(dǎo)航系統(tǒng)課程大綱與教學(xué)設(shè)計(jì)
- 食品微生物學(xué)課程指南
- 脊髓腫瘤的護(hù)理查房
- 2025年醫(yī)師三基考試題及答案
- 中遠(yuǎn)海運(yùn)招聘筆試題庫2025
- 溫州市2024-2025學(xué)年高一下學(xué)期6月期末-英語試卷及答案
- 2025至2030中國核應(yīng)急機(jī)器人行業(yè)市場現(xiàn)狀分析及競爭格局與投資發(fā)展報(bào)告
- 導(dǎo)管室護(hù)理管理制度
- 降低跌倒事件的發(fā)生率QC圈
- 深靜脈血栓的試題及答案
- 2025年安徽省郵政行業(yè)職業(yè)技能大賽(快遞員賽項(xiàng))備賽試題庫(含答案)
- 汽車產(chǎn)業(yè)鏈協(xié)同發(fā)展-洞察闡釋
- 滴灌帶造顆粒合同協(xié)議
評(píng)論
0/150
提交評(píng)論