|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
主要缺点就是:速度比较慢,没有C和C++快
Cookie在Web使用程序中被普遍接纳,保护扫瞄器和服务器之间的形态。遗憾的是这一特征在JavaME平台中并没有失掉撑持。因而,要想保持客户端和服务器真个形态则必需利用URL重写的体例。URL重写操纵起来对照贫苦,以是研讨一下cookie的道理并在JavaME平台上完成cookie是不错的实验。起首,我们来看一下cookie的道理。当服务器必要和扫瞄器保持某一形态的时分,比方必要纪录用户的购物车中已购置的商品。这时候候服务器能够新建一个Cookie并把它写进到呼应中,扫瞄器从呼应中吸收到cookie并保留起来。当扫瞄器再次向服务器发送哀求的时分,扫瞄器会依据域(domain)和路径(path)反省是不是有婚配的cookie,假如有则把cookie以“称号=值”的情势发送给服务器,服务器从哀求中剖析出cookie就晓得用户的形态了。那末,扫瞄器依据甚么划定规矩来决意向服务器发送cookie呢,起首要婚配domain,假如cookie的域属性是.google.com,那末哀求指向j2medev.com的时分,cookie就不会被发送。假如域婚配的前提满意,则判别path是不是婚配,假如cookie的path属性是哀求的uri的父目次的话,那末cookie就会被发送给服务器。Cookie是有存活周期的,到期的cookie会被扫瞄器主动扫除。假如服务器创立cookie的时分不设置性命周期,那末在会话停止后扫瞄器就会删除cookie。假如不为cookie指定path属性,那末默许就是此次哀求的路径。
cookie在良多web使用程序中都有使用,好比记着暗码,购物车等。在开辟MIDlet的时分,你也能够让你的使用程序撑持cookie,如许保持客户端与服务器真个形态将变得复杂,为你会合精神办理其他营业办法奠基了基本。既然已晓得了cookie的事情道理,那末就应当思索一下在JavaME平台怎样完成cookie,这个设法是不是可行。我将从上面三个方面举行剖析。
第一:取得cookie
当服务器真个呼应到来的时分,我们应当可以读取cookie。假如服务器向客户端写进Cookie的时分,呼应中的HTTP头“Set-Cookie”中会包括一个字符串,代表了cookie的信息。侥幸的是我们是用HttpConnection.getHeaderFiled("Set-Cookie")办法便可取得cookie,可是必要注重这里只是读取了一个cookie,假如呼应中包括了多个cookie,那末你必要轮回读取。相似于上面的代码
StringsCookie=null;
Stringkey=null;
inti=0;
//假如key存在,则查询header的key,假如key即是SET_COOKIE,则存储
while((key=connection.getHeaderFieldKey(i))!=null){
if(key.equals(SET_COOKIE)||key.equals(SESSIONID)){
sCookie=connection.getHeaderField(i);
saveCookie(sCookie,url);
}
i++;
}
下面的代码把header是Set-Cookie和SesssionID的cookie内容读取上去。
第二:保留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<0;
}
publicbooleanisExpired(){
returnexpire-(newDate().getTime())<0;
}
publicstaticCookieparseCookie(Strings,Stringuri){
Cookiecookie=newCookie();
StringUtilsu=newStringUtil(s,";");
while(su.hasMoreTokens()){
Stringstr=su.nextToken().trim();
inti=str.indexOf("=");
if(i==-1){
//securedonothing
continue;
}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;
result=result*37+path.hashCode();
result=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平台的完成,供人人参考。
但是一些大型开发或者是保密型比较高的项目都会用java,原因有2点,一:java是开源的,不怕别人留后门,偷我工具,.net网页编程就不一样了,保持微软的一向风格,源代码不公开 |
|