在javascript中使用java_在JavaScript中使用Java

12.3 在JavaScript中使用Java

利用JavaScript可以把Java语言的小应用程序(applet),插件以及包括表单、超

级链接和图象在内的各种Web元素有机地联系起来。

JavaScript用一个叫做applets的applet对象数组来访问Java的applet。applets数

组是浏览器对象document的一个属性。这个数组中的每一个applet对象都按照它们

在HTML源代码中出现的顺序排列,下标值从0开始。

则相应的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小应用程序的

输入。

例:

onClick="document.Java1.SetNewText(document.JavaScriptForm.text1.value);

">

只要在网页中输入一个字符串,JavaScript就负责接受这个字符串。由于Java小应

用程序提供一个公共的接口方法SetNewText(),这个新输入的字符串也就可以被

Java小应用程序所访问到。

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

性。

由于Java语言本身的安全机制,必须显式地指定让applet访问相对较不安全的

JavaScript代码,这可以通过在标记中加上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是解释执行的,所以执行的速度非常慢,这是所有脚本语言的通病。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值