基于J2ME的手機相冊系統
1 引言
本文引用地址:http://dyxdggzs.com/article/257802.htm有關(guān)資料表明,到2005年,全球的移動(dòng)電話(huà)將超過(guò)14億部,移動(dòng)電話(huà)深入每個(gè)人的生活,讓具有“無(wú)線(xiàn)通信、隨身攜帶”特性的移動(dòng)電話(huà)伴隨著(zhù)因特網(wǎng)的發(fā)展使得移動(dòng)應用前景無(wú)限。目前,手機上的軟件發(fā)展經(jīng)歷了三個(gè)階段: 最早只有基本的語(yǔ)音服務(wù),其后增加了簡(jiǎn)單的附加應用,接著(zhù)出現了WAP 方式使移動(dòng)終端能訪(fǎng)問(wèn)Internet 的功能。發(fā)展到當前這個(gè)階段,利用J2ME(Java 2 Micro Edition) 實(shí)現移動(dòng)應用是一種良好的途徑。
隨著(zhù)人們物質(zhì)文化水平的提高,數碼產(chǎn)品已經(jīng)步入了百姓的日常生活,越來(lái)越多來(lái)的人擁有了數碼相機或數碼攝像機。這些設備拍攝的照片只能利用特殊的設備才可以瀏覽,那么如果我們可以利用隨身攜帶的手機查看數碼照片將是一件非常理想的事情。
基于這一想法,我們設計了這個(gè)基于J2ME手機相冊系統。這個(gè)系統利用了J2ME和流技術(shù)實(shí)現對數碼照片的顯示。用戶(hù)將自己的照片發(fā)布到相應的 web服務(wù)器上,可以隨時(shí)通過(guò)手機登陸該網(wǎng)站,訪(fǎng)問(wèn)自己的數碼照片,把網(wǎng)站的地址告訴親朋則可以與大家分享這些美麗的瞬間。
2 相關(guān)技術(shù)介紹
2.1 J2ME介紹
Sun 在1999年6月時(shí)推出了 Java 2袖珍版 (J2ME)來(lái)滿(mǎn)足消費電子和嵌入設備的需要。J2ME是為了那些使用有限的能源、有限的網(wǎng)絡(luò )連接(常常是無(wú)線(xiàn)連接)以及有限圖形用戶(hù)界面能力的設備開(kāi)發(fā)的。J2ME針對硬件的數據處理能力、存儲容量、網(wǎng)絡(luò )連接能力等規定了Configuration的概念,把上述運算功能有限、電力有限的嵌入式裝置定義在Connected Limited Device Configuration(CLDC)規格之中;而另外一種裝置則規范為Connected Device Configuration(CDC)規格。CLDC所使用的java虛擬機稱(chēng)為KVM,而CDC所使用的則稱(chēng)為CVM。J2ME的體系結構如圖1所示。
圖1 java2 平臺
2.2 J2ME與Web的Http連接
Web由客戶(hù)與服務(wù)器組成??蛻?hù)是簡(jiǎn)單由TCP/IP加上Web瀏覽器組成,WEB服務(wù)器由HTTP加后臺數據庫組成??蛻?hù)的瀏覽器和服務(wù)器用TCP/IP的HTTP(超文本傳輸協(xié)議)建立連接,使得客戶(hù)與服務(wù)器二者的超媒體傳輸變得很容易。所有的客戶(hù)及WEB服務(wù)器統一使用TCP/IP,統一分配IP,使得客戶(hù)和服務(wù)器的邏輯連接變成簡(jiǎn)單的點(diǎn)對點(diǎn)連接。URL(統一資源定位器)實(shí)現了單一文檔能在整個(gè)國際互聯(lián)網(wǎng)主機中的定位??蛻?hù)的請求通過(guò)WEB服務(wù)器的CGI(公用網(wǎng)關(guān)接口)可以很好地與后臺的各種類(lèi)型數據接口。
J2ME 提供了HTTP ,TCP 等高級Internet協(xié)議,使移動(dòng)電話(huà)能直接訪(fǎng)問(wèn)已有Internet 的全部信息, 通過(guò)它能讓用戶(hù)方便地實(shí)現手機網(wǎng)與Internet的互連和資源共享。
2.3 流技術(shù)
Java流在處理上分為字符流和字節流。字符流處理的單元為2個(gè)字節的Unicode字符,分別操作字符、字符數組或字符串,而字節流處理單元為1個(gè)字節,操作字節和字節數組。Java內用Unicode編碼存儲字符,字符流處理類(lèi)負責將外部的其他編碼的字符流和java內Unicode字符流之間的轉換。java對網(wǎng)絡(luò )數據的發(fā)送和接收處理,也借用了一般流處理的方法。JDK1.4中新增加了新的I/O流處理,其中緩沖區管理和通道(Channel)概念則是對網(wǎng)絡(luò )數據流的收發(fā)處理支持的強化。緩沖區管理中ByteBuffer類(lèi)更好的支持了網(wǎng)絡(luò )數據流處理。在網(wǎng)絡(luò )連接中,通道代表了sockets的連接。我們正是利用字節流DataOutputStream來(lái)向Web服務(wù)器傳送消息,而利用字節流DataInputStream接收從服務(wù)器返回的信息,從而實(shí)現了手機共享Internet的資源。
3 系統的設計思想
手機相冊實(shí)際上是通過(guò)Http協(xié)議使手機與服務(wù)器和數據庫連接,使用流技術(shù)來(lái)傳送數據信息,使得手機用戶(hù)可以看到服務(wù)器上存放的數碼照片,服務(wù)器起到的是手機與照片資源之間通信的橋梁作用。
手機用戶(hù)將通過(guò)Internet訪(fǎng)問(wèn)數據庫,經(jīng)過(guò)身份驗證后將需求告訴服務(wù)器,服務(wù)器把用戶(hù)請求的資源以流的形式進(jìn)行包裝,并傳送給手機用戶(hù)。J2ME在手機上接收流,并將數據重組為圖像,顯示在手機屏幕上。當用戶(hù)發(fā)出結束命令,這時(shí)服務(wù)器將發(fā)出信號要求結束與服務(wù)器連接,提示用戶(hù)是否斷開(kāi)網(wǎng)絡(luò ),若用戶(hù)選擇斷開(kāi)網(wǎng)絡(luò ),則關(guān)閉網(wǎng)絡(luò )連接。由此可見(jiàn)本系統的關(guān)系圖如圖2所示。
圖2 體系結構圖
4關(guān)鍵問(wèn)題的解決
4.1手機與web服務(wù)器的連接
目前有多種與web服務(wù)器連接方式,為了使其使用方便和便于理解,本系統使用了HTTP的聯(lián)結方式。通過(guò)對HttpConnection類(lèi)進(jìn)行編程可以實(shí)現手機與Web服務(wù)器的Http連接,利用DataOutputStream類(lèi)可以把向服務(wù)器發(fā)送的命令封裝進(jìn)流中進(jìn)行傳送。手機端的部分連接代碼如下:
HttpConnection hpc = null;
DataOutputStream dos = null;
strIp = http://127.0.0.1:8080 /Login.jsp ;
try {
hpc = (HttpConnection) Connector.open(strIp, Connector.READ_WRITE);
hpc.setRequestMethod(HttpConnection.POST);
hpc.setRequestProperty(Content-Type,
application/x-www-form-urlencoded);
dos = new DataOutputStream(hpc.openDataOutputStream());
dos.write( (no= + stname).getBytes());
dos.write(.getBytes());
dos.write( (pass= + stpass).getBytes());
dos.close();
……
}
通過(guò)以上代碼,可以實(shí)現連接web服務(wù)器,并且post出去兩個(gè)參數,以便服務(wù)器驗證用戶(hù)身份。其他向服務(wù)器傳送命令的代碼類(lèi)似。
當MySearch.jsp得到MyGet參數時(shí),JSP得到服務(wù)器上存放照片文件夾的圖像文件列表,將文件名逐一傳送到客戶(hù)端。
String jname=request.getParameter(MyGet);
if(jname.equals(IsOk)){
……
out.print(XXX.png); //循環(huán)打印文件名
……
}
在手機客戶(hù)端利用DataInputStream類(lèi)接收數據,再將的到的文件名顯示再手機屏幕上,以便用戶(hù)選擇瀏覽。其代碼如下:
HttpConnection hpc = null;
DataInputStream dis = null;
hpc = (HttpConnection) Connector.open(localUrl, Connector.READ_WRITE);
……
dis = new DataInputStream(hpc.openDataInputStream());
StringBuffer b = new StringBuffer();
int ch;
while ( (ch = dis.read()) != -1) {
……
}
……
4.2利用流傳輸文件及文件的再現
手機得到web服務(wù)器上的文件可以通過(guò)多種方式,例如利用XML進(jìn)行包裝,利用Socket技術(shù),利用流技術(shù)進(jìn)行傳送等。為了減少手機和服務(wù)器的負擔,提高效率,減少代碼本系統采用流技術(shù)傳送圖像文件。在手機端利用InputStream類(lèi)接收得到的圖像信息數據。其代碼如下:
public Image MyImage;
public String ImageName;
……
HttpConnection con = null;
InputStream ins = null;
String MyIp = http://127.0.0.1:8080/+ ImageName;
try {
con = (HttpConnection) Connector.open(MyIp, Connector.READ_WRITE);
……
ins = con.openDataInputStream();
MyImage = Image.createImage(ins);
}
……
向web服務(wù)器提出申請后,服務(wù)器會(huì )返回用戶(hù)請求的資源,圖像文件備包裝進(jìn)一個(gè)Stream發(fā)送給用戶(hù)。J2ME利用InputStream來(lái)接收輸入流,并利用Image的createImage方法將數據流轉換為Image類(lèi)型,以便在手機上顯示。
5 總結
本文給出了一個(gè)基于J2ME 的個(gè)人相冊的設計和實(shí)現,保證了用戶(hù)及時(shí)地通過(guò)移動(dòng)終端訪(fǎng)問(wèn)服務(wù)器上的照片。采用流作為數據交換的工具,實(shí)現了文件的遠程傳遞和重組。。利用當前使用最廣泛的HTTP 通信協(xié)議,將傳統的Internet 網(wǎng)站與移動(dòng)終端相結合,驗證了建立移動(dòng)個(gè)人相冊的可行性。并為實(shí)現基于J2ME 的小型移動(dòng)圖像瀏覽系統提供了一種可行的方案。
評論