国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

探索J2ME:用GCF通信

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

  只有你實現移動設備與非移動設備互相通信的功能后,你設計的移動設備應用程序才可以稱的上是真正有用的。手持PC如Palm擁有同步功能,使得它們可以實現上述功能,但是其它設備,如java嵌入式電話,該如何實現該功能呢?J2ME的MIDP在javax.microedition.io程序包中提供了一整套類,統稱為通用連接構架(Generic Connection Framework ,GCF)。GCF使得與其它設備的可編程傳輸(PRogrammatically transferring)數據變得非常輕易。
  與世界相連
  
  GCF是建立在用連接類來治理通信的概念基礎上的,每個類用來治理具體某種通信方法。抽象Connection(通信)類(實際上,它只有一個已定義的方法,所以它確實很抽象)是所有連接連接類的基類,它可以依次實現五個接口類中的一種來定義他們的功能。這種設計的意圖就是使得GCF變得通用而且易于擴展,而且使得編程者用起來盡可能的簡單。
  
  MIDP 1.0唯一支持的連接類型就是HTTP了,HTTP協議用于Web頁面服務。對HTTP協議的支持是在HttpConnection類中實現的,我將在本文集中闡述這個類。你也許覺得內容限制在HTTP上不太好,實際上并不是這樣的。你的移動設備應用程序最終將可以和任意一種Web服務器通信,并且HttpConnection類會很好的把各種治理通信的行為抽象出來:你無需擔心端口或者其它亂七八糟的東西。你只需要知道三種HTTP請求,并把它們作為你的應用程序的連接媒介。
  
  HTTP簡述
  詳盡、透徹的討論HTTP結構將會超出了本文的范圍,可以這么說HTTP客戶端可以向服務器端發出三種不同的請求中的某一種:GET、POST或者HEAD。不同請求的意義各不相同:
  
   GET請求是用來請求數據的,如Web頁面或者多媒體文件。你也可以通過URL用GET請求向服務器發送數據,不過用這種方式只可以發送少量的數據,很顯然,嵌入到URL的數據是清楚易見的(plainly visible)。
   POST請求可以通過單獨的數據流來向URL發送數據。提交Web表單(form)會使你的瀏覽器向服務器發送POST請求。然后,Web服務器把檢索到數據發送給頁面或者URL指定的CGI程序中。在POST請求中你可以發送比GET請求更多的數據,不過它并不是真正安全可靠的,至少你的數據不是清楚的(in plain sight)。
   最后要說說HEAD請求,它用來在服務器上檢索元數據(metadata)。服務器的回應并不包含實際請求的數據,包含的只是關于請求的信息。
  
  當收到客戶端發出的請求后,服務器發出回應。回應信息可分為信息頭和正文兩個部分,它們包含實際請求的數據。信息頭包括用來表示請求是否成功的狀態字。狀態字200表示請求成功,狀態字400或者400以上表示請求失敗。
  使用HttpConnection類
  現在,我們完全基于HTTP來看看如何用HttpConnection類來請求遠端的服務器并獲取數據。你可以用靜態Connector類打開HttpConnection,它會為你維護對象。打開連接后,你可以通過指定HttpConnection.GET、 HttpConnection.POST,、或者HttpConnection.HEAD來設置你希望使用的客戶請求類型:
  
  
  
  http = (HttpConnection) Connector.open(“http://builder.com.com”);
   http.setRequestMethod(HttpConnection.GET);
  
  你指定的請求會自動發送到你在Connector.open中設定的URL。然后你可以通過HttpConnection類中的getResponseCode方法來檢測請求是否成功
  
  
  
  if (http.getResponseCode() == HttpConnection.HTTP_OK){
   //成功!
  } else {
   //失敗
   }
  實際上,一旦你建立連接,發送和接受數據就是很簡單的一件事了,你只需用HttpConnection類的openInputStream和openOutputStream方法打開適當的流對象就可以了。
  
  接收數據
  讓我們看一個具體的例子。在程序清單A中,我已經寫好了用以建立一個名為CGFMidlet的MIDlet例子的代碼,它演示了通過HttpConnection類,如何讀取保存在Web服務器中的小文本文件內容的過程。在運行這個例子前,你有可能需要修改URL(http://你的Web服務器/你的文件名.txt)為合適的內容。
  
  讓我們看看getHTTPFile方法,它是用來處理文件檢索的。你就會發現HttpConnection類為該文件發出GET請求。當檢查回應狀態字、確保沒有問題后,我用InputStream方法讀取文件的內容并把它顯示在MIDlet的主表單中:
  
  
  
  //打開讀取結果的輸入流
   stream = http.openInputStream();
   byte data[] = new byte[(int) http.getLength()];
   stream.read(data);
  //把結果顯示在主表單的輸出字段上
   output.setString(new String(data));
  
  
  發送數據
  你也可以用GET請求來向服務器發送數據,但是這個方法有個缺點(只能向服務器發送少量數據),我在前面已經暗示了這一點。假如發送數據的量很大,你最好用POST請求。你可以在程序清單B中看到ServerConnetion類是如何做到這一點的。該程序清單是我在本系列文章中所用到的例子程序EXPensesApp(你可以在這兒下載源代碼)可以把開銷發送到服務器保存而寫的代碼。除了我現在用HttpConnection.POST做為請求類型以及設置一種非凡的信息頭來幫助服務器處理請求中的數據外,其它的東西都大致一樣:
  
  http.setRequestMethod(HttpConnection.POST);
   //必須設置內容類型t
   http.setRequestProperty("Content-Type",_
   "application/x-www-form-urlencoded");
   //為打開的連接打開輸出流
   OutputStream ostream = http.openOutputStream()
  然后,我循環訪問ExpenseInfo數組,并把數組中的各個對象聯為一個字符串,用OutputStream方法把字符串所保存的數據發送到服務器:
  
  
  for (int i=0; i   String s = ("ExpenseDate=" + expensesRecords[i].getDate().toString()+
   "&ExpenseCategory=" + expensesRecords[i].getCategory() +
   "&ExpenseAmount=" + String.valueOf(expensesRecords[i].getDollars()) +
   "." + String.valueOf(expensesRecords[i].getCents()) +
   "&ExpenseDescr  
  
  在服務器端,你需要類似于CGI類型的處理過程(例如
aspjsp或者Servlet)來接受數據。字符串中的每一對“標識符——數值”將按照遞交表單的控制顯示在接受頁上,所以你的接受頁訪問這些數據的方式和訪問表單數據相同。
  
  盡管HTTP并不是傳輸大量數據的理想工具,它的靈活性還是足以用來完成本文中的工作,并且GCF使HTTP的用法非凡簡單。很幸運,GCF以后的版本將為開發者提供除HTTP外更多的選擇。
  
  
  本文相關連接請點這里

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新化县| 南汇区| 旬阳县| 河曲县| 乡宁县| 合川市| 雷州市| 白山市| 易门县| 思茅市| 宝丰县| 凭祥市| 天全县| 定边县| 永安市| 家居| 西盟| 南召县| 宁津县| 东光县| 曲靖市| 衡水市| 三门县| 巴中市| 镇安县| 抚宁县| 响水县| 安陆市| 蕲春县| 许昌市| 宜兴市| 高尔夫| 佛山市| 阜新市| 洛南县| 平陆县| 唐山市| 昌图县| 合作市| 土默特左旗| 怀安县|