程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> J2me訪問c# Web Services

J2me訪問c# Web Services

編輯:J2ME
任務:用J2ME訪問.Net寫的web服務,並解決中文傳輸問題
分析:Java的默認編碼是iso-8859-1,.Net的默認編碼是utf-8,因為我們的webservice的web方法的參數是由j2me來提供,而且也可能是中文字符,而且返回值也可能是中文字符,所以要保證服務端和客戶端都能正常解碼中文,而J2ME裡的httpconnection類訪問web服務的時候默認編碼不是gb2312,所以要設置一下。
准備:
下載jdk1.6,netbeans4.1,mobility pack4.1,WTK2.3文件列表如下
jdk-6-rc-bin-b66-Windows-i586-05_jan_2006.exe
netbeans-4_1-Windows-ml_zh_CN.exe
netbeans_mobility-4_1-win_zh_CN.exe
sun_Java_wireless_toolkit-2_3-beta-Windows.exe
先安裝jdk,再安裝WTK,然後安裝netbeans,最後安裝mobility pack,安裝netbeans和mobility的時候會自動搜索jdk類庫,指定一下就行了。
另外最好熟悉一下J2ME的簡單開發
用.Net創建web服務
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.Web.Services;

namespace WebService1
{

 public class Service1 : System.Web.Services.WebService
 {
  public Service1()
  {
   InitializeComponent();
  }
  
  private IContainer components = null;
    
  private void InitializeComponent()
  {
  }

  protected override void Dispose( bool disposing )
  {
   if(disposing && components != null)
   {
    components.Dispose();
   }
   base.Dispose(disposing);  
  }
  
  [WebMethod]
  public string Hello(string str)
  {   
   return "你好:" + str;
  }
 }
}

設置web.config的http編碼部分
<globalization requestEncoding="gb2312" responseEncoding="gb2312" />
默認.Net 1.1的web服務沒有打開get和post模式,打開它
<system.web>
  <webServices>
   <protocols>
    <add name="HttpGet" />
    <add name="HttpPost" />
   </protocols>
  </webServices>
用J2ME寫客戶端調用程序
打開netbeans,新建移動程序,新建一個com.sun.J2ME包,然後新建一個MIDlet,名字叫MIDlet,鍵入以下代碼
/*
 * HttpTest.Java
 *
 * Created on 2006年3月6日, 下午3:30
 */

package com.sun.J2ME;

import Javax.microedition.midlet.*;
import Javax.microedition.lcdui.*;
import Javax.microedition.io.*;
import Java.io.*;
import Java.lang.String;


/**
 *
 * @author  蛙蛙王子
 * @version
 */
public class HttpTest extends MIDlet
{

private Display display;

public HttpTest()
{
display = Display.getDisplay(this);
}

protected void startApp() throws MIDletStateChangeException
{
    HttpConnection hc = null;
    DataInputStream dis = null;
    try {

            String url = "http://localhost/WebService1/Service1.asmx/Hello?str=呱呱";
            hc = (HttpConnection)Connector.open(url);
            hc.setRequestProperty("content-type", "text/Html;charset=gb2312"); //這裡要設置charset
            int len = (int)hc.getLength();
            dis = new DataInputStream(hc.openInputStream());     
            if (len > 0) {
                byte[] myData = new byte[len];
                dis.readFully(myData);
                String content="";            
                dis.read(myData,0,myData.length);
                content = new String(myData,"UTF-8"); //這裡轉換成UTF-8編碼
                Form f = new Form("HTTP Test");
                f.append(content);
                display.setCurrent(f);
            }           
        }
        catch(Exception e)
        {
            System.out.println(e.toString()) ;
            notifyDestroyed();
        }
        finally
        {
            try{
                if(hc!=null)
                    hc.close();
                if(dis!=null)
                    dis.close();
            }catch(Exception e){
                System.out.println("關閉錯誤");
            }
        }

}


protected void pauseApp()
{
}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException
{
}
}
按F6就可以運行你的程序了,點擊模擬器的啟動鍵,測試你的程序,可以看到web服務返回的XML字符串,然後你可以進入Java裡相應的XML操作的類來解析返回的XML來獲取指定節點的數據並進一步執行業務邏輯。
小節:
一般來說解決中文問題,傳輸數據的時候不要考慮編碼問題,只傳輸字節流,客戶端讀取字節流後根據相應的編碼協議進行解析,一邊是GB2312另一邊也是GB2312。如果web服務和客戶端都是Java的話,可以一邊用WRITEUTF(),另一邊用READUTF(),就簡單多了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved