2011-01-09 16 views

cevap

17

API'lardan ne kastettiğinizin farklı olduğundan emin değilim. Java 6'da mevcut motorlardan birinin "js" ile gösterilen Rhino olduğu bir komut dosyası motoru vardır. Dolayısıyla, paketlenmiş Mozilla Rhino ECMAScript ile web sitelerinden alabileceğiniz tek fark, sürümler arasındaki farklar olacaktır. Mozilla Rhino ECMAScript'in paket versiyonunun 1.6 rev2 olduğuna inanıyorum.

Bu, XML kitaplıklarının çalışma şekline benzer. Varsayılan bir uygulamaya sahip bir "motor" var.

Örnek İstemci Kullanımı

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

Güncelleme

Sadece sorunuzu biraz daha cevap, evet Java 6 komut dosyası Motor bağlamlarda ve diğer kurulum işlemleri ilgilenir

o sen Rhino'yu doğrudan kullanmanız durumunda manuel olarak yapmak zorundasınız. İşte ikisini kullanmanın bir örneği. Java6 Scripting Engine'i kullandığınızda, kapağın altında benzer şeyler olduğunu unutmayın. Burada kullanılan ScriptingEngine, Rhino tarafından desteklenmemelidir. Özel bir komut dosyası uygulaması olabilir.

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

Ben bahsediyorum API'leri farkı Mozilla Rhino paketi Bağlamlarda ve Kapsamlarının açık uğraşmayı kullanır, ancak olmasıdır ı almanın doğasında ait gördüğüm örneklerden tümünden Java 6'daki uygulamada, bu detaylar arka plana sürüklenmiş gibi görünüyor, bu yüzden onlar hakkında endişelenmenize gerek yok mu? –

+0

@Jeremy Anlatabildiğim kadarıyla bunların kilimin altına süpürüldüğünü düşünmüyorum. Java 6'da ScriptEngine'in nasıl çalıştığını öğrenmeniz gerekecek. Java 6'nın bir Scripting Engine altyapısını tanıttığını söylüyordum. Mozilla Rhino ECMAScript'in bu Scripting Engine'in bir uygulaması var. Bu, Mozilla Rhino ECMAScript'in Java 6 komut dosyası çerçevesi bağlamında oynatıldığı anlamına gelir. İki seçeneğiniz var, Rhino API'yi doğrudan kullanın veya yeni Java 6 Scripting motor API'sini öğrenin. –

İlgili konular