亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

無線開發:如何使用kxml解析WAP

2019-11-18 12:46:23
字體:
來源:轉載
供稿:網友

  一、兩種訪問方法:
  
  目前的kxml支持兩種wap格式:WBXML/WML。
  
  而有兩種方法將解析WBXML:
  
  1。使用j2me將WBXML轉換到XML;
  
  2。使用kxml直接解析WBXML流。下面我在這里討論一下使用第二種方法實現client代碼解析WBXML,當然要使用kxml了。
  
  二、kxml實現方法:
  
  首先需要位于web server的應用程序通過開放WAP網關(關于JWAP:詳見http://jwap.sourceforge.net/)發送WML文件給j2me client。在WAP網關將數據發送j2me client之前WAP網關將WML文件轉換為了WBXML文件。下面代碼的展示了j2me client如何接收WBXML數據,解析數據,并顯示有用的數據在手機屏幕上。
  
  需要注重,在本例程中使用的kxml v1.0版本,kxml v2.0版本在使用上可能有所不同,開發者可以參考kxml2的手冊。
  
  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 where our 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://127.0.0.1:9200");
  dgram = dc.newDatagram(message, message.length);
  try{
  dc.send(dgram);}
  catch (InterruptedIOException e){
  e.printStackTrace(); }
  dgram = dc.newDatagram (msg,msg.length);
  try{
  dc.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();
  }//try
  catch (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++ )
  wmlc[j] = wmlc[j+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
  }//try
  catch ( IOException e) {}
  }//while
  }//try
  catch ( 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
  
  為了演示目的,除了建立一個web Server外,還要在本機建立一個JWAP Server。
  
  三、代碼說明:
  
  上面的代碼將數據連接請求發送到了本機的JWAP Server的URL:“datagram://127.0.0.1:9200”,并發送了一個硬編碼的WSP(wireless session Protocol)請求:http://localhost:8080/examples/jsp/finalfiles/Dat.jsp,然后等待并讀取JWAP Server的回應,在接收到回應信息后使用kxml解析提取其中的數據(元素屬性名為“value”的屬性值)。在解析完成后,將數據顯示于手機屏幕上。
  
  代碼中的getConnect 方法建立與JWAP Server的連接,并發送請求給JWAP Server,要求訪問web Server上的http://localhost:8080/examples/jsp/finalfiles/Dat.jsp,在接收到JWAP Server發回的請求后,getConnect方法調用getIncomingTextOfWmlc方法提取接收到的WBXML數據。由于j2me client與JWAP Server之間的通訊使用了WAP協議堆棧,所以j2me client接收的數據中包含WSP頭,在getIncomingTextOfWmlc方法中首先去掉了這個WSP頭。
  
  之后,getIncomingTextOfWmlc方法使用KXML的事件解析機制進行了4步操作:
  
  1。傳入保存WBXML數據的字節數組構造WmlParser 對象;
  
  2。調用WmlParser的read方法,找到第一個TAG開始的地方;
  
  3。讀取“value”屬性值;
  
  4。回到第2步進行2、3之間的循環,直到找不到START_TAG。
  
  四、數據流程:
  
  而在JWAP網關接收到j2me client發來的硬編碼請求后,將這個請求轉發給了web Server,本例程中的web Server為http://localhost:8080。web Server接收到請求后,使用一個硬編碼的WML文件作為回應:
  <?xml version="1.0"?>
  <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
  <%@ page language="java" contentType= "text/vnd.wap.wml" %>
  <wml>
  <card id="c0" newcontext="false" ordered="false">
  <input type="Price" value="15224" emptyok="false"/>
  </card>
  </wml>
  
  當JWAP網關接收到這個web Server的WML文件后,將其轉換為WBXML格式并修改其content-type編碼為WBXML,最后將轉換后的WBXML格式數據發給了j2me client。
  
  五、總結:
  
  使用kxml方法避免了XML與WBXML之間的相互轉換,WBXML文件的格式減少了XML文件的大小,不僅可將WBXML用于WAP設備,也可以用于基于web的程序與無線設備之間的通訊和數據交換。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久欧美| 91tv亚洲精品香蕉国产一区7ujn| 国产自产女人91一区在线观看| 欧美精品18videos性欧| 国产日韩中文字幕在线| 欧美在线视频一区| 成人福利网站在线观看11| 亚洲视频一区二区三区| 国产精品xxxxx| 亚洲伊人久久综合| 国产婷婷色综合av蜜臀av| 国产高清在线不卡| 欧美激情在线观看| 亚洲色图35p| 欧美在线观看视频| 91社影院在线观看| 欧美激情按摩在线| 成人欧美在线观看| 国产成人在线视频| 欧美一级免费视频| 超碰日本道色综合久久综合| 97激碰免费视频| 国产噜噜噜噜噜久久久久久久久| 青青青国产精品一区二区| 97在线精品国自产拍中文| 91中文字幕一区| 久久91亚洲人成电影网站| 亚洲va久久久噜噜噜久久天堂| 日韩精品视频观看| 日韩在线视频一区| 日韩精品久久久久| 午夜精品蜜臀一区二区三区免费| 精品日韩视频在线观看| 成人免费福利在线| 96sao精品视频在线观看| 粉嫩av一区二区三区免费野| 精品视频久久久久久| 亚洲男人av电影| 亚洲美女精品久久| 日韩av一区二区在线| 91精品成人久久| 亚洲国产成人久久综合| 亚洲国产婷婷香蕉久久久久久| 国产亚洲美女久久| 91在线直播亚洲| 最近中文字幕mv在线一区二区三区四区| 91美女片黄在线观| 欧美日本在线视频中文字字幕| 亚洲香蕉av在线一区二区三区| 欧美—级a级欧美特级ar全黄| 韩国三级电影久久久久久| 日韩欧美中文第一页| 国产丝袜精品视频| 成人免费大片黄在线播放| 日韩精品在线观看一区二区| 国产成人精品在线观看| 欧美超级乱淫片喷水| 91超碰caoporn97人人| 亚洲精品国产成人| 久久夜色精品国产| 亚洲一区二区三区sesese| 91久久久久久久久久久久久| 久久国产精品久久国产精品| 欧美xxxx14xxxxx性爽| 色诱女教师一区二区三区| 欧美香蕉大胸在线视频观看| 欧美视频裸体精品| 欧美福利视频网站| 国产97色在线|日韩| 久久久成人的性感天堂| 国产网站欧美日韩免费精品在线观看| 国产69精品久久久| 美女扒开尿口让男人操亚洲视频网站| 97色在线播放视频| 国产一区二区av| 91精品视频观看| 97福利一区二区| 不卡伊人av在线播放| 日韩精品高清在线观看| 亚洲视频777| 欧美午夜视频在线观看| 日韩国产欧美精品一区二区三区| 久久精品夜夜夜夜夜久久| 久久久在线免费观看| 日本久久久久久久| 久久久欧美一区二区| 91探花福利精品国产自产在线| 91精品国产综合久久久久久久久| 日韩精品在线观看网站| 在线观看国产精品日韩av| 久久99国产精品久久久久久久久| 欧美日韩一区二区免费视频| 色播久久人人爽人人爽人人片视av| 91国产精品91| 久久久久久国产精品久久| 欧美激情视频播放| 日韩成人久久久| 欧美一级大胆视频| 国产区亚洲区欧美区| 久久精品中文字幕一区| 亚洲欧美制服综合另类| 美女福利视频一区| 亚洲欧洲视频在线| 亚洲黄色片网站| 国产精品中文字幕久久久| 亚洲在线一区二区| 欧美亚洲另类视频| 日韩在线中文字| 亚洲a级在线观看| 亚洲欧美日韩国产中文专区| 国产午夜精品全部视频播放| 欧美日韩午夜视频在线观看| 欧美中在线观看| 国产亚洲精品一区二555| 日韩视频―中文字幕| 亚洲欧美制服中文字幕| 欧美日韩在线视频首页| 欧美风情在线观看| 国产福利精品av综合导导航| 福利视频导航一区| 欧美亚州一区二区三区| 国产美女主播一区| 亚洲摸下面视频| 亚洲国产精品久久精品怡红院| 日韩不卡在线观看| 91中文字幕一区| 久久久久久亚洲精品中文字幕| 日韩精品中文字幕久久臀| 亚洲国产97在线精品一区| 伊人青青综合网站| 91av视频在线播放| 日韩在线中文视频| 亚洲精品国产福利| 懂色av影视一区二区三区| www.久久撸.com| 久久成人18免费网站| 97热在线精品视频在线观看| 97国产真实伦对白精彩视频8| 精品人伦一区二区三区蜜桃网站| 精品夜色国产国偷在线| 日韩美女免费视频| 国产精品视频精品视频| 人人爽久久涩噜噜噜网站| 久久久久一本一区二区青青蜜月| 亚洲精品乱码久久久久久按摩观| 国产一区二区香蕉| 国内精品一区二区三区| 欧美一级在线播放| 亚洲深夜福利在线| 精品少妇一区二区30p| 欧美日韩免费区域视频在线观看| 亚洲欧美日韩第一区| 精品香蕉一区二区三区| 久久综合88中文色鬼| 日韩高清电影免费观看完整版| 亚洲一区亚洲二区| 欧美成人网在线| 亚洲精品国产美女| 91极品视频在线| 欧美一级淫片播放口| 国产精品91一区| 精品国内产的精品视频在线观看| 亚洲人成网站在线播| 色偷偷av亚洲男人的天堂|