Я не уверен, что вы имели ввиду под API. В Java 6 есть механизм сценариев, в котором один из доступных механизмов - это Rhino, обозначаемый «js». Таким образом, единственной разницей между прилагаемым Mozilla Rhino ECMAScript и той, которую вы можете получить на их веб-сайте, будут различия между версиями. Я считаю, что в комплекте с Mozilla Rhino ECMAScript установлена версия 1.6 rev2.
Это похоже на работу библиотек XML. Существует «движок», который имеет реализацию по умолчанию.
Пример использования клиента
==========
| Client |
==========
|
===============================
| |
========================= =============
| Java Scripting Engine | | Rhino API |
========================= =============
|
==================
| |
============= =============
| Rhino API | | Other API |
============= =============
Обновление
Просто, чтобы ответить на ваш вопрос немного подробнее, да, Java 6 Scripting Engine позаботится о контекстах и других операциях настройки , которые вы должны выполнить вручную, если используете Rhino напрямую. Вот пример использования двух. Имейте в виду, что когда вы используете 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();
}
}