Java中的cookie管理方案(1)-与J2ME结合
摘要
客户端HTTP状态管理对于创建需要与象基于网络浏览器的email或在线银行服务网络程序交互作用的Java应用程序是十分重要的。本文介绍了在Java中一个强大易用的客户端HTTP状态管理cookie库,这个库在固有的java.net工具箱中很少见。其中存在几种客户端HTTP状态管理APIs,它们提供了难于学习并没必要重新开发设计的函数方法。这篇文章中Cookie管理库尽量使用核心Java API类。
当在开发一个针对所有主要的internet邮件服务器(基于Web或其他类型)提供单点访问的通用邮件客户端时,我发现我的应用程序经常不得不作为一个小的网络浏览器与提供邮件服务的网站交互。 当开发XML网络服务以便于机器更容易访问网站时我总在需要网站交互时遇到困难。这些网站经常使用cookies进行状态管理及维护用户会话数据,在这两种情况,我意识到多数网站交互都涉及cookie操作。我也注意到虽然两种情况下的应用程序都执行cookie操作,但其逻辑处理较困难及不具有互换性。针对此限制,我从开发一个小型普通用途库出发致力于cookie操作。在这篇文章中我将与你分享这个库。
为了在运行中图解说明库,我建议使用基于Hotmail邮件检测器的控制台。此外,我从在J2ME平台上使用MIDP的移动设备观点探究了客户端状态管理。
Cookie基础
让我们从回答一些问题开始:
什么是状态管理,为什么我们需要它?
什么是cookies,它们怎样适应图片?
要回答第一个问题,我们必须更精密地检测一下HTTP。HTTP是无国界协议,因为从网络服务器观点看所有HTTP请求都独立于先前请求。就是说每一个HTTP响应完全依赖于相应请求中包含的信息。当这种行为使网络服务执行更简单有效时,用它作为复杂网络应用的基础将更为合适。
状态管理机制克服了HTTP的一些限制并允许网络客户端及服务器端维护请求间的关系。在这种关系维持的期间叫做会话(session)。多数要求你登录的网络应用程序使用了会话及状态管理。购物推车应用程序使用状态管理控制所有标记为已购买项目的列表。状态管理能够使个别用户参数的入口及搜索引擎个性化定制。网络应用程序甚至能使用状态管理根据用户爱好兴趣定制网站内容。
Cookies影响着状态管理。Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器。
IETF RFC 2965 HTTP State Management Mechanism 是通用cookie规范。网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将到同一服务器的任何请求缚上这些cookies。在这篇文章后面,我同义性地使用了cookie操作和状态管理术语。
如果你要找出你访问的哪个网站使用了cookies,可以试试这个简单的试验:
注意: 只有当你觉得改变你的浏览器设置没什么问题并知道方法时才执行这个练习。
● 打开你常用的浏览器,我假设你使用的是Internet EXPlorer (IE) 5+或Netscape Navigator 4+。
● 使自动cookie操作无效:
在IE浏览器的“工具”菜单中选择“Internet选项”,再选择“安全”标签,单击“自定义级别”然后向下拉动滚条直到你看见“允许使用存储在你计算机上的cookies”并选中“提示”选项,同时也选中“允许使用每个对话cookies(未存储)”的“提示”选项,单击“确定”按钮回到主窗口。
在Netscape Navigator的“编辑”菜单中选择“参数选择”中的“高级”,选中“接收cookie时警告”,单击“确定”按钮回到主窗口。
● 现在浏览你“收藏”中的站点,特别是当你检查你的网络邮件或进入在线电子商店时,要求你允许接收cookies的对话框会不断地向你轰来。
将上面的步骤恢复到你以前的初始设置,你也能看见哪些cookies被保存到了你的本地机器上(在警告应用之前):
● 对于IE:使用“Windows资源管理器”或“我的电脑”浏览C:WindowsCookies文件夹,在这个文件夹中的所有文本文件都包含cookies。
● 对于Netscape Navigator:
在Windows系统中,使用“Windows资源管理器”或“我的电脑”浏览C:Program FilesNetscapeUsers文件夹,找到一个名叫“cookies.txt”的文件或“cookies”子目录。
在Unix类似系统中,在“.netscape”目录中找到一个名叫“cookies”的文件。
注意: 根据你安装的系统不同,使自动cookie操作无效及查看保存的cookies的步骤也可能不同。
现在你已经知道了一些基本知识,接下来我将阐述怎样将这些与Java联系起来。
(出处:http://www.knowsky.com)