2010年5月2日 星期日

Java、Java Applet与JavaScript间的通信


Java与JavaScript可以互相补充,以开发功能更完美的Web应用程序。本文归纳了笔者编程中曾使用过的,涉及到有关JavaScript与Java、Java Applet小程序之间互访的问题的一些方法,仅供参考。

一、从JavaScript中访问Java方法
在HTML脚本中可以用JavaScript直接调用Java中的方法,只需要在调用语句前用“java.lang.”加以表示即可。具体语句用法如下例所示:java.Lang.System.Out.println(“Hello!”)但此种方法只适用于Netscape Navigator,一般不提倡在Web应用程序中使用。
二、从JavaScript中访问Java Applet小程序中的方法和变量
通过JavaScript提供的Applet对象,JavaScript代码可以访问Java的变量和方法,具体步骤和用法示例如下。需要注意的是,JavaScript提供的applet对象具有name属性,而没有方法和事件处理器。
步骤:
1) 将要访问的Java Applet小程序的方法和变量声明为Public,且必须在Public类中声明;2) Java Applet小程序要先装入才能访问,尽管applet对象没有定义onLoad事件,但可以在HTML文档的〈body〉标志中,指定使用Window对象的onLoad事件处理器;3) Java Applet小程序可以用JavaScript的applet对象来访问。
示例:

“mytest.htm”
  //通过调用accessApplet()装入小程序
  “Testtext.java”
  import java.applet.*;
  ……
  public class Testtext extends Applet
  {……
  public void setText(String s) //setText()必须声明为“public”
  {
  text=s;
  repaint();
  }
三、在Java Applet小程序中使用JavaScript
Live Connect提供了Java与JavaScript的接口,可以允许在Java Applet小程序中使用JavaScript。具体步骤如下:1) 在HTML脚本中使用〈APPLET〉标志的MAYSCRIPT属性,以允许Java Applet小程序访问脚本;2) 将netscape. JavaScript包导入Java Applet小程序;
3)在Java Applet小程序中用JSObject类的getWindow(方法创建JavaScript窗口的句柄;
4)在Java Applet小程序中用JSObject类的getMember(方法访问JavaScript对象;
5) 在Java Applet小程序中用JSObject类的eval(方法调用JavaScript方法。
示例:

“ReadForm. Java”
  import netscape.javascript.JSObject;import netscape.javascript.JSException;
  ……
  win=JSObject.getWindow(this); // 获取JavaScript窗口句柄,引用当前文档窗口doc=(JSObject)win.getMember("document"); // 访问JavaScript对象form=(JSObject)doc.getMember("textForm");textField=(JSObject)form.getMember("textField");text=(String) textField.getMember("value"); //获取文本区的值
  ……
  win.eval("alert(\"This alert comes from Java!\")");
  //调用JavaScript的alert()方法
  ……
  “User.htm”
  ……
  Enter text and then click display text:
  //必须使用MAYSCRIPT属性标志
附表列举了JSObject类的方法和描述,更详细的说明可以参考MSDN。值得一提的是,本文中程序示例加下划线的部分,要特别引起注意。

1 則留言:

推到 Twitter!
推到 Plurk!
推到 Facebook!