2011-01-09 35 views

回答

17

我不确定你的API是什么意思是不同的。 Java 6有一个脚本引擎,其中一个可用引擎是由“js”表示的Rhino。因此,捆绑的Mozilla犀牛ECMAScript和您可以从他们的网站上获得的唯一区别就是版本之间的差异。我相信捆绑版本的Mozilla Rhino ECMAScript是1.6 rev2。

这与XML库的工作方式类似。有一个具有默认实现的“引擎”。

例客户端使用

     ========== 
         | Client | 
         ========== 
          | 
      =============================== 
      |        | 
=========================   ============= 
| Java Scripting Engine |   | Rhino API | 
=========================   ============= 
      | 
     ================== 
     |    | 
============= =============  
| Rhino API | | Other API | 
============= ============= 

更新

只是为了回答你的问题多一点,是Java 6的脚本引擎负责环境和其他安装操作的你如果直接使用Rhino,必须手动完成。这里是使用这两个的例子。请记住,当你使用Java6脚本引擎时,类似的情况正在发生。此处使用的ScriptingEngine不必由Rhino支持。它可以有一个自定义脚本实现。

public class Main { 

    static class Shell extends ScriptableObject { 

     @Override 
     public String getClassName() { 
      return "global"; 
     } 

     public static void print(Context cx, Scriptable thisObj, Object[] args, Function funObj) { 
      for (int i = 0; i < args.length; i++) { 
       String s = Context.toString(args[i]); 
       System.out.print(s); 
      } 
     } 
    } 

    public static void useJava6ScriptingEngine() throws Exception { 
     ScriptEngineManager mgr = new ScriptEngineManager(); 
     ScriptEngine jsEngine = mgr.getEngineByName("JavaScript"); 
     jsEngine.eval("print('Hello, world!')"); 
    } 

    public static void useRhinoDirectly() throws Exception { 
     Context context = Context.enter(); 
     try { 
      Shell shell = new Shell(); 
      String[] names = {"print"}; 
      shell.defineFunctionProperties(names, Shell.class, ScriptableObject.DONTENUM); 
      Scriptable scope = context.initStandardObjects(shell); 
      context.evaluateString(scope, "print('Hello, world!')", null, 0, null); 
     } finally { 
      Context.exit(); 
     } 
    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) throws Exception { 
     useJava6ScriptingEngine(); 
     useRhinoDirectly(); 
    } 
} 
+2

在我指的是API中的不同的是,Mozilla的犀牛包使用了大量的上下文和作用域的显式处理,但所有这一切我已经看到了内置的例子在Java 6中的实现中,似乎这些细节可能会被扫描到背景中,以便您不必担心它们? – 2011-01-09 15:48:29

相关问题