基于J2ME的手机相册系统
扫描二维码
随时随地手机看文章
1 引言
有关资料表明,到2005年,全球的移动电话将超过14亿部,移动电话深入每个人的生活,让具有“无线通信、随身携带”特性的移动电话伴随着因特网的发展使得移动应用前景无限。目前,手机上的软件发展经历了三个阶段: 最早只有基本的语音服务,其后增加了简单的附加应用,接着出现了WAP 方式使移动终端能访问Internet 的功能。发展到当前这个阶段,利用J2ME(Java 2 Micro Edition) 实现移动应用是一种良好的途径。
随着人们物质文化水平的提高,数码产品已经步入了百姓的日常生活,越来越多来的人拥有了数码相机或数码摄像机。这些设备拍摄的照片只能利用特殊的设备才可以浏览,那么如果我们可以利用随身携带的手机查看数码照片将是一件非常理想的事情。
基于这一想法,我们设计了这个基于J2ME手机相册系统。这个系统利用了J2ME和流技术实现对数码照片的显示。用户将自己的照片发布到相应的 web服务器上,可以随时通过手机登陆该网站,访问自己的数码照片,把网站的地址告诉亲朋则可以与大家分享这些美丽的瞬间。
2 相关技术介绍
2.1 J2ME介绍
Sun 在1999年6月时推出了 Java 2袖珍版 (J2ME)来满足消费电子和嵌入设备的需要。J2ME是为了那些使用有限的能源、有限的网络连接(常常是无线连接)以及有限图形用户界面能力的设备开发的。J2ME针对硬件的数据处理能力、存储容量、网络连接能力等规定了Configuration的概念,把上述运算功能有限、电力有限的嵌入式装置定义在Connected Limited Device Configuration(CLDC)规格之中;而另外一种装置则规范为Connected Device Configuration(CDC)规格。CLDC所使用的java虚拟机称为KVM,而CDC所使用的则称为CVM。J2ME的体系结构如图1所示。
图1 java2 平台
2.2 J2ME与Web的Http连接
Web由客户与服务器组成。客户是简单由TCP/IP加上Web浏览器组成,WEB服务器由HTTP加后台数据库组成。客户的浏览器和服务器用TCP/IP的HTTP(超文本传输协议)建立连接,使得客户与服务器二者的超媒体传输变得很容易。所有的客户及WEB服务器统一使用TCP/IP,统一分配IP,使得客户和服务器的逻辑连接变成简单的点对点连接。URL(统一资源定位器)实现了单一文档能在整个国际互联网主机中的定位。客户的请求通过WEB服务器的CGI(公用网关接口)可以很好地与后台的各种类型数据接口。
J2ME 提供了HTTP ,TCP 等高级Internet协议,使移动电话能直接访问已有Internet 的全部信息, 通过它能让用户方便地实现手机网与Internet的互连和资源共享。
2.3 流技术
Java流在处理上分为字符流和字节流。字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。Java内用Unicode编码存储字符,字符流处理类负责将外部的其他编码的字符流和java内Unicode字符流之间的转换。java对网络数据的发送和接收处理,也借用了一般流处理的方法。JDK1.4中新增加了新的I/O流处理,其中缓冲区管理和通道(Channel)概念则是对网络数据流的收发处理支持的强化。缓冲区管理中ByteBuffer类更好的支持了网络数据流处理。在网络连接中,通道代表了sockets的连接。我们正是利用字节流DataOutputStream来向Web服务器传送消息,而利用字节流DataInputStream接收从服务器返回的信息,从而实现了手机共享Internet的资源。
3 系统的设计思想
手机相册实际上是通过Http协议使手机与服务器和数据库连接,使用流技术来传送数据信息,使得手机用户可以看到服务器上存放的数码照片,服务器起到的是手机与照片资源之间通信的桥梁作用。
手机用户将通过Internet访问数据库,经过身份验证后将需求告诉服务器,服务器把用户请求的资源以流的形式进行包装,并传送给手机用户。J2ME在手机上接收流,并将数据重组为图像,显示在手机屏幕上。当用户发出结束命令,这时服务器将发出信号要求结束与服务器连接,提示用户是否断开网络,若用户选择断开网络,则关闭网络连接。由此可见本系统的关系图如图2所示。
图2 体系结构图
4关键问题的解决
4.1手机与web服务器的连接
目前有多种与web服务器连接方式,为了使其使用方便和便于理解,本系统使用了HTTP的联结方式。通过对HttpConnection类进行编程可以实现手机与Web服务器的Http连接,利用DataOutputStream类可以把向服务器发送的命令封装进流中进行传送。手机端的部分连接代码如下:
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();
……
}
通过以上代码,可以实现连接web服务器,并且post出去两个参数,以便服务器验证用户身份。其他向服务器传送命令的代码类似。
当MySearch.jsp得到MyGet参数时,JSP得到服务器上存放照片文件夹的图像文件列表,将文件名逐一传送到客户端。
String jname=request.getParameter("MyGet");
if(jname.equals("IsOk")){
……
out.print(XXX.png); //循环打印文件名
……
}
在手机客户端利用DataInputStream类接收数据,再将的到的文件名显示再手机屏幕上,以便用户选择浏览。其代码如下:
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服务器上的文件可以通过多种方式,例如利用XML进行包装,利用Socket技术,利用流技术进行传送等。为了减少手机和服务器的负担,提高效率,减少代码本系统采用流技术传送图像文件。在手机端利用InputStream类接收得到的图像信息数据。其代码如下:
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服务器提出申请后,服务器会返回用户请求的资源,图像文件备包装进一个Stream发送给用户。J2ME利用InputStream来接收输入流,并利用Image的createImage方法将数据流转换为Image类型,以便在手机上显示。
5 总结
本文给出了一个基于J2ME 的个人相册的设计和实现,保证了用户及时地通过移动终端访问服务器上的照片。采用流作为数据交换的工具,实现了文件的远程传递和重组。。利用当前使用最广泛的HTTP 通信协议,将传统的Internet 网站与移动终端相结合,验证了建立移动个人相册的可行性。并为实现基于J2ME 的小型移动图像浏览系统提供了一种可行的方案。