2011-01-09 13 views

Odpowiedz

17

Nie jestem pewien, co masz na myśli przez API są różne. Java 6 ma silnik skryptowy, w którym jednym z dostępnych silników jest Rhino oznaczony jako "js". Tak więc jedyną różnicą między dołączoną wersją ECMAScript Mozilla Rhino i tą, którą można uzyskać ze strony internetowej, będą różnice między wersjami. Uważam, że dołączona wersja Mozilla Rhino ECMAScript to 1.6 rev2.

ten jest podobny do sposobu bibliotek XML pracy. Jest "silnik", który ma domyślną implementację.

Przykład Klient Wykorzystanie

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

Aktualizacja

Wystarczy odpowiedzieć na pytanie trochę więcej, tak Java 6 skryptów silnika dba o kontekstach i innych operacji konfiguracyjnych że musisz zrobić to ręcznie, jeśli używasz Rhino bezpośrednio. Oto przykład użycia tych dwóch. Należy pamiętać, że podczas korzystania z silnika skryptowego Java 6 podobne rzeczy dzieją się pod maską. Używany tutaj skrypting Engine nie musi być wspierany przez Rhino. Może mieć niestandardową implementację scripowania.

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

Różnica w API, które mam na myśli to, że pakiet Rhino z Mozilla używa dużo jawnej manipulacji kontekstach i zakresów, ale ze wszystkich przykładów, które widziałem z wbudowanej w implementacji w Javie 6 wydaje się, że te szczegóły mogą być przeniesione w tło, abyś nie musiał się nimi martwić? –

+0

@Jeremy Z tego, co mogę powiedzieć, nie uważałbym, że są przetaczani pod dywan. Będziesz musiał nauczyć się, jak działa ScriptEngine w Javie 6. Tak jak mówiłem Java 6 wprowadza strukturę silnika skryptów. Mozilla Rhino ECMAScript ma implementację tego silnika skryptowego. Oznacza to, że Mozilla Rhino ECMAScript jest odtwarzana w kontekście szkieletu skryptowego Java 6. Masz dwie możliwości, bezpośrednio skorzystaj z interfejsu API Rhino lub naucz się nowego API mechanizmu skryptowego Java 6. –

Powiązane problemy