📄 用j2me开发企业级无线应用-开发者网络-j2me-天极yesky.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<!-- saved from url=(0038)http://dev.yesky.com/184/2394184.shtml -->
<HTML lang=zh-CN xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>用J2ME开发企业级无线应用-开发者网络-J2ME-天极Yesky</TITLE>
<META content=用J2ME开发企业级无线应用, name=description>
<META content=用J2ME开发企业级无线应用, name=keywords>
<META content="天极Yesky | 全球中文IT第一门户" name=author>
<META content="天极Yesky | 全球中文IT第一门户" name=Copyright>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META http-equiv=Content-Language content=zh-CN><LINK media=all
href="用J2ME开发企业级无线应用-开发者网络-J2ME-天极Yesky.files/y_mobile_content.css"
type=text/css rel=stylesheet>
<SCRIPT src="用J2ME开发企业级无线应用-开发者网络-J2ME-天极Yesky.files/showlay.js"></SCRIPT>
<META content="MSHTML 6.00.2900.3132" name=GENERATOR></HEAD>
<BODY><!--页面头部--><!--头部-->
<DIV id=topmenu><A href="http://www.yesky.com/">Yesky首页</A>| <A
href="http://product.yesky.com/">产品报价</A>| <A
href="http://cseek.yesky.com/">行情</A>| <A href="http://mobile.yesky.com/">手机</A>
| <A href="http://digital.yesky.com/">数码</A> | <A
href="http://notebook.yesky.com/">笔记本</A> | <A
href="http://pc.yesky.com/">台式机</A> | <A href="http://diy.yesky.com/">DIY硬件</A>
| <A href="http://oa.yesky.com/">外设</A> | <A href="http://net.yesky.com/">网络</A>
| <A href="http://dh.yesky.com/">数字家庭</A> | <A
href="http://lab.yesky.com/">评测</A> | <A href="http://soft.yesky.com/">软件</A> |
<A href="http://e.yesky.com/">e时代</A> | <A href="http://game.yesky.com/">游戏</A>
| <A href="http://pic.yesky.com/">图片</A> | <A
href="http://desktop.yesky.com/">壁纸</A> | <A href="http://q.yesky.com/">群乐</A> |
<A href="http://my.yesky.com/">社区</A> | <A href="http://blog.yesky.com/">博客</A>
| <A href="http://www.mydown.com/">下载</A></DIV>
<DIV id=topbox>
<DIV class=tleft><A href="http://www.yesky.com/"><IMG alt=天极Yesky_全球中文IT第一门户
src="用J2ME开发企业级无线应用-开发者网络-J2ME-天极Yesky.files/logo.gif" border=0></A></DIV>
<DIV class=tad><SPAN id=ad1></SPAN></DIV>
<DIV id=search>
<DIV>
<FORM name=searchform action=http://search.chinabyte.com/search method=get
target=_blank><INPUT id=searchzz onmouseover=this.focus() onfocus=this.select()
name=q><INPUT type=hidden value=GB2312 name=encoding><INPUT type=hidden
value=connect name=dir><INPUT type=hidden value=20002 name=cid><INPUT id=search_btn type=submit value=天极搜索> </FORM></DIV>
<DIV class=tdq>
<DIV class=rightarea><A href="http://bj.yesky.com/">北京</A> <A
href="http://hd.yesky.com/">上海</A> <A href="http://gd.yesky.com/">广东</A> <A
href="http://xa.yesky.com/">西安</A><BR><A href="http://cq.yesky.com/">重庆</A> <A
href="http://cd.yesky.com/">成都</A> <A href="http://sy.yesky.com/">沈阳</A> <A
href="http://js.yesky.com/">江苏</A> </DIV>
<DIV class=rightarea_right><A
href="http://my.yesky.com/">用户<BR>登录</A></DIV></DIV></DIV>
<DIV class=tright>
<DIV class=box1>
<SCRIPT src="用J2ME开发企业级无线应用-开发者网络-J2ME-天极Yesky.files/content_text_ad.js"
type=text/javascript></SCRIPT>
</DIV></DIV></DIV>
<SCRIPT src="用J2ME开发企业级无线应用-开发者网络-J2ME-天极Yesky.files/flash.js"
type=text/javascript></SCRIPT>
<DIV id=childmenu><A href="http://soft.yesky.com/">软件频道></A><A
href="http://dev.yesky.com/">程序开发></A><A
href="http://dev.yesky.com/devjava/">Java</A><A
href="http://dev.yesky.com/ysdevvb">VB</A><A
href="http://dev.yesky.com/ysdevvc">VC</A><A
href="http://dev.yesky.com/ysdevdelphi">Delphi</A><A
href="http://dev.yesky.com/ysdevc">C/C++</A><A
href="http://dev.yesky.com/web/">Web开发</A><A
href="http://dev.yesky.com/msdn/">微软专栏</A><A
href="http://dev.yesky.com/devydkf/">移动</A><A
href="http://dev.yesky.com/devsjk/">数据库</A><A
href="http://dev.yesky.com/ysdevcxrs">程序人生</A><A
href="http://dev.yesky.com/ysdevrjgc">软件工程</A>|<A
href="http://soft.yesky.com/lesson/">产品中心</A><A
href="http://www.mydown.com/soft/develop/news.shtml">下载</A><A
href="http://q.yesky.com/group/179"><FONT
color=#ff0000>群乐:大家耍QQ</FONT></A></DIV><!--导航条-->
<DIV id=location>
<DIV class=loleft>您现在的位置: <A href="http://www.yesky.com/">天极Yesky</A> > <A
href="http://soft.yesky.com/">软件频道</A> > <A
href="http://dev.yesky.com/">开发者网络</A> > 用J2ME开发企业级无线应用</DIV>
<DIV class=adright><SPAN id=ad2></SPAN></DIV></DIV><!--内容块开始-->
<DIV id=conbox><!--左边开始-->
<DIV id=conleft>
<DIV id=contopla1>
<DIV id=__001>
<DIV class=qkong></DIV>
<DIV class=qw1>全文</DIV>
<DIV class=zkong>
<DIV class=kl></DIV>
<DIV class=bj><A href="http://dev.yesky.com/184/2394184.shtml#pls"
target=_self>评论</A></DIV>
<DIV class=kr></DIV>
<SCRIPT type=text/javascript>
var titiepic ="#";
if (titiepic!="#")
{
document.write("<div class=\"kl\"></div><div class=\"bj\"><a href=\"#\" target=\"_blank\">图片</a></div><div class=\"kr\"></div>");
}
</SCRIPT>
</DIV></DIV></DIV>
<DIV class=topadbg><SPAN id=ad10></SPAN></DIV><A name=top></A>
<DIV id=contitle>
<H1>用J2ME开发企业级无线应用</H1></DIV>
<DIV id=conauthor><SPAN>2006-05-11 08:06 </SPAN><SPAN>作者: </SPAN><SPAN>出处:
j2me开发网 </SPAN><SPAN>责任编辑:<A title=向本编辑提问
href="http://comments.yesky.com/t/·½ÖÛ/6,324/2394184.shtml" target=_blank>方舟</A>
</SPAN></DIV>
<DIV class=topadbg><SPAN id=ad9></SPAN></DIV>
<DIV id=conneirong><SPAN id=ad3></SPAN>
<DIV class=guanggao><SPAN id=contentAdv></SPAN></DIV> <A class=bluekey
href="http://dev.yesky.com/devjava/"
target=_blank>Java</A>技术正日益影响着我们的生活,从桌面到Web应用,到服务器端组件,再到智能移动终端(手机、PDA),Java技术无处不在。利用Java技术,结合J2ME和J2EE平台,我们可以快速开发出健壮、安全和可扩展的企业级无线应用系统。您将在本文中看到,如何应用Java无线应用技术设计和实现一个移动客户支持管理系统。该系统是桌面型客户关系管理系统在智能移动终端上的扩展,主要应用于中小型企业的客户管理部门。移动客户支持管理系统有助于现场销售人员和服务工程师及时地了解公司产品信息,更好地管理客户和联系人资料,制造和把握更多的商业机会,并且能够快速有效地处理好客户发出的请求。
<BR><BR><FONT
color=#000099><STRONG> 系统需求</STRONG></FONT><BR><BR> 现场销售人员在与客户洽谈时,需要及时地了解客户和联系人的详细资料,管理相关的商业机会,清楚公司产品的报价、存货等信息,能够方便地进行查询(多条件)、创建、更新和删除(权限允许)等操作,并且能够把相关数据下载到手机当中。另外,现场服务工程师需要随时掌握客户的服务请求及其客户和联系人信息,以便做出迅速的反映,协调处理好该服务请求。由于客户、联系人资料等需要填写较多的数据,系统应当支持离线和在线两种工作方式,用户可以先在离线方式下创建数据信息,保存到手机当中,再上传数据,进行同步,从而节省费用。开发工具我选择IBM
WebSphere Studio。 <BR><BR><FONT
color=#000099><STRONG> 系统设计与实现</STRONG></FONT><BR><BR> 考虑到系统的安全性、扩展性和可维护性,我决定在J2EE平台下开发服务器端程序,这样做系统复杂度低、成本低、系统性能优越。系统客户端是运行在Java手机上的,因此必须充分考虑这一特点,并在开发中加以应用。系统设计的目标是分开业务逻辑和表示层,它是一个典型的四层分布式MVC应用体系架构,下面将对其设计思想和实现原理进行详细阐述。
<BR><BR><B> 客户端(Client Tier)</B>
<BR><BR> 客户端获得用户请求后提交给远程服务器,得到结果后加以表现。我选择在J2ME(CLDC+MIDP)平台上开发客户端程序。由于MIDlet程序开发具有内存小、界面简单、有限的运算能力和网络性能等特点,需要重点设计以下几个方面:
<BR><BR> 1.与Web服务器之间的通信
<BR><BR> J2ME支持打开网络连接、传送数据、访问远程服务器资源。首先,用户在离线方式下设置系统参数,指定本公司Web服务器的IP地址、端口和Web根目录,选择工作方式(在线或者离线)。随后,程序将两条相关信息写进本地数据库,一条记录Web服务器地址,另一条记录工作方式。每当系统启动或者切换工作方式时加载,这样可以使得MIDlet工作在适当的状态。MIDlet编程支持HTTP网络连接,代码如下:
<BR><BR>
<TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=550
align=center borderColorLight=black border=1>
<TBODY>
<TR>
<TD class=code bgColor=#e6e6e6><PRE><CCID_CODE>HttpConnection conn = (HttpConnection)Connector.open(url);</CCID_CODE></PRE></TD></TR></TBODY></TABLE><BR><BR> 这样就在客户端与Web服务器之间建立了HTTP连接,其中url存储了请求参数信息,比如:
<BR><BR>url =
"http://www.mcrm.com:8000/CRMRoot/custCreateAlias?id=001&name=..."
<BR><BR> Web服务器中相应的Servlet将调用doGet()方法处理请求,返回响应,从而把业务逻辑的处理交给服务器端,达到“瘦”客户端的设计目标。建好HTTP连接以后,就可以方便地操作数据流,进行数据读写了,代码如下:
<BR><BR>
<TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=550
align=center borderColorLight=black border=1>
<TBODY>
<TR>
<TD class=code bgColor=#e6e6e6><PRE><CCID_CODE>InputStream in = conn.openInputStream();
int data;
while(data=in.read()!=0){...} ...</CCID_CODE></PRE></TD></TR></TBODY></TABLE><BR> 需要注意的是,有的手机对中文的支持还不算很完善,其中有些地方需要进行编码转换。
<BR><BR> 客户端编程的重点在于准确地提交用户请求参数、创建和查询客户信息、联系人信息、商业机会和服务请求,并可对查询到的结果进行更新、删除和下载。实现时,类CRMCustomer、类CRMLinkman、类CRMOpportunity、类CRMService封装了这些方法;类custSearch、类linkSearch、类oppoSearch、类servSearch提供了查询的界面;类CRMViewProduct实现了查看产品信息的功能。它们的实现手段相同,都是通过生成并提交存储请求参数信息的url,打开HTTP连接,请求服务响应来达到目的。]
<BR><BR><IMG src="用J2ME开发企业级无线应用-开发者网络-J2ME-天极Yesky.files/4pwlmy56xp6o.gif"
twffan="done"><BR><BR>图1 移动客户支持管理系统体系架构简图 <BR><BR> 2.本地数据库操作
<BR><BR> MIDP(Mobile Information Device Profile)支持对持久数据的存储,J2ME记录管理系统 ( RMS
)允许数据流被储存并在一个记录基础上访问数据,由应用程序开发者把每个记录解析到字段水平。系统需要存储的是包含用户请求参数信息的URL,从第三条记录开始读写(前两条已做系统参数用)。调用J2ME中类RecordStore的getRecord(int
recordId)、addRecord(byte[] data, int offset, int
numBytes)方法进行基本的读、写操作,并以“&”为标志符解析数据记录url,得到名/值对。系统把整个本地数据库操作封装在类CRMdb当中,这样,这些操作就可重用。
<BR><BR> 3.XML解析 <BR><BR> XML(Extensible Markup
Language)是一种独立于系统的表达数据信息的标记语言,现已成为网络系统中通用的数据交换格式。本系统采用XML技术进行数据交换,利用它的分级结构,很容易访问到所需的数据信息。这就意味着想要取得远程服务器端XML文档中的数据信息,MIDlet编程就必须支持XML解析技术。从网上不难得到J2ME端的XML解析器,本系统采用的是NanoXML,它是一种非确认(non-validating)、单步(single-step)解析器。NanoXML解析整个XML文档,并把它转换成一棵元素树(如图2),可以通过调用方法getChildren、getTagName、getContents等来遍历整棵树,得到数据信息。
<BR><BR><IMG src="用J2ME开发企业级无线应用-开发者网络-J2ME-天极Yesky.files/3y1qtindc7i0.gif"
twffan="done"> <BR> 图2 XML文件和相对应的树型文件模型 <BR><BR> <B>表示层(Web Tier)</B>
<BR><BR> Servlets和JavaBean构成了表示层。这是一种控制结构,减低了视图与模型之间的耦合性。当Servlet响应到一个HTTP
GET请求时,doGet()方法被service()方法的默认实现所调用,并把request对象和response对象作为参数传给该函数。整个程序覆盖了doGet()方法,它们所做主要工作是创建JavaBean实例,传递request对象,调用bean方法,取得存放于Bean中的数据,返回结果(XML文档)。JavaBean封装了更为复杂的业务逻辑,可以调用EJB方法执行各种数据存取的事务。JavaBean是一种可重用组件,提高代码复用性,加快了软件开发过程。如上所述,系统利用JAXP和W3C提供的访问XML的接口DOM来处理XML文档。代码如下所示:
<BR><BR>
<TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=550
align=center borderColorLight=black border=1>
<TBODY>
<TR>
<TD class=code bgColor=#e6e6e6><PRE><CCID_CODE><custList>
<matchedCust>7</matchedCust>
<customer>
<id>Cust_001</id>
<name>Oliver</name>
</customer>
</custList></CCID_CODE></PRE></TD></TR></TBODY></TABLE><BR> <B>业务逻辑层(Business
Tier)</B> <BR><BR> EJB
container提供了一种系统级服务,开发者只需要专注于业务逻辑处理即可。系统运用实体Bean封装数据对象,建立与数据库间的映射。会话Bean封装了业务逻辑,该系统实现的会话Bean是无状态的。业务逻辑层结构如图3所示。
<BR><BR><IMG src="用J2ME开发企业级无线应用-开发者网络-J2ME-天极Yesky.files/22t331b9g7mp.gif"
twffan="done"> <BR>图3 业务逻辑层结构设计 <BR><BR> EJBs功能如表1。 <BR><BR> 表1<BR><BR>
<TABLE class=content cellSpacing=0 cellPadding=0 width=502 border=1>
<TBODY>
<TR>
<TD>包ejb.entity</TD>
<TD>封装了客户、联系人、产品、商业机会及客户服务请求等数据信息,并提供Home、Remote访问接口。</TD></TR>
<TR>
<TD>包ejb.session</TD>
<TD>封装了系统所需的业务逻辑和数据操作,包括添加、查询、更新和删除各项信息,并提供Home、Remote访问接口,也提供了一些方便数据操作的辅助类。</TD></TR></TBODY></TABLE><BR> <B>数据库(Backend
Tier)</B> <BR><BR> 利用Sun公司提供的JDBC
API可以很方便地操作关系型数据库(RDBMS),如上所述,实体Bean要与数据库表建立一种良好的映射关系。设计数据库时要注意主键值,它是惟一标识。本系统数据库共有五张表,见表2。
<BR><BR> 表2 <BR><BR>
<TABLE class=content cellSpacing=0 cellPadding=0 width=502 border=1>
<TBODY>
<TR>
<TD>customer</TD>
<TD>存储客户信息,设name,location,honor等字段,主键id。</TD></TR>
<TR>
<TD>linkman</TD>
<TD>存储联系人信息,设birthday,custid,custname等字段,主键id。</TD></TR>
<TR>
<TD>opportunity</TD>
<TD>存储商业机会信息,设description,moment,status等字段,主键id。</TD></TR>
<TR>
<TD>product</TD>
<TD>存储产品信息,设style,price,unit等字段,主键id。</TD></TR>
<TR>
<TD>service</TD>
<TD>存储客户服务请求信息,设product,contact等字段,主键id。</TD></TR></TBODY></TABLE><BR> 现在,以“创建客户信息”为用例,察看整个系统各个模块间的协作与实现。
<BR><BR>
<TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=550
borderColorLight=black border=1>
<TBODY>
<TR>
<TD class=code bgColor=#e6e6e6><PRE><CCID_CODE>请求参数输入界面: CRMCustomer.java
响应的servlet: custCreate.java
处理请求的JavaBean: CRMController.java
调用的会话bean: CRMBean.java
实体bean: CustBean.java
数据库表: customer
显示结果: CRMCustomer.java</CCID_CODE></PRE></TD></TR></TBODY></TABLE><BR> 在整个开发周期中,需不断精化和细化用户需求,改进用例与建模,迭代构造和测试,使系统趋于完善。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -