首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

MIDP 聯網應用程式開發教學:HTTP 通訊完整指南

     編輯:Java 程式設計入門

引言

上一講介紹了如何利用 Record Store 在終端機儲存資料。本講將闡述 MIDP Java 網路功能。由於 N800 終端僅支援 HTTP 通訊,故以 HTTP 為主要範例。掌握網路連線後,即可開發連接伺服器的多元應用,不再侷限於單機程式。

1. 利用網路

1.1 Generic Connection Framework

J2ME 需支援多樣手機終端,各終端網路與檔案 I/O 能力不同。為解決此問題,CLDC 採用 Generic Connection Framework,提供節省空間的網路與 I/O 功能,參考 J2SE 的 java.io 與 java.net 套件,定義 7 個介面,僅規範介面,具體實作由各終端廠商提供。介面說明如下:

介面作用
Connection其他介面的基礎介面
StreamConnectionNotifier具 Socket 通訊連線通知功能
InputConnection具接收資料功能
OutputConnection具發送資料功能
DatagramConnection具 UDP 資料報通訊功能
StreamConnection具 Socket 通訊收發功能
ContentConnection具通訊內容查詢功能
HttpConnection具 HTTP 通訊功能

圖 1 展示了介面繼承階層。(原文含圖片,此處保留圖片標籤)
介面階層圖

1.2 Connection 介面

Connection 介面是 Generic Connection Framework 中連線介面的基礎,其他連線介面皆由此衍生。

1.3 Connector 類別

使用 Connector.open(String connectString) 靜態方法建立連線。例如:

Connection con = Connector.open("https://www.nec-mfriend.com/");

所有連線類型均透過此方法建立,即使連線類型不同,呼叫方式相同,賦予 J2ME 豐富擴展性。連線字串格式為:{protocol}:[{target}][{params}]。支援的協定包括:file(檔案 I/O)、comm(序列埠)、socket、datagram、http(Web 伺服器)。注意:N800 不支援 socket 與 datagram,N820 則支援 socket。

Target 部份指定伺服器位址、連接埠、檔案名等;Params 部份補充額外資訊。open 方法另有多載版本可指定存取模式(READ、WRITE、READ_WRITE)。Connector 另提供 openDataInputStream、openDataOutputStream、openInputStream、openOutputStream 等便利方法。

1.4 HTTP 通訊

N800 支援 HTTP 通訊連接 Web 伺服器,可將複雜運算卸載至伺服器。雖 HTTP 為 MIDP 標準,但部分終端可能不支援或有限制。在 N800 使用 HTTP 需遵守:

  • JAD/ADF 檔案中設定 MIDlet-UseNetwork=YES
  • 最大發送 10 KB,超過部分會被截斷
  • 最大接收 100 KB,超過部分會被截斷
  • 連線 URL 從 https:// 起算最多 512 位元組,不分大小寫

HTTP 通訊由 Request 與 Response 組成,主要三種 Request 方式:GET(請求檔案)、HEAD(請求標頭)、POST(送資料並取得結果)。

1.5 使用 GET 方法

讀取伺服器檔案時,需在 HttpConnection 的 setRequestMethod 中指定 HttpConnection.GET:

HttpConnection con = (HttpConnection)Connector.open("https://www.nec-mfriend.com/");
con.setRequestMethod(HttpConnection.GET);

透過 DataInputStream 取得回應:

String res = "";
DataInputStream in = con.openDataInputStream();
int input;
while ((input = in.read()) != -1) {
    res += (char)input;
}
in.close();

完整範例程式碼展示了在模擬器中連線伺服器、取得 HTML 內容並輸出至控制台的流程。(原文程式碼省略,保留關鍵邏輯)

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved