《电子技术应用》
您所在的位置:首页 > 其他 > 业界动态 > 浅析利用j2me和j2ee构建小型移动设备的应用

浅析利用j2me和j2ee构建小型移动设备的应用

2009-02-05
作者:于海涛
引      言
今天,无线、跨平台、以及嵌入式应用已经成为非常流行和时尚的技术应用。在手机、PDA、以及其他一些智能移动设备已经随处可见, MICROSOFT,SYMBIAN在手机,PDA这些小型设备上的OS开发已日趋成熟的同时,用户对于智能移动设备应用软件的种类、性能提出更高的要求,对于如何在这些平台上为程序员提供良好,可移植应用软件的开发环境成为一个新的课题。
1、J2me以及J2me的总体架构
J2me的诞生:我们知道SUN公司在设计java语言之初是要面向消费类电器,并将它定位于实现一种为嵌入式处理器编写程序的可移植方法。SUN的工程师们带着这个目的开发出来的JAVA语言以及虚拟机的运行机制,必然具有可以在设备间移植代码的CPU无关性,安全性,简洁性。可见JAVA作为开发小型智能移动设备的开发语言在合适不过了,于是SUN公司在J2SE(JAVA 2 STANDARD EDITION)的基础上为小型智能设备量身订做了J2SE的简化版本J2ME(Java 2 MICRO EDITION),并在1999 年 6loper Conference 上正式宣布J2ME的诞生。
J2ME的总体架构:J2ME使用配置和简表定制 Java 运行时环境,配置将基本运行时环境定义为一组核心类和一个运行在特定类型设备上的特定 JVM,而简表则定义了应用程序所支持的设备类型。
配置:正如上面所说配置将基本运行时环境定义为一组核心类和一个运行在特定类型设备上的特定 JVM。当前 J2ME 主要存在两种配置:连接设备配置 (CDC) CDC是应用在具有较大内存,特别是2MB以上的设备上的,CDC针对有限和间歇的无线连接设备,CDC与CVM和Foundation profile共同定义了完全的J2ME环境。连接限制设备配置 (CLDC)是针对少于512KB内存footprint的设备的配置。CLDC采用的是KVM,它是高度优化的JVM方式,他针对的是16比特或32比特的微处理器,160到512 KB内存为基础的低端,网络连接,电池驱动的设备。这里需要说明的是,无论应用在J2ME上的虚拟机CVM还是KVM都是J2SE虚拟机JVM的缩略版。他们之间的关系如下图:

简表:正如前面所讲的,简表为J2ME定义了应用程序所支持的设备类型,它是通过向 J2ME 配置添加了特定于域的类来定义设备的某种作用的。它位于配置的顶部。J2me为CLDC主要定义了两种简表:MIDP(移动信息简表)和KJAVA,支持小型设备。同时为CDC也定义了一种基础表(也叫纲要简表)主要应用于家用电器,汽车导航系统这种比较大的终端。 

    注:CDC和CLDC目标设备的区别: 

2、J2ME-J2EE架构的优势 

我们知道虽然利用J2ME可以开发一些不需要运行在无线网络环境的小应用程序(比如计算器,小游戏,日历),但是这并不是J2ME诞生的真正意义,随着信息社会的到来,人们对于资源需求的不断膨胀,对于信息储备极其有限的手机,PDA这种小型设备来说,互连网络是他们获取信息的最佳的途径。于是人们针对这个问题研究,并制定了各种各样的方案,这里我首推J2ME-J2EE架构。 

关于J2EE(Java 2 Platform Enterprise Edition)J2EE是一种利用Java 2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。J2EE技术的基础就是核心Java平台或Java 2平台的标准版,J2EE不仅巩固了标准版中的许多优点,例如"编写一次、随处运行"的特性、方便存取数据库的JDBC API、CORBA技术以及能够在Internet应用中保护数据的安全模式等等,同时还提供了对 EJB(Enterprise JavaBeans)、Java Servlets API、JSP(Java Server Pages)以及XML技术的全面支持。其最终目的就是成为一个能够使企业开发者大幅缩短投放市场时间的体系结构。有了J2EE,使得服务器端的开发有了强有力的支持。 

但是网络应用的模式有很多,为什么非要选择J2ME+J2EE的架构呢? 

传统的网络开发通常采用瘦客户端的形式,瘦客户端是基于浏览器的应用,主要使用HTML,WML,HDML。但是这种架构需要连接到高速网络才能很好的工作。这显然不太适合无线网络。凭借J2ME背后强大的JAVA技术的支持,再加上采用JAVA服务器技术J2EE作为服务端,J2ME完全可以设计出超越瘦客户端的新的客户端形式,即智能客户端。 

J2ME-J2EE架构图示:

它的优势体现在: 

(1). 离线能力(即在设备掉线情况下仍能正常工作) 

(2).客户端逻辑(即可以本地确认和存储数据) 

(3).异步网络(即数据能导向到设备) 

(4).更好的响应效率  

这里需要强调的是J2ME+J2EE的架构是基于HTTP协议的,HTTP协议,以及HTTP协议的扩展协议HTTPS本身具有很多优势,在互连网上有很广泛的应用。 

拥有了以上的优势,J2ME+J2EE的架构无疑为我们提供了一个很好的解决方案。 

3、J2ME-J2EE的架构的分析和设计思路 

常用的应用模型:随着手机及其他小型设备的普及,我们可以看到很多基于手机的无线应用,基于短信的居多(比如在线评球,在线竟猜,和一些在线的小游戏),显然应用在技术上已经比较成熟。我们把这种模型称为长时间离线型。它的特点在于何时在线并不影响应用,设立更多的本地模块,通常基于短信的模式。这种设计可以极大的降低连接成本,并且由于数据交互在后台进行,不需要用户在进行干预。 

与长时间离线型相对的另外一种应用模型便是长时间连线型,顾名思义这种应用模型需要在线状态下运行,并且采用客户端-服务端的运行模式,使得用户可以实时的查询和更新数据,J2ME-J2EE的架构通常被这种模型的设计采用,下面我简单举例说明一下采用J2ME-J2EE架构实现的长时间应用模型的设计过程。

(天气情况查询系统)客户段的设计:客户端采用J2ME编写,主要采用基于HTTP协议的javax.microedition.io.HttpConnection类来完成,手机在上网之后通过它可以实现与运行在INTERNET上的J2EE服务器的数据交换。使用它的主要函数是GetWeather(),代码片段如下: 

public void getWeather() {…… 

try {…… 

URL=”www.x.com/X.JSP?Country=x” 

StringBuffer sb = new StringBuffer(URL); 

sb.append(urlEncode(postalCode.getString())); 

        HttpConnection conn = (HttpConnection)Connector.open(sb.toString()): 

        InputStream is = conn.openInputStream();//获取输入流 

        String contentType = conn.getType(); 

        int len = (int)conn.getLength(); 

        receivedData = new byte[len]; 

        int nb = is.read(receivedData);//得到数据 

        ……} 

上面的实例是基于HTTP协议的GET请求协议,并通过OpenInputStream来获得数据流,当然我们也可以采用POST的请求方式,我们知道POST请求的参数是存放到消息体里的,所以我们要用到OpenOutputStream来返回一个输出流,并且采用write(“attributeA value”)将参数写入消息体。(实际上基于J2ME的客户端应用主要发送HTTP的请求消息,输出流已经不想SOCKET编程应用的那么频繁,基本上只在写入POST参数才会用到。) 

服务器的设计服务器端用一个简单的javaBean+JSP即可,这里就是简单的实现。 

Sring postalCode = (String)request.getParameter("postalCode"); 

…… 

      ResultSet rs = stmt.executeQuery(query); 

      if (rs.next()) { 

        request.setAttribute ("city", rs.getString("city") 

        request.setAttribute ("stateprovince", rs.getString("province")); 

        request.setAttribute ("weather", rs.getString("weather")); 

        nextJSP = "/ReportWeather.jsp"; 

       } 

…… 

rd.forward(request, response); 

当然在系统设计的同时,我们通常有许多因素要考虑到,是我对于这个问题的一些思路。

应当考虑的因素: 

1.保证J2ME的应用不会被外来的不可抗拒的因素破坏,中断,这种因素主要来自于J2ME的设备的主要应用(比如手机收到电话,短信),所以尽可能的采用后台线程来管理应用程序,避免这些因素的影响。 

2.小型设备并非采用像PC一样的标准键盘,如何用小键盘进行准确的输入也是应当考虑的问题(比如采用详细的选择列表代替用户的输入)。 

3.安全性,包括数据在传输过程中被窃取,J2ME设备的毁坏和遗失造成的数据丢失 (我们可以对数据进行加密,并且采取措施定期的对数据备份) 

关于MIDP2。0:MIDP作为应用在CLDC配置上的一种结构已经得到了日趋广泛的应用,MIDP2.0作为MIDP1.0的升级版本曾加了许多新的特性。包括HTTPS成为必要组件,一些包括播放声音在内的一些多媒体API集的引入,并且通过曾加用户接口,对游戏编程提供了特别的支持。 

结束语 

通过上面的介绍,我们可以看到通过J2ME技术与J2EE技术的结合完全可以构筑完备的企业级无线应用,随着手机,PDA为代表的小型智能设备的进一步发展,相信以J2ME为代表的JAVA技术会有更为广阔的施展舞台。 

参考文献: 

1.Sun公司J2ME 网站  

2.J2ME专业开发者指南 MIDP Wiley,IS BN 0471034657 

3.sun网络社区  

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。