注意: 这部分假设已经对J2ME至少有一点熟悉。
前面,我曾提起用jCookieMicro库在J2ME平台的移动设备上建立与网络应用程序交互的客户系统的可能性。我仍然在开发jCookieMicro库。它的结构及用法将与jCookie库类似,除了URLConnection,jCookieMicro库将用MIDP HttpConnection对象。这部分描述了在移动应用程序(在我们的案例MIDlets中)使用成熟的cookie操作的好处。
让我们先练习在J2ME应用程序中状态管理常用的方法。诺基亚论坛一篇命名为“A Brief IntrodUCtion to Networked MIDlets”(2002年三月)的论文描述了一个方法。论文提出作为一个URL重写机制的变异工作的机制:一个在网络服务器上的servlet站点操作所有的商务逻辑和使用通常的HTTP报头传送状态信息要胜于cookies。MIDlet简单地作为一个用户界面,传递用户输入到servlet并显示结果。(更多的关于在J2ME应用程序上的状态管理的URL重写及其他方法,请读“Track Wireless Sessions with J2ME/MIDP”,Michael Juntao Yuan和Ju Long著(JavaWorld,2002年四月).)
使用上述方法,这有与此讨论相关的应用程序的解决方法,一是象一个小型网络浏览器一样与网络服务器或应用程序交互:
? MIDlet从用户那里收集相关输入(比如,一个Hotmail用户名和密码)
? MIDlet传送输入到servlet
? Servlet用输入与网络服务器或应用程序交互(比如,Hotmail网站)
? Servlet传送结果到 MIDlet(比如,一个新消息列表)
? MIDlet向用户显示结果
在上述解决方法中,通用HTTP报头维护一个MIDlet和servlet间的会话。因此,servlet和MIDlet 都包含执行会话管理的逻辑。这证明前面讲过的不受欢迎的同一原因:通用代码很容易被破坏,甚至成为常规管理变化所带来的必然结果,比如服务器升级。这种方法的另一个缺点:它要求有一个在目标网络应用程序(如Hotmail)和移动应用程序之间的中间件。
对于上述方法你可以用两种办法替代jCookieMicro:
1. 将商务逻辑转移到移动应用程序上并完全消除中间servlet。在移动客户系统上用jCookieMicro进行会话管理。
2. 将商务逻辑保持在中间servlet上,但除去通用报头,并用jCookieMicro进行透明坚固的会话管理。
修改已存在的应用程序第二种方法证明更适合。第一种方法导致成本的降低和移动应用程序开发更轻松,因为它除去了服务器端资源的开销。下面的应用程序使用了第一种方法:
? MIDlet从用户处收集相关输入
? MIDlet直接连接到目标网络服务器并与之交互
? MIDlet向用户显示结果
第一种方法同时也消除了将商务逻辑保持在servlet的如下一些缺点:
? 一个servlet容器故障会导致整个应用程序离线,即使目标网络服务仍在运行。
? 应用程序被限制仅作为servlets展开。
在移动应用程序中进行状态管理的另一个方法在Sun无线Java开发者的一篇不依赖风俗权威的文章“Session Handling in MIDP”(2002年一月)中有描述,但包括在移动应用程序中写操作cookies的通用代码。前面关于写通用代码的缺点的讨论及使用jCookie(Micro)的优势请看上述命为“在Java中的状态管理”部分)。
自从PJAE提供连同一些Java2类的完整JDK 1.1.8平台,即使在工作中的jCookieMicro,今天你也能在PersonalJava Application Environment (PJAE)下的应用程序中使用jCookie库。。
jCookie局限性
jCookie库还有一些局限性:
? 当cookie解析逻辑及安全标准插入到已存在的API(用CookieParser)时,没有一个对于核心数据结构和Cookie类有用的机制。
? 没有作性能测试。
你可以从http://jcookie.sourceforge.net/得到jCookie最近的版本以及项目源代码。有一些项目是为未来版本计划的包括:
? 雅加达项目log4J logging API的使用提供了用户可配置的记录和调试。
? 用一个用户定义的控制器可简单修改jCookie行为,这可以决定解析一单个cookie是否失败将导致致命错误。
这些及其他部分的执行大量依赖于你的反馈。请在SourceForge.net的jCookie项目站点上使用邮件列表、bug追踪、特征请求等等。
取得cooking
这里提到的jCookie库能帮助减轻客户端应用程序状态开发的难度。作为前面曾提到的,其他库的执行类似于函数,但这些结构已和存在的本地java.net API远无关系。另外,没有API/库单独从事cookie操作。其他的库将cookie操作合并作为一个完整的Java 网络客户结构的一部份,结果,使用这些库涉及了整个新的学习体系。
jCookie库接近于存在的java.net对象。在普遍的URLConnection或HttpConnection两个方法调用中状态管理十分简单。你可以通过一个有用的HTTPRedirectHandler类使得状态管理更简单。在处理客户端应用程序开发者时jCookie努力把浏览器作为cookie管理器。这能成功走多远只能由你的反响决定。我将感激任何你所分享的提示或建议。
(出处:http://www.knowsky.com)