在無線J2ME設備上實現HTTP協議1_JSP教程
推薦:在J2ME編程中使用Nokia的中文模擬器在J2ME編程中, 經常需要使用Nokia系列的模擬器,但是Nokia Developer’s Suit for J2ME中提供的三個模擬器都無法正確的顯示中文,在程序開發過程中,大家經常要為這個事情頭疼。 下
隨著越來越多手提電話和個人數字助理開始融入到信息高速公路之上,從移動設備上訪問Web站點變得越來越重要。Java開創了消費設備中小型的儲存容量的先河,它是用于開發手機、傳呼機及其他微型設備應用程序的理想語言。 分享:在J2ME和WAP中實現電話呼叫功能本文介紹如何在J2ME平臺和WAP頁面實現電話呼叫的功能。關于WAP和J2ME的區別并不在討論范疇,讀者可以自行查閱資料。 MIDP 1.0中沒有提供電話呼叫的功能。在MIDP 2.0中,javax.microed
在本文中,我們將學習如何從一個J2ME客戶機上向服務器發送一條HTTPGET請求和一條HTTPPOST請求。雖然這只是一篇探討性質的文章,但是我還是假定讀者已經熟悉Java,J2ME,以及JavaMidlets(MIDP應用程序)的運作機制。我們將使用J2ME的MIDP簡表,并利用 SUN的J2ME的無線應用程序開發工具包編譯、配置和測試我們的應用程序。對于HTTP服務器,任何WWW地址都可以被訪問,但是默認時我們將使用一個簡單的JavaServlet來返回我們的HTTP請求的細節。
如何使用J2ME客戶機向Web服務器和類似的支持HTTP的服務器發送HTTP請求呢?答案就是使用可在javax.microedition.io程序包中可找到的J2ME的網絡類。本文就想具體闡述這個問題。
本文概述∶
使用J2ME設計無線網絡應用程序
.發送一條超文本GET請求
.發送一條超文本POST請求
.使用J2ME進行無線網絡編程
Java的網絡編程能力是相當健壯的。Java2標準版(J2SE)在java.io和java.net程序包中定義了100多個接口程序,類和異常。通過這些庫實現的功能是很強大的,但是這只適用于傳統的計算機系統,這些計算機系統有強大的CPU處理能力,快速的內存和持久的數據儲存,但是這些在大多數的無線設備上是不現實的。因此,J2ME定義了這些函數的子集,并提供了一套用于網絡和文件訪問的固定的程序包--- javax.microedition.io程序包。由于可移動設備種類繁多,這個程序包僅僅定義了一套接口,而為每個可移動設備供應廠商留下了實際的應用程序接口實現。這就在可移植性和設備特定特征的應用中找到了一個最佳的平衡點。
定義在javax.microedition.io 類中的抽象網絡和文件輸入輸出框架稱為通用連接框架(GenericConnectionFramework,簡稱GCF)。GCF定義了一套有關抽象化的內容來描述不同的通信方法。最高級的抽象被稱作連接(Connection),還聲明了六個接口(四個是直接的,兩個是間接的)。這七個接口就構成了 J2ME的CLDC的一部分,CLDC是大多數的能使用Java的無線設備使用的配置。設計這個配置的目的就是為所有的CLDC設備(手提電話,雙向傳呼機,低檔的PDA等等)提供公用的網絡和文件輸入輸出能力。雖然GCF的目的是公用網絡和文件輸入輸出框架,但是生產商并不要求實現GCF中聲明的所有的接口。有的廠家可以決定只支持socket連接,而其它的廠家可以選擇只支持基于數據報的通信。為了促進跨越類似裝置的可移植性,MIDP規范要求所有的 MIDP設備實現HttpConnection接口。HttpConnection不是GCF的一部分,但是它是從GCF的一個接口 ContentConnection衍生出來的。我們將使用HttpConnection接口構造我們樣本應用程序。
發送一個HTTPGET請求
這一節將重點解釋程序代碼,在下一節中我們將只講述被用來發送HTTP請求并檢索由服務器返回的響應通用連接框架接口和HttpConnection接口。創建MIDP用戶界面的程序代碼見附錄。
我們先要定義一個方法來放用于發送HTTPGET請求的代碼。因為這個方法中的有些操作有潛在的拋出IOException的可能,所以我們將把這樣的意外(exception)拋給調用方法。
publicStringsendHttpGet(Stringurl)throwsIOException{;
HttpConnectionhcon=null;
DataInputStreamdis=null;
StringBuffermessage="";
try{;
第一步是使用Connector類打開一個到服務器的連接,這是GCF的關鍵。我們將把這個連接強制轉換為需要的類型,在本例中為HttpConnection類型。
hcon=(HttpConnection)Connector.open(url);
接下來,我們得到HttpConnection上的一個DataInputStream,允許我們一個字符一個字符的讀取服務器的響應數據。
dis=newDataInputStream(hcon.openInputStream());
使用DataInputStream的read()方法,服務器響應的每個字符都被集中起來放入StringBuffer對象。
intch;
while((ch=dis.read())!=-1){;
message=message.append((char)ch);
};
最后,連接對象被凈空以保存資源,而信息從這個方法中返回。
};finally{;
if(hcon!=null)hcon.close();
if(dis!=null)dis.close();
};//結束try/finally代碼段
returnmessage.toString();
};//結束sendGetRequest(String)
如何發送一個HTTPPOST請求
你可以想象,發送一個HTTPPOST請求的處理過程其實與發送一個GET請求非常地類似。我們將修改一個現有命令,添加少量的新的命令,并添加一個來自通用連接框架的附加的對象和一個附加的StringBuffer對象把POST請求體重的內容發送到服務器中。剩下的命令將保持不變。
復制我們剛才創建的sendHttpGet()方法,把它粘貼進同一個類文件,改名為sendHttpPost()。現在,我們將修改這個新方法來發送一個HTTPPOST請求到服務器。在方法的頂部添加兩個新的變量說明。聲明一個類型為DataOutputStream的變量和另一個String類型的變量。我們將使用DataOutputStream對象把存在于字符串變量中的POST請求體發送到服務器中。
DataOutputStreamdos=null;
StringrequestBody=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();
for(inti=0;i
dos.writeByte(byteRequest[i]);
};//結束for(inti=0;i
dos.flush();//包含本句,在某些設被上將可能會產生不可預期的結果
調用flush()方法的意圖是發送已經寫入的數據到DataOutputStream的服務器的緩沖區中。在某些電話上,這個操作工作正常,在其他的電話上,它導致HTTP請求的Transfer-Encoding被設置為"chunked",有一些隨機字符被放到請求本身的前面和后面。那又怎樣處理這個問題呢?這個方法調用實際上是根本不需要的。在接下來的一行中,服務器連接打開(通過openInputStream()),將自動輸入緩沖區。因此,你最好不要調用緩沖區的flush()方法。這個方法其余的部分保持不變,除了DataOutputStream對象必須在finally{;};語句塊中關閉。
};finally{;
if(hc!=null)hc.close();
if(dis!=null)dis.close();
if(dos!=null)dis.close();
};//結束try/finally
這就是所有的程序代碼!并請參見本文后附帶的程序代碼。
隨著可以使用國際互聯網絡和支持網絡的無線設備日益的增多普及,Java和J2ME的重要性也在不斷的變大。因為HTTP協議是當前僅有的,被所有的遵從MIDP規范的設備支持的網絡協議,它也是用于開發無線網絡應用程序的最好的候選者。
在本文中,我們探究了無線網絡編程的基本結構和幾個核心問題,我們看了如何調用兩個最常用的HTTP請求方法:GET和POST。J2ME仍然在它的發展初期,并且無線設備也即將得到大面積的普及。所以,所有有志投身于無線網絡編程中的開發者們將得到大展拳腳的好機會。
隨著越來越多手提電話和個人數字助理開始融入到信息高速公路之上,從移動設備上訪問Web站點變得越來越重要。Java開創了消費設備中小型的儲存容量的先河,它是用于開發手機、傳呼機及其他微型設備應用程序的理想語言。
在本文中,我們將學習如何從一個J2ME客戶機上向服務器發送一條HTTPGET請求和一條HTTPPOST請求。雖然這只是一篇探討性質的文章,但是我還是假定讀者已經熟悉Java,J2ME,以及JavaMidlets(MIDP應用程序)的運作機制。我們將使用J2ME的MIDP簡表,并利用 SUN的J2ME的無線應用程序開發工具包編譯、配置和測試我們的應用程序。對于HTTP服務器,任何WWW地址都可以被訪問,但是默認時我們將使用一個簡單的JavaServlet來返回我們的HTTP請求的細節。
如何使用J2ME客戶機向Web服務器和類似的支持HTTP的服務器發送HTTP請求呢?答案就是使用可在javax.microedition.io程序包中可找到的J2ME的網絡類。本文就想具體闡述這個問題。
本文概述∶
使用J2ME設計無線網絡應用程序
.發送一條超文本GET請求
.發送一條超文本POST請求
.使用J2ME進行無線網絡編程
Java的網絡編程能力是相當健壯的。Java2標準版(J2SE)在java.io和java.net程序包中定義了100多個接口程序,類和異常。通過這些庫實現的功能是很強大的,但是這只適用于傳統的計算機系統,這些計算機系統有強大的CPU處理能力,快速的內存和持久的數據儲存,但是這些在大多數的無線設備上是不現實的。因此,J2ME定義了這些函數的子集,并提供了一套用于網絡和文件訪問的固定的程序包--- javax.microedition.io程序包。由于可移動設備種類繁多,這個程序包僅僅定義了一套接口,而為每個可移動設備供應廠商留下了實際的應用程序接口實現。這就在可移植性和設備特定特征的應用中找到了一個最佳的平衡點。
定義在javax.microedition.io 類中的抽象網絡和文件輸入輸出框架稱為通用連接框架(GenericConnectionFramework,簡稱GCF)。GCF定義了一套有關抽象化的內容來描述不同的通信方法。最高級的抽象被稱作連接(Connection),還聲明了六個接口(四個是直接的,兩個是間接的)。這七個接口就構成了 J2ME的CLDC的一部分,CLDC是大多數的能使用Java的無線設備使用的配置。設計這個配置的目的就是為所有的CLDC設備(手提電話,雙向傳呼機,低檔的PDA等等)提供公用的網絡和文件輸入輸出能力。雖然GCF的目的是公用網絡和文件輸入輸出框架,但是生產商并不要求實現GCF中聲明的所有的接口。有的廠家可以決定只支持socket連接,而其它的廠家可以選擇只支持基于數據報的通信。為了促進跨越類似裝置的可移植性,MIDP規范要求所有的 MIDP設備實現HttpConnection接口。HttpConnection不是GCF的一部分,但是它是從GCF的一個接口 ContentConnection衍生出來的。我們將使用HttpConnection接口構造我們樣本應用程序。
發送一個HTTPGET請求
這一節將重點解釋程序代碼,在下一節中我們將只講述被用來發送HTTP請求并檢索由服務器返回的響應通用連接框架接口和HttpConnection接口。創建MIDP用戶界面的程序代碼見附錄。
我們先要定義一個方法來放用于發送HTTPGET請求的代碼。因為這個方法中的有些操作有潛在的拋出IOException的可能,所以我們將把這樣的意外(exception)拋給調用方法。
publicStringsendHttpGet(Stringurl)throwsIOException{;
HttpConnectionhcon=null;
DataInputStreamdis=null;
StringBuffermessage="";
try{;
第一步是使用Connector類打開一個到服務器的連接,這是GCF的關鍵。我們將把這個連接強制轉換為需要的類型,在本例中為HttpConnection類型。
hcon=(HttpConnection)Connector.open(url);
接下來,我們得到HttpConnection上的一個DataInputStream,允許我們一個字符一個字符的讀取服務器的響應數據。
dis=newDataInputStream(hcon.openInputStream());
使用DataInputStream的read()方法,服務器響應的每個字符都被集中起來放入StringBuffer對象。
intch;
while((ch=dis.read())!=-1){;
message=message.append((char)ch);
};
最后,連接對象被凈空以保存資源,而信息從這個方法中返回。
};finally{;
if(hcon!=null)hcon.close();
if(dis!=null)dis.close();
};//結束try/finally代碼段
returnmessage.toString();
};//結束sendGetRequest(String)
如何發送一個HTTPPOST請求
你可以想象,發送一個HTTPPOST請求的處理過程其實與發送一個GET請求非常地類似。我們將修改一個現有命令,添加少量的新的命令,并添加一個來自通用連接框架的附加的對象和一個附加的StringBuffer對象把POST請求體重的內容發送到服務器中。剩下的命令將保持不變。
復制我們剛才創建的sendHttpGet()方法,把它粘貼進同一個類文件,改名為sendHttpPost()。現在,我們將修改這個新方法來發送一個HTTPPOST請求到服務器。在方法的頂部添加兩個新的變量說明。聲明一個類型為DataOutputStream的變量和另一個String類型的變量。我們將使用DataOutputStream對象把存在于字符串變量中的POST請求體發送到服務器中。
DataOutputStreamdos=null;
StringrequestBody=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();
for(inti=0;i
dos.writeByte(byteRequest[i]);
};//結束for(inti=0;i
dos.flush();//包含本句,在某些設被上將可能會產生不可預期的結果
調用flush()方法的意圖是發送已經寫入的數據到DataOutputStream的服務器的緩沖區中。在某些電話上,這個操作工作正常,在其他的電話上,它導致HTTP請求的Transfer-Encoding被設置為"chunked",有一些隨機字符被放到請求本身的前面和后面。那又怎樣處理這個問題呢?這個方法調用實際上是根本不需要的。在接下來的一行中,服務器連接打開(通過openInputStream()),將自動輸入緩沖區。因此,你最好不要調用緩沖區的flush()方法。這個方法其余的部分保持不變,除了DataOutputStream對象必須在finally{;};語句塊中關閉。
};finally{;
if(hc!=null)hc.close();
if(dis!=null)dis.close();
if(dos!=null)dis.close();
};//結束try/finally
這就是所有的程序代碼!并請參見本文后附帶的程序代碼。
隨著可以使用國際互聯網絡和支持網絡的無線設備日益的增多普及,Java和J2ME的重要性也在不斷的變大。因為HTTP協議是當前僅有的,被所有的遵從MIDP規范的設備支持的網絡協議,它也是用于開發無線網絡應用程序的最好的候選者。
在本文中,我們探究了無線網絡編程的基本結構和幾個核心問題,我們看了如何調用兩個最常用的HTTP請求方法:GET和POST。J2ME仍然在它的發展初期,并且無線設備也即將得到大面積的普及。所以,所有有志投身于無線網絡編程中的開發者們將得到大展拳腳的好機會。
- jsp response.sendRedirect不跳轉的原因分析及解決
- JSP指令元素(page指令/include指令/taglib指令)復習整理
- JSP腳本元素和注釋復習總結示例
- JSP FusionCharts Free顯示圖表 具體實現
- 網頁模板:關于jsp頁面使用jstl的異常分析
- JSP頁面中文傳遞參數使用escape編碼
- 基于jsp:included的使用與jsp:param亂碼的解決方法
- Java Web項目中連接Access數據庫的配置方法
- JDBC連接Access數據庫的幾種方式介紹
- 網站圖片路徑的問題:絕對路徑/虛擬路徑
- (jsp/html)網頁上嵌入播放器(常用播放器代碼整理)
- jsp下顯示中文文件名及絕對路徑下的圖片解決方法
- 相關鏈接:
- 教程說明:
JSP教程-在無線J2ME設備上實現HTTP協議1。