会计考友 发表于 2012-8-4 12:44:44

JAVA认证:cookie技术在J2ME平台的应用详解(2)

第二:保存cookie
    已经获得了cookie之后,就需要把cookie存储下来,存储分为两个部分,首先需要解析cookie,我们定义一个JavaBean来代表cookie.
    packagecom.j2medev.lomol.model;
    importcom.j2medev.lomol.util.StringUtil;
    importjava.io.DataInputStream;
    importjava.io.DataOutputStream;
    importjava.io.IOException;
    importjava.util.Date;
    /***acookiestoredonthemobiledevice,
    cookieisusedtomaintainthestatesbetweenclientandserver
    *@authormingjava
    *@version0.105/06/2006
    */
    publicclassCookie{
    privateStringpath="";
    privateStringname="";
    privateStringvalue="";
    privatelongexpire=SESSION_COOKIE;
    publicstaticlongSESSION_COOKIE=0;
    //sessioncookie,onlyvalidthissession
    publicCookie(){}
    publicStringgetPath(){returnpath;}
    publicvoidsetPath(Stringpath){this.path=path;}
    publicStringgetName(){returnname;}
    publicvoidsetName(Stringname){this.name=name;}
    publicStringgetValue(){returnvalue;}
    publicvoidsetValue(Stringvalue){this.value=value;}
    publicvoidserialize(DataOutputStreamdos)
    throwsIOException{
    dos.writeUTF(name);
    dos.writeUTF(value);
    dos.writeUTF(path);
    dos.writeLong(expire);
    }
    publicstaticCookiedeserialize(DataInputStreamdis)throwsIOException{
    Cookiecookie=newCookie();
    cookie.name=dis.readUTF();
    cookie.value=dis.readUTF();
    cookie.path=dis.readUTF();
    cookie.expire=dis.readLong();
    returncookie;
    }
    publiclonggetExpire(){
    returnexpire;
    }
    publicvoidsetExpire(longexpire){this.expire=expire;
    }
    //fordebug
    publicStringtoString(){
    returnname+"="+value+";expires="+newDate(expire)。
    toString()+";path="+path;
    }
    publicbooleanisExpired(longnow){
    returnexpire-now

会计考友 发表于 2012-8-4 12:44:45

JAVA认证:cookie技术在J2ME平台的应用详解(2)

publicstaticCookieparseCookie(Strings,Stringuri){
    Cookiecookie=newCookie();
    StringUtilsu=newStringUtil(s,";");
    while(su.hasMoreTokens()){
    Stringstr=su.nextToken()。trim();
    inti=str.indexOf("=");
    if(i==-1){
    //securedonothingcontinue;
    }else{
    Stringname=str.substring(0,i);
    Stringvalue=str.substring(i+1,str.length());
    if("path".equals(name)){
    cookie.setPath(value);
    }elseif("expires".equals(name)){
    cookie.setExpire(StringUtil.getData(value));
    }elseif("domain".equals(name)){
    //donothing}else{
    cookie.setName(name);
    cookie.setValue(value);
    }
    }
    if(cookie.getPath()。equals(""))
    cookie.setPath(uri);}returncookie;}
    publicbooleanequals(Objectobj){
    if(objinstanceofCookie){Cookieo=(Cookie)obj;
    if(o.getName()。equals(name)&&o.getPath()。equals(path))
    returntrue;}returnfalse;}
    publicinthashCode(){intresult=17;
    resultresult=result*37+path.hashCode();
    resultresult=result*37+name.hashCode();
    returnresult;}}
    提供了一个parseCookie方法来解析cookie,具体的原理就不再介绍了。然后需要把这个Cookie对象存储到RMS中。cookie并不大,所以不会占用太多的空间,在RMS中存储非常合适。注意对于会话期间的cookie没有必要存储在rms中,因为会话结束后就失效了,不如在内存中声明一个Map来存储会话类型的cookie.第三:发送cookie
    发送cookie也是需要两个步骤,首先检索rms和内存看是否有满足条件的cookie,如果有读取出来。
    然后通过下面的方法向服务器端发送
    //检查是否有cookie需要发送给服务器端
    String_cookie=collectCookie(url);
    if(_cookie!=null)
    connection.setRequestProperty(COOKIE,_cookie);
    如果能够顺利解决上面的三个步骤,基本可以实现cookie在javame平台的应用。在《JavaME核心技术与最佳实践》一书中,本人编写了一个httpme联网框架,其中包括了cookie在javame平台的实现,供大家参考。
页: [1]
查看完整版本: JAVA认证:cookie技术在J2ME平台的应用详解(2)