从 JavaScript 代码调用 Applet 方法
网页上的 JavaScript 代码可以与网页上嵌入的 JavaServlets 交互。 JavaScript 代码可执行以下操作:
-
在 Java 对象上调用方法
-
获取和设置 Java 对象中的字段
-
获取和设置 Java 数组元素
LiveConnect Specification描述了有关 JavaScript 代码与 Java 代码如何通信的详细信息。
当 JavaScript 代码调用 JavaServlets 时,将显示安全警告。要取消显示这些警告,请将Caller-Allowable-Codebase
属性添加到 JAR 文件清单中。指定允许调用 Servlets 的 JavaScript 代码的位置。有关Caller-Allowable-Codebase
属性的信息,请参见用于安全性的 JAR 文件清单属性。
本主题使用 Math applet 示例探索 JavaScript 代码与 Java applet 的通信。 MathApplet
类和支持Calculator
类提供了一组公共方法和变量。网页上的 JavaScript 代码调用并评估这些公共成员以传递数据并检索计算的结果。
mathServlets 及相关类
这是MathApplet类的源代码。 getCalculator
方法返回对Calculator
helper 类的引用。
package jstojava;
import java.applet.Applet;
public class MathApplet extends Applet{
public String userName = null;
public String getGreeting() {
return "Hello " + userName;
}
public Calculator getCalculator() {
return new Calculator();
}
public DateHelper getDateHelper() {
return new DateHelper();
}
public void printOut(String text) {
System.out.println(text);
}
}
Calculator类中的方法使用户可以设置两个值,添加数字并检索范围内的数字。
package jstojava;
public class Calculator {
private int a = 0;
private int b = 0; // assume b > a
public void setNums(int numA, int numB) {
a = numA;
b = numB;
}
public int add() {
return a + b;
}
public int [] getNumInRange() {
int x = a;
int len = (b - a) + 1;
int [] range = new int [len];
for (int i = 0; i < len; i++) {
range[i]= x++;
System.out.println("i: " + i + " ; range[i]: " + range[i]);
}
return range;
}
}
DateHelper类的getDate
方法返回当前日期。
package jstojava;
import java.util.Date;
import java.text.SimpleDateFormat;
public class DateHelper {
public static String label = null;
public String getDate() {
return label + " " + new SimpleDateFormat().format(new Date());
}
}
部署 Servlets
在网页AppletPage.html中部署 Servlets。在部署 Servlets 时,请确保指定 Servlets 的 ID。ServletsID 稍后用于获取对 Servlets 对象的引用。
<script src=
"https://www.java.com/js/deployJava.js"></script>
<script>
<!-- applet id can be used to get a reference to
the applet object -->
var attributes = { id:'mathApplet',
code:'jstojava.MathApplet', width:1, height:1} ;
var parameters = { jnlp_href: 'math_applet.jnlp'} ;
deployJava.runApplet(attributes, parameters, '1.6');
</script>
接下来,向AppletPage.html网页添加一些 JavaScript 代码。 JavaScript 代码可以将 applet id 用作对 applet 对象的引用,并调用 applet 的方法。在下面显示的示例中,JavaScript 代码设置了 applet 的 public 成员变量,调用了 public 方法,并检索了对 applet 所引用的另一个对象(Calculator
)的引用。 JavaScript 代码能够处理原始,数组和对象返回类型。
<script language="javascript">
function enterNums(){
var numA = prompt('Enter number \'a\'?','0');
var numB = prompt(
'Enter number \'b\' (should be greater than number \'a\' ?','1');
// set applet's public variable
mathApplet.userName = "John Doe";
// invoke public applet method
var greeting = mathApplet.getGreeting();
// get another class referenced by applet and
// invoke its methods
var calculator = mathApplet.getCalculator();
calculator.setNums(numA, numB);
// primitive datatype returned by applet
var sum = calculator.add();
// array returned by applet
var numRange = calculator.getNumInRange();
// check Java console log for this message
mathApplet.printOut("Testing printing to System.out");
// get another class, set static field and invoke its methods
var dateHelper = mathApplet.getDateHelper();
dateHelper.label = "Today\'s date is: ";
var dateStr = dateHelper.getDate();
<!-- ... -->
</script>
当数字 a = 0 和 b = 5 时,MathServlets 在网页上显示以下结果:
Results of JavaScript to Java Communication
Hello John Doe
a = 0 ; b = 5
Sum: 5
Numbers in range array: [ 0, 1, 2, 3, 4, 5 ]
Today's date is: 5/28/13 4:12 PM //shows current date
在浏览器中打开AppletPage.html以查看 mathServlets。
Note:
如果看不到 Servlets 正在运行,则需要至少安装Java SE 开发套件(JDK)6 更新 10版本。
Note:
如果看不到示例正在运行,则可能需要在浏览器中启用 JavaScript 解释器,以便 Deployment Toolkit 脚本能够正常运行。
选中security restrictions放在 JavaScript 代码调用的 Servlets 上。
下载源代码用于“从 JavaScript 代码调用 Applet 方法”示例,以进行进一步试验。