在無線J2ME裝置上實現超文字傳輸協議
隨著越來越多手提電話和個人數字助理開始融入到資訊高速公路之上,從移動裝置上訪問Web站點變得越來
越重要。Java開創了消費裝置中小型的儲存容量的先河,它是用於開發手機、傳呼機及其他微型裝置應用程式
的理想語言。
在本文中,我們將學習如何從一個J2ME客戶機上向伺服器傳送一條HTTP GET請求和一條HTTP POST請
求。雖然這只是一篇探討性質的文章,但是我還是假定讀者已經熟悉Java,J2ME,以及Java Midlets(MIDP應
用程式)的運作機制。我們將使用J2ME的MIDP簡表,並利用SUN的J2ME的無線應用程式開發工具包編譯、配
置和測試我們的應用程式。對於HTTP伺服器,任何WWW地址都可以被訪問,但是預設時我們將使用一個簡單
的Java Servlet來返回我們的HTTP請求的細節。
如何使用J2ME客戶機向Web伺服器和類似的支援HTTP的伺服器傳送HTTP請求呢?答案就是使用可在
javax.microedition.io程式包中可找到的J2ME的網路類。本文就想具體闡述這個問題。
本文概述∶
使用J2ME設計無線網路應用程式
.傳送一條超文字GET請求
.傳送一條超文字POST請求
.使用J2ME進行無線網路程式設計
Java的網路程式設計能力是相當健壯的。Java 2標準版( J2SE)在java.io和java.net程式包中定義了100多個介面
程式,類和異常。通過這些庫實現的功能是很強大的,但是這隻適用於傳統的計算機系統,這些計算機系統有
強大的CPU處理能力,快速的記憶體和持久的資料儲存,但是這些在大多數的無線裝置上是不現實的。因此,
J2ME定義了這些函式的子集,並提供了一套用於網路和檔案訪問的固定的程式包--- javax.microedition.io程式
包。由於可移動裝置種類繁多,這個程式包僅僅定義了一套介面,而為每個可移動裝置供應廠商留下了實際的
應用程式介面實現。這就在可移植性和裝置特定特徵的應用中找到了一個最佳的平衡點。
定義在javax.microedition.io類中的抽象網路和檔案輸入輸出框架稱為通用連線框架(Generic Connection
Framework,簡稱GCF)。GCF定義了一套有關抽象化的內容來描述不同的通訊方法。最高階的抽象被稱作連
接(Connection),還宣告瞭六個介面(四個是直接的,兩個是間接的)。這七個介面就構成了J2ME的CLDC
的一部分,CLDC是大多數的能使用Java的無線裝置使用的配置。設計這個配置的目的就是為所有的CLDC裝置
(手提電話,雙向傳呼機,低檔的PDA等等)提供公用的網路和檔案輸入輸出能力。雖然GCF的目的是公用網路
和檔案輸入輸出框架,但是生產商並不要求實現GCF中宣告的所有的介面。有的廠家可以決定只支援socket連
接,而其它的廠家可以選擇只支援基於資料包的通訊。為了促進跨越類似裝置的可移植性,MIDP規範要求所有
的MIDP裝置實現HttpConnection介面。HttpConnection不是GCF的一部分,但是它是從GCF的一個介面
ContentConnection衍生出來的。我們將使用HttpConnection介面構造我們樣本應用程式。
傳送一個HTTP GET請求
這一節將重點解釋程式程式碼,在下一節中我們將只講述被用來傳送HTTP請求並檢索由伺服器返回的響應通
用連線框架介面和HttpConnection介面。建立MIDP使用者介面的程式程式碼見附錄。
我們先要定義一個方法來放用於傳送HTTP GET請求的程式碼。因為這個方法中的有些操作有潛在的丟擲
IOException的可能,所以我們將把這樣的意外(exception)拋給呼叫方法。
public String sendHttpGet( String url ) throws IOException {
|
第一步是使用Connector類開啟一個到伺服器的連線,這是GCF的關鍵。我們將把這個連線強制轉換為需
要的型別,在本例中為HttpConnection型別。
hcon = ( HttpConnection ) Connector.open( url );
|
接下來,我們得到HttpConnection上的一個DataInputStream,允許我們一個字元一個字元的讀取伺服器
的響應資料。
dis = new DataInputStream( hcon.openInputStream() );
|
使用DataInputStream的read ()方法,伺服器響應的每個字元都被集中起來放入StringBuffer物件。
int ch;
|
最後,連線物件被淨空以儲存資源,而資訊從這個方法中返回。
} finally {
|
如何傳送一個HTTP POST請求
你可以想象,傳送一個HTTP POST請求的處理過程其實與傳送一個GET請求非常地類似。我們將修改一個
現有命令,新增少量的新的命令,並新增一個來自通用連線框架的附加的物件和一個附加的StringBuffer物件把
POST請求體重的內容傳送到伺服器中。剩下的命令將保持不變。
複製我們剛才建立的sendHttpGet()方法,把它貼上進同一個類檔案,改名為sendHttpPost()。 現在,我
們將修改這個新方法來傳送一個HTTP POST請求到伺服器。 在方法的頂部新增兩個新的變數說明。 宣告一個
型別為DataOutputStream的變數和另一個String型別的變數。 我們將使用DataOutputStream物件把存在於字
符串變數中的POST請求體傳送到伺服器中。
DataOutputStream dos = null;
|
修改connector.open()命令包含另一個引數,指出連線將允許客戶端可以通過連線在伺服器上讀和寫。
hcon = ( HttpConnection ) Connector.open( url, Connector.READ_WRITE );
|
設定HttpConnection物件使用的請求方法為POST(預設的方法是GET)。
hcon.setRequestMethod( HttpConnection.POST );
|
得到一個用於現有的HTTP連線的DataOutputStream物件。
dos = hc.openDataOutputStream();
|
宣告一個位元組陣列並通過檢索一個來自requestBody字串的位元組陣列初始化。 然後把DataOutputStream
的緩衝寫入位元組陣列內。
byte[] byteRequest = requestBody.getBytes();
|
呼叫flush ()方法的意圖是傳送已經寫入的資料到DataOutputStream的伺服器的緩衝區中。 在某些電話
上,這個操作工作正常,在其他的電話上,它導致HTTP請求的Transfer - Encoding被設定為" chunked ",有一
些隨機字元被放到請求本身的前面和後面。那又怎樣處理這個問題呢?這個方法呼叫實際上是根本不需要的。
在接下來的一行中,伺服器連線開啟(通過openInputStream ()),將自動輸入緩衝區。因此,你最好不要調
用緩衝區的flush()方法。這個方法其餘的部分保持不變,除了DataOutputStream物件必須在finally{}語句塊中關
閉。
} finally {
|
這就是所有的程式程式碼!並請參見本文後附帶的程式程式碼。
隨著可以使用國際網際網路絡和支援網路的無線裝置日益的增多普及,Java和J2ME的重要性也在不斷的變
隨著可以使用國際網際網路絡和支援網路的無線裝置日益的增多普及,Java和J2ME的重要性也在不斷的變
大。因為HTTP協議是當前僅有的,被所有的遵從MIDP規範的裝置支援的網路協議,它也是用於開發無線網路
應用程式的最好的候選者。
在本文中,我們探究了無線網路程式設計的基本結構和幾個核心問題,我們看了如何呼叫兩個最常用的HTTP請
求方法:GET和POST。J2ME仍然在它的發展初期,並且無線裝置也即將得到大面積的普及。所以,所有有志
投身於無線網路程式設計中的開發者們將得到大展拳腳的好機會。
附錄:
/*
|
相關文章
- 在無線J2ME裝置上實現超文字傳輸協議 (轉)協議
- 超文字傳輸協議協議
- HTTP超文字傳輸協議HTTP協議
- FreeBSD超文字傳輸協議HTTP(轉)協議HTTP
- 用J2ME在移動裝置上實現動畫(轉)動畫
- HTTP 是不是應該翻譯成超文字傳輸協議HTTP協議
- 在TESLA MODEL S上實現MARVELL無線協議棧漏洞的利用協議
- 無線模組透過TCP/IP協議實現與PC端的資料傳輸解析TCP協議
- 用python實現TCP協議傳輸功能PythonTCP協議
- 無線通訊模組透過TCP/IP協議實現與PC端的資料傳輸TCP協議
- 傳輸層協議協議
- 多卡聚合智慧融合通訊裝置在無人機無線視訊傳輸應用無人機
- HarmonyOS跨裝置通訊:多端協同的RPC資料傳輸實現RPC
- 網路傳輸協議協議
- 無需 root 實現在 Android 裝置上執行 LinuxAndroidLinux
- 4種傳輸協議設定,檔案傳輸協議如何選擇?協議
- PPM協議的輸出實現協議
- TCP傳輸協議詳解TCP協議
- 【傳輸協議】HttpClient基本使用協議HTTPclient
- [TCPIP] 傳輸控制協議 NoteTCP協議
- 還在使用檔案傳輸協議傳輸機密檔案?你可能是對檔案傳輸協議有什麼誤會協議
- 4G/5G多卡聚合裝置在公安無線傳輸中的解決方案
- 破解GPS裝置協議協議
- 在java中使用SFTP協議安全的傳輸檔案JavaFTP協議
- 傳輸層協議 TCP 和 UDP協議TCPUDP
- Raysync檔案傳輸協議(FTP)協議FTP
- 檔案傳輸協議介紹協議
- Python 基於 TCP 傳輸協議的網路通訊實現PythonTCP協議
- 如何看待鐳速傳輸的Raysync高速傳輸協議?協議
- 伺服器傳輸協議介紹伺服器協議
- Git傳輸協議的對比分析Git協議
- 網路通訊3:HTTP實現文字傳輸HTTP
- 計算機網路之八:TCP協議(2) TCP可靠傳輸的實現計算機網路TCP協議
- netty系列之:在netty中使用native傳輸協議Netty協議
- 為何HTTP被翻譯為“超文字傳輸協議”是一次歷史上的重大翻譯錯誤?HTTP協議
- 將 CoAP 協議裝置接入 EMQX Cloud協議MQCloud
- 流媒體傳輸協議之 RTP (上篇)協議
- 流媒體傳輸協議之 RTP(下篇)協議