Как загрузить файлы .js в контекст Rhino в Java - PullRequest
9 голосов
/ 19 мая 2009

Вот моя ситуация:

У меня есть доступ к объекту Rhino Context в классе Java. Я хочу прочитать кучу файлов .js и передать их в контекст Rhino для их оценки. Я не очень заинтересован в том, чтобы функции в файлах .js были доступны в контексте сценариев, а в том, чтобы просто иметь переменные, объявленные в файлах .js (это вопрос проверки инструментов).

В идеале я бы прочитал и попытался оценить каждый файл сразу, а не построчно. Я заметил, что в Context есть метод (см. Rhino API ), который называется evaluateReader(). Мое первое предположение - я должен получить все файлы, которые хочу загрузить, пройти их все и вызвать этот метод, передавая какой-то объект для чтения для каждого, и прекрасно, теперь они все в моем контексте сценариев.

Итак, предположив, что я на правильном пути, может кто-нибудь сказать мне, если есть какие-либо хорошие практики для использования файлов .js в контексте сценариев Java, или есть ли лучший способ сделать это, или вы сделал это как-то иначе и т.д?

Здесь не нужно искать детали реализации, просто отзывы других людей, которые могли бы сделать это уже в своем коде. Мне не нравится работать с языками сценариев из Java.

1 Ответ

12 голосов
/ 19 мая 2009

Знаете ли вы, что Rhino поставляется в Java 6 ?

String javaScriptExpression = "sayHello(name);";
Reader javaScriptFile = new StringReader(
    "function sayHello(name) {\n"
        + "    println('Hello, '+name+'!');\n" + "}");

ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory
    .getEngineByName("JavaScript");
ScriptContext context = engine.getContext();
context.setAttribute("name", "JavaScript",
    ScriptContext.ENGINE_SCOPE);

engine.eval(javaScriptFile);
engine.eval(javaScriptExpression);

Если вы хотите использовать его с Java 5, вам придется загрузить API отдельно. Вы можете получить движки для многих популярных языков сценариев из scripting.dev.java.net .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...