2011-01-09 12 views

答えて

17

APIの意味がわかりません。 Java 6には、利用可能なエンジンの1つが "js"で表されるRhinoであるスクリプトエンジンがあります。バンドルされているMozilla Rhino ECMAScriptとWebサイトから取得できる唯一の違いは、バージョン間の違いです。 Mozilla Rhino ECMAScriptのバンドル版は1.6 rev2だと私は信じています。

これはXMLライブラリの動作と似ています。デフォルトの実装を持つ「エンジン」があります。

例クライアントの使用

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

更新

ただ、もう少しをあなたの質問に答えるには、yesとJava 6のスクリプティングエンジンは、あなたの状況やその他のセットアップ作業の世話をしますRhinoを直接使用する場合は手動で行う必要があります。ここでは2つの例を使用しています。 Java6 Scripting Engineを使用する場合、同様のことがフードの下で起こっていることに注意してください。ここで使用されている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からRhinoのパッケージには、コンテキストとスコープの明示的な取り扱いの多くを使用していますが、ということです、私は内蔵の見てきた例の全てからJava 6の実装では、それらの詳細がバックグラウンドに掃引されるように見えるので、それらについて心配する必要はありません。 –

+0

@Jeremy私は彼らが敷物の下で掃除されたとは思わないでしょう。 Java 6のScriptEngineがどのように機能するかを知る必要があります。私が言ったように、Java 6はScripting Engineフレームワークを導入しています。 Mozilla Rhino ECMAScriptには、そのスクリプトエンジンの実装があります。これは、Mozilla Rhino ECMAScriptがJava 6スクリプトフレームワークのコンテキスト内で動作することを意味します。 Rhino APIを直接使用する方法と、新しいJava 6 Scripting Engine APIを学ぶ方法の2つの選択肢があります。 –

関連する問題