2011-01-09 5 views

Antwort

17

Ich bin mir nicht sicher, was Sie mit den APIs gemeint haben, sind unterschiedlich. Java 6 hat eine Skript-Engine, in der eine der verfügbaren Engines Rhino ist, die mit "js" bezeichnet wird. Der einzige Unterschied zwischen dem gebündelten Mozilla Rhino ECMAScript und dem, den Sie von ihrer Website erhalten können, sind die Unterschiede zwischen den Versionen. Ich glaube, dass die gebündelte Version von Mozilla Rhino ECMAScript 1.6 rev2 ist.

Dies ähnelt der Funktionsweise der XML-Bibliotheken. Es gibt eine "Engine", die eine Standardimplementierung hat.

Beispiel Client-Nutzung

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

aktualisieren

Sie Ihre Frage ein wenig mehr zu beantworten, ja die Java 6 Scripting Engine Pflege Operationen von Kontexten und anderen Setup nimmt, dass Sie müssen Sie manuell tun, wenn Sie Rhino direkt verwenden. Hier ist ein Beispiel für die Verwendung der beiden. Beachten Sie, dass bei Verwendung der Java6 Scripting Engine ähnliche Vorgänge unter der Haube stattfinden. Die hier verwendete ScriptingEngine muss NICHT von Rhino unterstützt werden. Es könnte eine benutzerdefinierte Scripting-Implementierung haben.

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

Der Unterschied in den APIs, die ich Bezug habe, ist, dass das Rhino-Paket von Mozilla viele explizite Behandlung von Contexts verwendet und Scopes, sondern aus allen Beispielen, die ich von den eingebauten gesehen habe in der Umsetzung in Java 6 scheint es, als ob diese Details in den Hintergrund gerückt werden, so dass Sie sich keine Sorgen machen müssen? –

+0

@ Jeremy Von dem, was ich sagen kann, würde ich sie nicht unter den Teppich kehren. Sie müssen lernen, wie die ScriptEngine in Java 6 funktioniert. Wie gesagt, Java 6 führt ein Framework für Scripting Engine ein. Das Mozilla Rhino ECMAScript hat eine Implementierung dieser Scripting Engine. Das bedeutet, dass Mozilla Rhino ECMAScript im Rahmen des Java 6 Scripting Frameworks abgespielt wird. Sie haben zwei Möglichkeiten, verwenden Sie direkt die Rhino API oder lernen Sie die neue Java 6 Scripting Engine API kennen. –