Java applet 写客户端 cookie

来源:互联网 发布:图片条形码识别软件 编辑:程序博客网 时间:2024/05/18 02:26

    在做web应用中遇到需要保留客户上次输入的信息的需求,于是就想用保留到客户端 cookie 中来实现。

   使用JavaApplet 写客户端cookie,

  1. import netscape.javascript.JSObject;
  2. ......
  3. /** 
  4.  * 功能:设置 cookies 
  5.  * @param ckdir
  6.  * @author peter
  7. * end = myCookie.length();
  8.  */
  9. public void setCookie(String ckdir) {
  10.     JSObject myBrowser = JSObject.getWindow(this);
  11.     JSObject myDocument = (JSObject) myBrowser.getMember("document");
  12.     myDocument.setMember("cookie", ckdir);
  13.     System.out.println("set cookies :" + ckdir);
  14. }
  15. /**
  16.  * 功能:获取所有的 cookies
  17.  */
  18. public String getCookie() {
  19.     try {
  20.         JSObject myBrowser = (JSObject) JSObject.getWindow(this);
  21.         JSObject myDocument=(JSObject)myBrowser.getMember("document");
  22.     String myCookie = (String) myDocument.getMember("cookie");
  23.     if (myCookie.length() > 0){
  24.             return myCookie;
  25.     } catch (Exception e) {
  26.         e.printStackTrace();
  27.     }
  28.     return "?";
  29. }
  30. /**
  31.  * 功能:根据name获取对应的cookies,
  32.  * cookie的格式:ckdir=e:/dataout; expires=Tue Mar 13 17:32:15 CST 2018
  33.  */
  34. public String getCookie(String name) {
  35.     String myCookie = getCookie();
  36.     String search = name + "=";
  37.     if (myCookie.length() > 0) {
  38.         int offset = myCookie.indexOf(search);
  39.     if (offset != -1) {
  40.             offset += search.length();
  41.         int end = myCookie.indexOf(";", offset);
  42.         if (end == -1){
  43.                 end = myCookie.length();
  44.             }
  45.         return myCookie.substring(offset, end);
  46.     } else {
  47.         System.out.println("没有发现cookies: " + name);
  48.     }
  49.     }
  50.     return "";
  51. }
  52. ......

在客户端(使用IE7.0)加载 applet时出错,查看java控制台信息如下:

 

Java(TM) Plug-in: 版本 1.4.2
使用 JRE 版本 1.4.2 Java HotSpot(TM) Client VM
用户主目录 = C:/Documents and Settings/Administrator

代理配置:没有代理

 

 

----------------------------------------------------
c:   清除控制台窗口
f:   终结在结束队列上的物件
g:   垃圾收集
h:   显示此帮助消息
l:   转储类载入程序列表
m:   打印内存使用
o:   触发日志记录
p:   重新载入代理配置
q:   隐藏控制台
r:   重新载入策略配置
s:   转储系统属性
t:   转储线程列表
v:   转储线程堆栈
x:   清除类载入程序高速缓存
0-5: 设置跟踪级别为<n>
----------------------------------------------------
java.lang.NullPointerException

 at sun.plugin.viewer.context.IExplorerAppletContext.getJSObject(Unknown Source)

 at sun.plugin.AppletViewer.getDocumentBase(Unknown Source)

 at sun.plugin.AppletViewer.getCodeBase(Unknown Source)

 at sun.plugin.AppletViewer.appletInit(Unknown Source)

 at sun.plugin.viewer.LifeCycleManager.initAppletPanel(Unknown Source)

 at sun.plugin.viewer.IExplorerPluginObject$Initer.run(Unknown Source)

netscape.javascript.JSException: Unable to obtain Document object

 at sun.plugin.AppletViewer.getDocumentBase(Unknown Source)

 at sun.plugin.AppletViewer.getCodeBase(Unknown Source)

 at sun.plugin.AppletViewer.appletInit(Unknown Source)

 at sun.plugin.viewer.LifeCycleManager.initAppletPanel(Unknown Source)

 at sun.plugin.viewer.IExplorerPluginObject$Initer.run(Unknown Source)

java.lang.NullPointerException

 at sun.plugin.viewer.context.IExplorerAppletContext.getJSObject(Unknown Source)

 at sun.plugin.AppletViewer.getDocumentBase(Unknown Source)

 at sun.plugin.AppletViewer.getCodeBase(Unknown Source)

 at sun.plugin.AppletViewer.appletInit(Unknown Source)

 at sun.plugin.viewer.LifeCycleManager.initAppletPanel(Unknown Source)

 at sun.plugin.viewer.IExplorerPluginObject$Initer.run(Unknown Source)

netscape.javascript.JSException

 at netscape.javascript.JSObject.getWindow(Unknown Source)

 at com.lc.v3.itfc.ynfjinterface.dlinterface.applet.FileDownApplet2.getCookie(FileDownApplet2.java:88)

 at com.lc.v3.itfc.ynfjinterface.dlinterface.applet.FileDownApplet2.getCookie(FileDownApplet2.java:103)

 at com.lc.v3.itfc.ynfjinterface.dlinterface.applet.FileDownApplet2.getTextField1(FileDownApplet2.java:224)

 at com.lc.v3.itfc.ynfjinterface.dlinterface.applet.FileDownApplet2.init(FileDownApplet2.java:299)

 at sun.applet.AppletPanel.run(AppletPanel.java:353)

 at java.lang.Thread.run(Thread.java:534)

netscape.javascript.JSException

 at netscape.javascript.JSObject.getWindow(Unknown Source)

 

 

由于上面的错误就无法写入和获取cookie的值。

 

 

原因:

    客户端的 sun java 版本太旧。

解决方法:

    更新客户端的 sun java 版本。

   

   从下面的链接可以检测当前的 java 版本 http://java.com/zh_CN/download/installed.jsp

 

   从下面的链接可以找到 java 的最新版本 http://www.java.com/en/download/manual.jsp 

 

更新以后,运行正常。