Java教程是针对JDK 8编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
有关Java SE 9及后续版本中更新的语言功能的摘要,请参见Java语言变化。
有关所有JDK版本的新功能、增强功能和已删除或已弃用选项的信息,请参见JDK发行说明。
网页上的JavaScript代码可以与嵌入在页面上的Java小程序进行交互。JavaScript代码可以执行以下操作:
LiveConnect规范详细描述了JavaScript代码与Java代码之间的通信细节。
当JavaScript代码调用Java小程序时,会显示安全警告。为了抑制这些警告,需要在JAR文件清单中添加Caller-Allowable-Codebase属性。指定允许调用小程序的JavaScript代码的位置。有关Caller-Allowable-Codebase属性的信息,请参阅JAR文件清单属性安全。
本主题探讨了使用Math小程序示例的JavaScript代码到Java小程序的通信。 MathApplet类和支持的Calculator类提供一组公共方法和变量。网页上的JavaScript代码调用和评估这些公共成员以传递数据并检索计算结果。
这是类的源代码。 MathAppletgetCalculator方法返回Calculator辅助类的引用。
package jstojava;
import java.applet.Applet;
public class MathApplet extends Applet{
public String userName = null;
public String getGreeting() {
return "你好 " + 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; // 假设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;
}
}
getDate 方法位于 类中,用于返回当前日期。DateHelper
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());
}
}
将 applet 部署在一个网页中,。在部署 applet 时,确保为 applet 指定一个 id。稍后会使用 applet id 来获取对 applet 对象的引用。AppletPage.html
<script src=
"https://www.java.com/js/deployJava.js"></script>
<script>
<!-- applet id 可用于获取对 applet 对象的引用 -->
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>
接下来,在 网页中添加一些 JavaScript 代码。JavaScript 代码可以使用 applet id 作为 applet 对象的引用,并调用 applet 的方法。在下面的示例中,JavaScript 代码设置了 applet 的公共成员变量,调用了公共方法,并获取了 applet 引用的另一个对象 (AppletPage.htmlCalculator) 的引用。JavaScript 代码可以处理原始类型、数组和对象的返回类型。
<script language="javascript">
function enterNums(){
var numA = prompt('输入数字 \'a\':','0');
var numB = prompt(
'输入数字 \'b\'(应大于数字 \'a\'):','1');
// 设置 applet 的公共变量
mathApplet.userName = "John Doe";
// 调用公共 applet 方法
var greeting = mathApplet.getGreeting();
// 获取 applet 引用的另一个类并调用其方法
var calculator = mathApplet.getCalculator();
calculator.setNums(numA, numB);
// applet 返回的原始数据类型
var sum = calculator.add();
// applet 返回的数组
var numRange = calculator.getNumInRange();
// 查看 Java 控制台日志以获取此消息
mathApplet.printOut("测试向 System.out 打印");
// 获取另一个类,设置静态字段并调用其方法
var dateHelper = mathApplet.getDateHelper();
dateHelper.label = "今天的日期是:";
var dateStr = dateHelper.getDate();
<!-- ... -->
</script>
当数字a = 0和b = 5时,Math applet在网页上显示以下结果:
JavaScript到Java通信的结果 你好 John Doe a = 0 ; b = 5 和:5 范围数组中的数字:[ 0, 1, 2, 3, 4, 5 ] 今天的日期是:5/28/13 4:12 PM //显示当前日期
在浏览器中打开以查看Math applet。AppletPage.html
查看由JavaScript代码调用的applet所施加的安全限制。
下载源代码以进一步进行实验。