java6 java与js交互

 Java6.0(JDK1.6)中提供了许多新功能。其中很重要的一项是可以在java中与脚本语言交互,比如,调用js中的函数,或是把java中的对象送到js中去操作。

    随着web应用的普及,脚本语言越来越扮演了重要角色。Java恰到好处地提供了对脚本语言的支持,可以说是十分及时、十分必要的。这一特性可以增强Java的动态性能,把许多经常要变动的逻辑放到脚本中去处理。

    Java用于支持Script的类都在javax.script包中。

下面的例子演示了Java中如何调用js中的函数。
   
import javax.script.*;
import java.io.*;
   
public class ScriptTest
{
 public static void main(String[] args) throws Exception
 {
  //生成用于解析的引擎
  ScriptEngine engine = new ScriptEngineManager().getEngineByExtension("js");
  //装入一段js脚本
  engine.eval(new FileReader("my.js"));
  Invocable in = (Invocable)engine;
  //调用脚本中定义函数
  Object t = in.invokeFunction("DoIt",15,20);
  System.out.println(t);
 }
}
   
所使用的脚本my.js 如下:
   
function DoIt(x,y)
{
 return x*100+y;
}
   
    除了可以调用js外,我们很可能会需要把一个对象,比如list送到js中去处理。下面代码示意了这种情况。
   
import javax.script.*;
import java.io.*;
import java.util.*;
   
public class ScriptTest
{
 public static void main(String[] args) throws Exception
 {
  List t = new Vector();
  t.add("abcd");
     
  //生成用于解析的引擎
  ScriptEngine engine = new ScriptEngineManager().getEngineByExtension("js");
     
  //把对象梆定到engine中,以备js中调用
  Bindings bd = engine.createBindings();
  bd.put("lst", t);
  engine.setBindings(bd, ScriptContext.ENGINE_SCOPE);
     
  //装入js脚本
  engine.eval(new FileReader("my2.js"));
     
  //调用脚本中定义函数
  Invocable in = (Invocable)engine;
  in.invokeFunction("AddIt");
     
  for(int i=0; i<t.size(); i++){
   System.out.println(t.get(i));
  }
   
}
   
}
   
    其中使用的my2.js定义如下:
   
function AddIt()
{
  lst.add("xyz");
  lst.add("1234");
}
   
    正如您所猜测的,其实不使用Bindings也可把一个对象传入到js中,直接从函数的参数中送过去就可以了。使用Bindings的好处是可以做出类似于“全局变量”的效果,而不用每次都把许多参数传来传去的。
   
    以上只是最基本的例子。更深入的用法参看JDK文档。


你可能感兴趣的:(java6与js通信)