在做web应用中遇到需要保留客户上次输入的信息的需求,于是就想用保留到客户端 cookie 中来实现。
使用JavaApplet 写客户端cookie,
- import netscape.javascript.JSObject;
- ......
- /**
- * 功能:设置 cookies
- * @param ckdir
- * @author peter
- * end = myCookie.length();
- */
- public void setCookie(String ckdir) {
- JSObject myBrowser = JSObject.getWindow(this);
- JSObject myDocument = (JSObject) myBrowser.getMember("document");
- myDocument.setMember("cookie", ckdir);
- System.out.println("set cookies :" + ckdir);
- }
- /**
- * 功能:获取所有的 cookies
- */
- public String getCookie() {
- try {
- JSObject myBrowser = (JSObject) JSObject.getWindow(this);
- JSObject myDocument=(JSObject)myBrowser.getMember("document");
- String myCookie = (String) myDocument.getMember("cookie");
- if (myCookie.length() > 0){
- return myCookie;
- } catch (Exception e) {
- e.printStackTrace();
- }
- return "?";
- }
- /**
- * 功能:根据name获取对应的cookies,
- * cookie的格式:ckdir=e:/dataout; expires=Tue Mar 13 17:32:15 CST 2018
- */
- public String getCookie(String name) {
- String myCookie = getCookie();
- String search = name + "=";
- if (myCookie.length() > 0) {
- int offset = myCookie.indexOf(search);
- if (offset != -1) {
- offset += search.length();
- int end = myCookie.indexOf(";", offset);
- if (end == -1){
- end = myCookie.length();
- }
- return myCookie.substring(offset, end);
- } else {
- System.out.println("没有发现cookies: " + name);
- }
- }
- return "";
- }
- ......
在客户端(使用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
更新以后,运行正常。