a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 122|回复: 1

[专业语言] JAVA认证:cookie技术在J2ME平台的应用详解(2)

[复制链接]
发表于 2012-8-4 12:44:44 | 显示全部楼层 |阅读模式
第二:保存cookie0 b. O- Z- r3 W6 x
    已经获得了cookie之后,就需要把cookie存储下来,存储分为两个部分,首先需要解析cookie,我们定义一个JavaBean来代表cookie.9 D0 ~' q5 t% u1 l& R+ w, C
    packagecom.j2medev.lomol.model;
/ B7 [, _4 H; M  j3 A$ p# l2 z    importcom.j2medev.lomol.util.StringUtil;: T+ h4 \  a; K" E6 r5 Q$ C4 E
    importjava.io.DataInputStream;* ~1 O& m: R/ l: J  j" ~# a
    importjava.io.DataOutputStream;
. C4 d7 u% }4 L; k: _    importjava.io.IOException;3 B0 V* N- ^2 x" F9 f- X
    importjava.util.Date;$ J" I) a! L; v/ w. v4 A
    /**  *acookiestoredonthemobiledevice,
/ N- l. L+ C" q3 N    cookieisusedtomaintainthestatesbetweenclientandserver# I  q9 k5 B+ t) J! \
    *@authormingjava+ {  X$ P# K( K1 a/ o
    *@version0.105/06/2006
) T8 ]- x3 f4 v5 e5 F5 {7 v" `    */
) ?, v/ O; }# T& k% B* G    publicclassCookie{
, s" [, C9 C2 k4 F    privateStringpath="";
! G1 |* v* m# K$ ?/ P    privateStringname="";
8 V- }! j' l- ^4 o3 C& o* U8 S$ F2 [    privateStringvalue="";3 _) @2 V8 `$ B. W  {
    privatelongexpire=SESSION_COOKIE;, R5 a2 i- ?  r8 f7 A8 O. B  E( U
    publicstaticlongSESSION_COOKIE=0;
. d1 x! a, x: {' _3 f8 e1 J; ^    //sessioncookie,onlyvalidthissession: T, D# q; p1 k8 U" O
    publicCookie(){  }
7 \$ {7 d! l) P+ y2 A& z# X    publicStringgetPath(){  returnpath;  }
1 i3 V& y0 W& j/ ?* e& L    publicvoidsetPath(Stringpath){  this.path=path;  }: J; o5 d: j  T" \/ o0 G, ?- j
    publicStringgetName(){  returnname;  }
8 t1 D* _& i( B# A5 c0 x0 ~! t: l    publicvoidsetName(Stringname){  this.name=name;  }0 j; n" n: b- O& e$ N: p
    publicStringgetValue(){  returnvalue;  }4 \' _" a5 {" M" c  U
    publicvoidsetValue(Stringvalue){  this.value=value;  }
6 F$ Z4 \2 z" ]    publicvoidserialize(DataOutputStreamdos): J5 C" [, p& t: g7 C7 v
    throwsIOException{
. z5 u0 R$ J3 s- Q; Z: _% Y    dos.writeUTF(name);: m- q" K6 \' Z1 s+ [) p1 S& o% ?
    dos.writeUTF(value);% Z7 S! j. D+ A* f- D# I1 i% g2 z
    dos.writeUTF(path);, ^- @3 M6 Y! ~
    dos.writeLong(expire);
, ?1 j5 A+ {+ Q. _* r    }1 _( Q  }6 T5 B3 f# m/ `
    publicstaticCookiedeserialize(DataInputStreamdis)throwsIOException{3 M8 |1 j9 i/ y  ~, r! `- z
    Cookiecookie=newCookie();
8 `8 N  o+ q+ Q; l9 c: L* W    cookie.name=dis.readUTF();0 s. ^# L/ ^3 H
    cookie.value=dis.readUTF();  ]$ G6 S0 @- G( w' S  |. s
    cookie.path=dis.readUTF();
' d3 X1 b* \* p8 W3 l* e    cookie.expire=dis.readLong();
# p# S4 t1 c  e$ I" b' v6 S7 F0 u7 K- @    returncookie;
5 g# Y/ j* {2 _: X7 w, L1 ]- m    }
, T5 X7 g$ c& @0 |7 N% T) v    publiclonggetExpire(){0 ]  e9 J/ i( p; a
    returnexpire;
8 C9 y, V/ l' I, d9 q    }
6 ^4 i. c" W- K, \$ n4 E2 ?/ v    publicvoidsetExpire(longexpire){  this.expire=expire;! M" s  v3 `; Y2 K& t
    }2 }4 {( ~6 Q9 \3 k' V
    //fordebug
& ~! C- f( u: Y0 _( T# g    publicStringtoString(){4 J, B0 g, Y" Y" P
    returnname+"="+value+";expires="+newDate(expire)。
. M* v' I) O# Q6 m    toString()+";path="+path;
9 j* H/ T" ~, L' C" e    }7 ^& C2 L; t( s. u9 A' W& ^4 k! G
    publicbooleanisExpired(longnow){; p) a0 G( _1 y; r, r
    returnexpire-now
回复

使用道具 举报

 楼主| 发表于 2012-8-4 12:44:45 | 显示全部楼层

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

publicstaticCookieparseCookie(Strings,Stringuri){: ^8 r- l7 }8 ~. L  H# {' B
    Cookiecookie=newCookie();
9 N6 G4 l/ L8 L' d2 {4 g* A    StringUtilsu=newStringUtil(s,";");
! c2 k) \; L7 o+ }- q    while(su.hasMoreTokens()){, k( k! q9 j+ k+ f3 `; \
    Stringstr=su.nextToken()。trim();8 B% u* M) w) C4 C3 {" [
    inti=str.indexOf("=");  X0 O! K( X/ ~, @, a. j) e
    if(i==-1){
9 \: c. o2 {7 n    //securedonothing  continue;
; d$ }  a. S3 ]; f    }else{
' V" B, Z' e5 [( K. x    Stringname=str.substring(0,i);
/ v! V5 j* k( `& j2 D( n! J1 {6 x    Stringvalue=str.substring(i+1,str.length());
- ?" h  p  u% |5 G& ?! p) |    if("path".equals(name)){
, x# {3 r! F* E' J' T4 J    cookie.setPath(value);
4 H! M/ x4 ^9 Y- r+ ~    }elseif("expires".equals(name)){
7 h0 ~$ S4 |; L! a    cookie.setExpire(StringUtil.getData(value));
) b5 U" r! V8 S$ Y3 w    }elseif("domain".equals(name)){
' u: K: h$ G: ?    //donothing  }else{
. r) v& A; t$ F4 ^+ R: l  T( i    cookie.setName(name);
; ?  @  G7 d# H5 }7 @; q    cookie.setValue(value);
6 s/ Q% F  T  R! i6 D- T    }
% }0 O& c2 h. a1 `# G    }6 W- s; \" h1 Z% V9 `% s' s
    if(cookie.getPath()。equals(""))
, ~9 N: O8 d# v1 x2 W    cookie.setPath(uri);  }  returncookie;  }
& I  v- I6 z2 x. T3 e' J6 [    publicbooleanequals(Objectobj){7 Q" F1 Y$ \( D6 {( Z, G
    if(objinstanceofCookie){  Cookieo=(Cookie)obj;
8 R8 w+ _) g- s5 n2 g    if(o.getName()。equals(name)&&o.getPath()。equals(path))# K9 F% ]+ n* x" [* X
    returntrue;  }  returnfalse;  }; L( J: f4 h1 O
    publicinthashCode(){  intresult=17;2 T( Y7 E! [) t/ O4 D: D! C- f- g4 H
    resultresult=result*37+path.hashCode();; a7 g5 I" Y! y" g+ I) O7 l
    resultresult=result*37+name.hashCode();
3 r2 j9 Q6 o4 Z( z9 C! j7 N    returnresult;  }  }
2 B+ s0 O* x( G    提供了一个parseCookie方法来解析cookie,具体的原理就不再介绍了。然后需要把这个Cookie对象存储到RMS中。cookie并不大,所以不会占用太多的空间,在RMS中存储非常合适。注意对于会话期间的cookie没有必要存储在rms中,因为会话结束后就失效了,不如在内存中声明一个Map来存储会话类型的cookie.第三:发送cookie
3 O. A1 ]  {3 U7 p' Z3 v5 B    发送cookie也是需要两个步骤,首先检索rms和内存看是否有满足条件的cookie,如果有读取出来。' J, \4 {! T! M, ?
    然后通过下面的方法向服务器端发送  A0 V; `. Q! K
    //检查是否有cookie需要发送给服务器端
7 F; R0 w6 ?0 \5 C8 V3 x/ h8 [2 ]    String_cookie=collectCookie(url);4 U6 t- B5 x  u6 {% q
    if(_cookie!=null)
9 X4 G# d$ q! f    connection.setRequestProperty(COOKIE,_cookie);9 J1 [  r1 ~6 y: {8 k3 R" k' N
    如果能够顺利解决上面的三个步骤,基本可以实现cookie在javame平台的应用。在《JavaME核心技术与最佳实践》一书中,本人编写了一个httpme联网框架,其中包括了cookie在javame平台的实现,供大家参考。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-6 19:27 , Processed in 0.172469 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表