上海大学(本部)计算中心 徐迎晓
摘要:本文介绍了几种保存与调用Internet上的Java Applet的方法,通过分析原
HTML文档内容,可以在自己的HTML文档中使用<applet>标签的codebase属性来直接
调用相关节点的Java Applet,也可将Java Applet的字节码文件直接下载到本地以
脱离Internet,直接在本地运行,对于一些难以下载的Java Applet,可以分析浏览
器的Cache,从Cache中恢复Java Applet字节码文件及其原有的目录结构和相关文
件。对每种方法文中给出了其实现的原理、步骤、实例及优缺点。
关键词: Java Applet, Web, HTML
在Internet上浏览时常可以看到一些做得很漂亮的Java Applet,如何直接在自己的
Web页面中使用这些Java Applet?本文给出笔者所使用的几种方法。
一、使用<applet>标签的codebase属性
编制Web页面使用的是HTML语言。在HTML文档中使用Java Applet的基本方法是在
HTML文档中加入如下的内容:
<applet codebase=字节码文件所在位置 code=字节码文件名 width=宽度
height=高度 >
<param name=参数名1 value=参数值1>
<param name=参数名2 value=参数值2>
......
</applet>
其中宽度和高度是浏览器中显示的Java Applet的窗口宽度与高度(以象素为单位),
<param>部分需根据不同的Java Applet使用不同的参数。codebase可以指定Java
Applet字节码文件所在位置。
这样,浏览到某个含Java Applet的页面时,只要分析一下其HTML文档,找到对应的
<applet>和</applet>两个标签之间的内容,将codebase部分略作修改即可。例如,
浏览到http://java.sun.com/applets/Blink/1.0.2/example1.html时见到有一个
Java Applet可以显示跳动的字符,想将其加入自己的Web页面中。其步骤如下:
1. 查看原HTML文档的内容。(如果用的是Netscape Navigator,可以直接选View菜
单的Document Source项)。
2. 在HTML文档中找出对应的<applet>和</applet>两个标签之间的内容,打开文本
编辑器,将其粘贴下来。在该例中,其内容为:
<applet code=”Blink.class” width=300 height=100>
<param name=lbl value=”This is the next best thing to sliced bread!
Toast, toast,
toast, butter, jam, toast, marmite, toast.”>
<param name=speed value=”4”>
alt=”Your browser understands the <APPLET> tag but isn't
running the applet, for some reason.”
Your browser is completely ignoring the <APPLET> tag!
</applet>
3. 粘贴下来的内容中,如果<applet>标签内有codebase属性,则直接将粘贴的内容
放入自己的HTML文档中即可。
4. 粘贴下来的内容中,如果<applet>标签内无codebase属性(象本例的情况),则
手工加入codebase部分。然后将其放入自己的HTML文档中。如本例中浏览的页面是
http://java.sun.com/applets/Blink/1.0.2/example1.html
则加入codebase= ”http://java.sun.com/applets/Blink/1.0.2”。最后的结果是:
<applet codebase= ”http://java.sun.com/applets/Blink/1.0.2”
code=”Blink.class”
width=300 height=100>
<param name=lbl value=”This is the next best thing to sliced bread!
Toast, toast,
toast, butter, jam, toast, marmite, toast.”>
<param name=speed value=”4”>
alt=”Your browser understands the <APPLET> tag but isn't
running the applet, for some reason.”
Your browser is completely ignoring the <APPLET> tag!
</applet>
5. 根据自己的需要,可适当修改原有的参数值。
该方法使用最简便,但需要连到Internet上才可以执行Java Applet。有些参数可能
无法修改。此外,当原有的含Java Applet的页面作了变动后,则需更改自己的HTML
文档。
二、直接下载字节码文件
将Java Applet的字节码文件直接下载到本地,可以脱离Internet,直接在本地运
行。
同上例步骤1、2,得到<applet>和</applet>两个标签之间的内容。如果其<applet>
标签内有codebase属性,则codebase属性的值与code属性的值合起来为字节码文件
的URL。如果<applet>标签内无codebase属性(象上例的情况),则根据所浏览的页
面的URL和code属性的值共同确定字节码文件的属性。
如上例中,所浏览的页面的URL为
http://java.sun.com/applets/Blink/1.0.2/example1.html
code属性的值为:Blink.class,故字节码文件的URL为:
http://java.sun.com/applets/Blink/1.0.2/Blink.class
在浏览器中输入该地址,将出现下图所示的对话框。
点击Save File,可以选择本地盘的路径,将字节码文件保存于本地盘的某个目录
中。
然后将原HTML文档中<applet>和</applet>及两个标签之间的内容保存下来,如果有
codebase属性则将其去掉。如果在code属性中含有子目录,则需在HTML文档所在目
录中创建相应的子目录,将下载的字节码文件放入其中。
用这种方法保存的Java Applet一般可以在本地运行。但若原Java Applet还调用了
其他字节码文件,则需要使用下面的方法将所有字节码文件都下载下来。
三、下载所有字节码文件
同上例,获得字节码文件所在的URL,然后将字节码文件本身的名字去掉,在浏览器
中输入新的URL地址,如果对方的Web服务器允许的话,可以看到所有的目录及其内
容。这时,可以分别点击各个文件,将其下载下来。如果原目录中有子目录,可在
本地盘上建立同样的结构。
四、利用浏览器的Cache
浏览器执行Java Applet时实际上均将其下载到本地盘,保存在Cache中执行的。因
此,对于前述方法难以奏效的案例,可以分析浏览器的Cache,将Java Applet在本
地盘原样恢复出来。
如使用Netscape Navigator浏览http://www.root.or.jp/tomos/java/pencil/pencil.html时发现一个很好的Java
Applet,使用下载所有字节码文件的方法发现对方的服务器禁止看其子目录的内
容。于是按以下步骤分析Cache:
1. 将Netscape Navigator的起始页面设置为空。
在Netscape Navigator的Options菜单中选择General Preferences,在接下来的对
话框中点击Appearance,如下图在Browser Starts后的Blank Page前点击一下,这
样以后执行Netscape Navigator时起始页面为空。
2. 清除Cache中原有的内容。
在Options菜单中选择Network Preferences,在接下来的对话框中点击Cache,点击
“Clear Memory Cache Now”和“Clear Disk Cache Now”,清除Cache中原有的内
容。
3. 退出Netscape Navigator,重新执行后直接浏览http:
//www.root.or.jp/tomos/java/pencil/pencil.html
这时,Cache中保存的完全是该页面所含的内容。
4. 分析Cache
在Netscape Navigator的Location后输入“about:cache”,则浏览器中显示当前
Cache中的内容,如下图所示:
URL: http://www.root.or.jp/tomos/java/pencil/Pencil.class
Content Length: 4264
Content type: application/octet-stream
Local filename: M0P1DTNU.CLA
Last Modified: Thu May 15 23:23:51 1997
Expires: No expiration date sent
URL: http://www.root.or.jp/tomos/java/pencil/pencil.html
Content Length: 285
Content type: text/html
Local filename: M0P1DTNN.HTM
Last Modified: Thu May 15 23:23:55 1997
Expires: No expiration date sent
URL: http://www.root.or.jp/tomos/java/pencil/abiysClass/Animator.class
Content Length: 4068
Content type: application/octet-stream
Local filename: M0P1DTO0.CLA
Last Modified: Thu May 15 23:24:06 1997
Expires: No expiration date sent
URL: http://www.root.or.jp/tomos/java/pencil/images/T1.gif
Content Length: 1747
Content type: image/gif
Local filename: M0P1DTO6.GIF
Last Modified: Thu May 15 06:40:19 1997
Expires: No expiration date sent
URL: http://www.root.or.jp/tomos/java/pencil/images/H1.gif
Content Length: 50107
Content type: image/gif
Local filename: M0P1DTO5.GIF
Last Modified: Thu May 15 06:40:16 1997
Expires: No expiration date sent
从这里可以看出该页面使用了5个文件,通过分析每个文件的URL可以看出:使用
Java Applet的HTML文档为pencil.html,字节码文件有两个,分别为:
Pencil.class(与pencil.html保存在同一目录)和Animator.class(保存在
pencil.html所在目录的一个子目录下,子目录名称为abiysClass),还有两个图象
文件,分别为:T1.gif和H1.gif(保存在pencil.html所在目录的一个子目录下,子
目录名称为images)。
从该图还可以看出每个文件在Cache中的对应文件名。只要Cache中的文件恢复到原
有的名称和目录结构即可在本地执行Java Applet。
5. 恢复文件名和目录结构
在本地盘建立一临时目录,以便存放HTML文档。按前述分析建立各子目录,在本例
中建立两个子目录:abiysClass和images。
在Netscape Navigator的Options菜单中选择Network Preferences,在接下来的对
话框中点击Cache,在Disk Cache一栏后显示的是Cache的目录。在DOS状态下或文件
管理器中进入该目录,可以看到各文件。按前述的分析将各文件换一个名称拷贝到
临时目录的相应子目录中。(在本例中,M0P1DTNU.CLA文件和M0P1DTNN.HTM文件分
别以Pencil.class和pencil.html为名称拷贝到临时目录中,M0P1DTO0.CLA文件以
Animator.class为名称拷贝到临时目录的abiysClass子目录中,M0P1DTO6.GIF和
M0P1DTO5.GIF分别以T1.gif和H1.gif为名称拷贝到临时目录的images子目录中)。
6. 分析HTML文档
现在所有字节码文件和Java Applet调用的其他文件都已下载到本地,进一步分析
HTML文档,如果其中的<applet>标签中有codebase属性可以将其去掉,这样便可以
完全脱离Internet而执行。进一步可以修改其参数,实现各种效果。
五、结语
本文介绍了几种保存和调用Internet上的Java Applet的方法,其实现难度各异,有
效性也各异。一般来说,第一种方法可以很方便地使用网上已有的Java Applet。但
更吸引人的无疑是将Java Applet下载的本地来,综合使用方法二、三一般可以实
现。如果方法二、三失败,可以尝试方法四,它在大部分场合都能成功。
此外,有很多主页提供免费或共享的Java Applet,如:
http://java.sun.com/applets及http://www.modernminds.com等。这时,可直接用
鼠标点击把原代码或字节码文件下载下来。