如果浏览器是IE或者Netscape 6,Applet调用explore()方法: //content是一个javascript变量,它以HTML格式描述了需要 //显示的新数据 function explore() { iexplorer.innerHTML=content; } 如果浏览器是Netscape 4.0或者更高版本,Applet调用navig()方法: function navig() { document.netscapev.document.write(“<DATA>“ + content + “</DATA>“); document.netscapev.document.close(); } 四、通信过程 在服务器端,一个ImageAppliation.java类的实例响应Socket连接请求,并为每一个新的连接请求创建一个新的线程。为了简化代码,每一个线程只检查数据文件是否改变。如果数据文件已经改变,则线程读取文件内容,并把新的数据发送给已经连接的Applet(示例应用把整个文件发送给Applet)。 在客户端,一个隐藏帧包含了ImageApplet.java这个Applet,因此用浏览器的查看HTML源代码功能是无法看到Applet标记的。Applet实现了连接服务器(下载该Applet的源服务器)的功能,并实现了一个简单的通信协议。建立与服务器的连接之后,Applet接收来自服务器的数据,构造出HTML代码,并调用JavaScript函数把数据传入文档: public void upDateHTML(String str){ //data是表单的名字, //quote是一个JavaScript变量 //str是新构造出来的HTML代码 mainwin.eval("document.data.quote.value=“" + str + "“"); mainwin.eval("javascript:assignData()"); return; } netscape.javascript.JSObject完成Applet到JavaScript的通信,不同版本的客户端浏览器需要不同的版本。你可以下载得到为Netscape提供的压缩类文件java40.jar。IE已经带有JSObject类,但有点难找。你可以搜索$windows$\Java\Packages目录寻找包含JSObject类的ZIP文件。 服务器把ImageArrayElement.java类的实例通过toString()方法串行化成为字符串发送给Applet。服务器从数据文件构造出各个对象,调用toString()方法,连接得到代表所有对象的字符串,最后发送结果字符串。而在另一端,Applet接收并解析这个字符串,重新构造出各个ImageArrayElement对象。这里之所以用一个长字符串的形式发送数据,是因为这种方法只需要很简单的处理过程,使得用户能够以接近实时的速度立即得知数据的变化;但是,我们也可以用另外一种方法,即以向量的形式发送对象。 在一个正式运行的应用中,你一般应该让新数据插入当前页面的过程透明。但在示例应用中,为了让程序运行过程更加直观,它将在新内容到达的时候提示用户。 推送技术最主要的优点就是应用服务器只把那些改变的数据发送到网络,从而使得延迟减到了最少。由于这个Applet负责完成的工作非常少(不涉及用户界面,这部分工作由浏览器负责),所以Applet体积很小,装载速度非常快。 五、如何运行本文实例 要测试本文示例应用,你的机器上必须安装有Web服务器和JDK 1.7或更高版本。 安装要点: 解开ZIP压缩文件并安装到Web服务器默认根目录。 对于IIS服务器,默认根目录是Inetput\wwwroot 对于jsdk2.1所带的免费服务器,默认目录是<安装目录>\webpages 解开压缩文件之后,所有文件都将安装到<Web服务器根>/exp/目录。 把下面几行代码加入默认页面。每一种服务器都有自己的默认页面,IIS的默认页面是“default.htm”,请参见Web服务器文档了解具体说明: <ul><li> <a href="/exp/ImageMain.htm"> Java based dynamic Ad-Banner</a></li> </ul> 运行应用的步骤: |