Java应用程序在以下几种情况要求cookie操作:
网站交互:
为了与网站交互,基于Internet的客户端应用程序经常扮演小型网络浏览器的角色。这些站点使用cookies进行状态管理以维护用户的会话数据。
网络服务实现:
网络服务承诺使网络成为电脑机器的友好地方。一个都希望的允许机器-网站进行交互的方法就是在网站前面有一个网络服务。因此,网络服务将目标网站的视窗十分友好地呈现在机器面前。这种网络服务的实现将需要cookie操作以达到真正的网站交互。
网络浏览:
基于网络浏览的Java将需要cookie操作模块以支持状态管理。
为了执行客户端cookie操作,先看下面几个步骤:
检索cookies:
- 从收到的HTTP头提取cookies。
- 分别解析cookies的组成部分(名称,值,路径等等)。
- 判定主机是否允许设置这些cookies。
发送cookies:
- 判定哪些cookies能被发送给主机。
- 对于多个cookies,判定必须发送的cookies的顺序。
- 与外发的HTTP头一起格式并发送cookies。
一个客户端Java应用程序须遵循上面的所有步骤,但是用RFC2965列出的规范执行上述步骤将消耗大量的时间并分散开发者在核心程序上的注意力。结果,开发者经常选择向规范妥协而用很容易就被破坏的随意编写的cookie操作代码结束。
例如,假设你想要写一个与网络商店应用程序的servlet交互的Java客户应用程序,在服务器端,当servlet第一次通过调用request.getSession()为一个会话询问servlet容器时,容器创建一个新的会话并且服务器用一个会话ID在并发请求时检索会话对象,服务器自动将这个会话ID作为一个HTTP cookie发送到客户端。在并发请求时,客户端与请求一起回送同一个会话ID。服务器用ID区别正确的会话对象以便servlet处理请求。
典型的客户端代码如下:
/* 取得cookie.*/
HttpURLConnection huc= (HttpURLConnection) url.openConnection();
InputStream is = huc.getInputStream();
// 从响应中检索会话ID.
String cookieVal = hc.getHeaderField("Set-Cookie");
String sessionId;
if(cookieVal != null)
{
sessionId = cookieVal.substring(0, cookieVal.indexOf(";"));
}
/* 发送cookie. */
HttpURLConnection huc= (HttpURLConnection) url.openConnection();
if(sessionId != null)
{
huc.setRequestProperty("Cookie", sessionId);
}
InputStream is = huc.getInputStream();
© 版权声明
特别声明:该文观点仅代表作者本人,"遇见科技圈"仅提供信息存储空间服务,如需转载、摘编请取得原作者授权。
THE END