在JavaScript中使用Java

12.3 在JavaScript中使用Java

利用JavaScript可以把Java语言的小应用程序(applet),插件以及包括表单、超
级链接和图象在内的各种Web元素有机地联系起来。

JavaScript用一个叫做applets的applet对象数组来访问Java的applet。applets数
组是浏览器对象document的一个属性。这个数组中的每一个applet对象都按照它们
在HTML源代码中出现的顺序排列,下标值从0开始。

<applet code="Blink.class" name="Blink" width=300 height=100>

则相应的JavaScript语言中的applet对象既可以使用类似document.applets[0]形
式表示,也可以使用document.Blink来访问,Blink是这个小应用程序的名称。

有一种特殊的情况,在JavaScript中不能通过网络访问Java的属性,也就是说
JavaScript只能调用本地的Java小应用程序中的各种公用变量和属性。这样的设计
是为了保障Java的安全性。

除了可以在JavaScript中访问Java的小应用程序以外,还可以利用JavaScript访问
Java包名字空间的任何一个类。Java语言中提到的类(class)的概念同
JavaScript中的对象概念是一致的。

提示:Java中的各种对象被组织成类,类又被组织成包,包中的子类从它的基类中
继承属性和方法,并加以扩充和改变。

任何一个Java中的类都可以使用一个简单的语法对应一个JavaScript中的对象。例
如:
var javaSystem=Java.lang.System;

则JavaScript中的对象javaSystem就对应Java语言中的Java.lang.System对象,从
而直接在JavaScript中访问Java.lang.System中的各种方法和属性。例如可以在
JavaScript中使用
javaSystem.err.println("从JavaScript中调用Java!!");
来利用Java的方法输出一个字符串。

除了可以直接使用Java提供的类以外,还可以在JavaScript中动态地创建一个Java
类的实例,就好象这个类是JavaScript本身定义的一样。例如可以在JavaScript中
创建一个Java中的Date类:
var myNewDate=new Java.util.Date();
这样创建的myNewDate对象就可以访问所有Java类Date的数据。

通过使用JavaScript的这些直接访问Java类库的功能,就可以大大地扩展
JavaScript的使用范围,使它不再局限在狭小的范围之内,而可以拥有Java语言能
够实现的大多数功能,例如网络访问和复杂的窗口响应等。

例:一个小应用程序
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Font;

public class ControlJava extends Applet {
Font f=new Font("TimesRoman",Font.BOLD,60);
String Text;

public void init() {
Text=new String("这是一个Java的小应用程序,可以在JavaScript中控制。");
}

public void SetText(String newText) {
Text=newText;
repaint();
}

public void paint(Graphics g) {
g.setFont(f);
g.drawString(Text,15,50);
}
}

这个小应用程序提供一个叫做SetText()的公共方法,这个方法可以设置这个小应
用程序所显示的文字,下面在JavaScript中使用这个方法来控制Java小应用程序的
输入。

例:
<html>
<body>
<form name="JavaScriptForm">
<input type="Text" name="text1">
<input type="Button" value="出现在Java小应用程序中"
onClick="document.Java1.SetNewText(document.JavaScriptForm.text1.value);
">
</form>

<applet name="Java1" code="ControlJava.class" width=450 height=125>
</applet>
</body>
</html>

只要在网页中输入一个字符串,JavaScript就负责接受这个字符串。由于Java小应
用程序提供一个公共的接口方法SetNewText(),这个新输入的字符串也就可以被
Java小应用程序所访问到。

Java语言还允许从applet中直接调用JavaScript的方法和访问JavaScript对象的属
性。

由于Java语言本身的安全机制,必须显式地指定让applet访问相对较不安全的
JavaScript代码,这可以通过在<applet>标记中加上MAYSCRIPT属性来实现。例
如:
<applet code="some.class" width=java Applet" mayscript>

在Java语言中处理和JavaScript通信的类库是netscape.javaScript.*。这个包定
义了JSObject类和JSException对象。在JavaScript中使用的对象都可以表示成
netscape.javaScript.JSObject的实例。

在Java中准备这个包后,访问一个JavaScript对象的属性可以分两步进行:
创建一个netscape.javaScript.JSObject实例,用来对应JavaScript中的对象;
使用JSObject类的getMember()方法可以访问相应JavaScript中的属性。

提示:如果通过这样的getMember()方法得到的JavaScript属性是一个对象,这样
的操作还可以进行下去。

JavaScript中的各种浏览器和界面对象都是分层的。处于对象从属表最顶层的是浏
览器对象window,再下面是document对象,这个对象可以包容表单以及表单中的界
面对象。每一个下层对象是上层对象的一个属性。所以,按照刚才的方法,可以采
用如下的代码得到JavaScript语言中的一个界面对象:
JSObject windowHandle=JSObject.getWindow(this);
JSObject documentHandle=(JSObject) windowHandle.getMember("document");
JSObject formHandle=(JSObject) documentHandle.getMember("myform");
JSObject buttonHandle=(JSObject) formHandle.getMember("mybutton");
在得到这个JavaScript对象后,就可以获得或设定对象的属性。

为了调用JavaScript对象的有关方法,可以采用下面的两种方法之一:
使用JSObject类中的call("methodName",arguments)方法:这个Java方法接受一个
JavaScript对象的方法名称以及必要的参数,自动调用对应JavaScript的对象中的
方法。
使用JSObject类中的eval("expression")方法:这个Java方法接受一个字符串,这
个字符串由JavaScript的命令组成,这个方法自动执行这个字符串中的命令,就好
象这个命令是在JavaScript中的一样。

例:Java程序在代码中访问JavaScript中的window对象的alert()方法
import netscape.javascript.JSObject;
import netscape.javascript.JSException;

public class jsAlert extends java.applet.Applet implements Runnable {
JSObject windowObject;

public void init() {
windowObject=JSObject.getWindow(this);
}

public void main() {
windowObject.eval("alert(/"Hello, World!/");");
}

public void stop()
{}

public void paint()
{}

public void run()
{}
}

12.4 JavaScript的局限性以及未来的展望

这里说的局限性首先是指JavaScript在安全处理上的局限性,其次是指JavaScript
在功能上的局限性。

已经报告的JavaScript安全性缺陷主要有:
JavaScript脚本程序可以读取用户计算机上URL的历史信息,并在用户不知道的情
况下把这些信息发送到远方的服务器上。
JavaScript脚本程序可以得到用户计算机硬盘上的文件列表。
JavaScript脚本程序可以在用户不知道的情况下使用用户的E-mail帐号发送
E-mail。

由于JavaScript只能在浏览器的小空间中运行,所以除了特别重要的场所以外,一
般使用的用户不必太担心浏览网页中的JavaScript程序会给用户计算机带来怎样的
损失,至少JavaScript程序不能越过浏览器的限制而强行把用户的硬盘格式化掉。
上面提到的一些小的安全性隐患也会在将来的JavaScript发布版本中逐步予以清
除。

JavaScript的第二个局限性体现在功能上:
由于JavaScript只是一种脚本设计语言,在图形和多媒体处理方面的功能非常弱。
若想实现比较完整的媒体操纵功能,目前比较好的解决方法可能是利用Java小应用
程序来补充。
JavaScript是解释执行的,所以执行的速度非常慢,这是所有脚本语言的通病。


 

你可能感兴趣的:(JavaScript,java,语言,import,applet,多媒体处理)