Введение
Nashorn* — движок JavaScript, разрабатываемый полностью на языке программирования Java компанией Oracle. Основан на Da Vinci Machine (JSR 292) и будет доступен в составе Java 8 (релиз которой ожидается в марте 2014 года). Стоит отметить что выполнение JavaScript (и поддержка сриптинга) была уже в Java 6, но в ней использовался движок Rhino, также написанный на Java, но поддерживаемый Mozilla Foundation.
О списке нововведений в Java 8 уже писали ранее. В данной статье будет приведена пара простых примеров, которая даст вам представление об использовании Nashorn.
Применение
Зачем нужен JavaScript в Java? Например:
- Описывать бизнес-логику на более простом чем Java языке (привлекая к этому специалистов в предметной области с базовым навыком программирования)
- Обеспечить модульную, расширяемую за счёт плагинов архитектуру приложения и интеграцию в приложение ранее существующих скриптов
- Использовать совместно с Java FX
- Использовать в web-приложениях, различным образом
Примеры использования
Подготовительный этап
Устанавливаем JDK 8 Early Access. Далее по тексту подразумевается что команды javac
и java
выполняются для Java 8.
Hello, World!
import javax.script.*; public class EvalScript { public static void main(String[] args) throws Exception { // create a script engine manager ScriptEngineManager factory = new ScriptEngineManager(); // create a Nashorn script engine ScriptEngine engine = factory.getEngineByName("nashorn"); // evaluate JavaScript statement try { engine.eval("print('Hello, World!');"); } catch (final ScriptException se) { se.printStackTrace(); } } }
Компилируем класс:
./javac EvalScript.java
И выполняем его:
./java EvalScript
Видим вывод:
Hello, World!
JavaScript + Java
Nashorn позволяет использовать классы Java для создания программ. Рассмотрим следующий пример:
MyScript.js
var MyClass = Java.type("EvalScript.MyClass"); var my = new MyClass(); my.printMsg("Hello!");
EvalScript.java
import javax.script.*; import java.io.*; public class EvalScript { public static void main(String[] args) throws Exception { // create a script engine manager ScriptEngineManager factory = new ScriptEngineManager(); // create a Nashorn script engine ScriptEngine engine = factory.getEngineByName("nashorn"); // evaluate JavaScript statement try { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); engine.eval(br); } catch (final ScriptException se) { se.printStackTrace(); } } public static class MyClass { public void printMsg(String msg) { System.out.println("printMsg : "+msg); } } }
Для примера я создал свой внутренний класс (что не является ограничением, я мог бы создать и отдельный класс), и вызвал его из JavaScript кода. Осталось скомпилировать класс и запустить его передав на вход наш js-код:
./java EvalScript < MyScript.js
Видим вывод:
printMsg : Hello!
Вывод
Решайте сами как использовать такую возможность. Я заинтересовался, когда у меня появилась необходимость внедрить в существующий Java-проект автоматизацию, которую мог бы настраивать не программист, а администратор приложения, прямо через интерфейс приложения (и при этом не требовалась бы перекомпиляция компонент приложения).
Используемые материалы:
- http://download.java.net/jdk8/docs/technotes/guides/scripting/nashorn/
- http://ru.wikipedia.org/wiki/Nashorn_(движок_JavaScript)
- https://blogs.oracle.com/nashorn/
* Nashorn — немецкое слово, которое переводится на русский как «носорог», а на английский как «rhinoceros», что перекликается с Rhino, названием движка JavaScript, реализованного в Java и поддерживаемого компанией Mozilla Foundation. Rhino, в свою очередь, получил название в честь животного изображённого на обложке книги о JavaScript, выпущенной издательством O’Reilly Media.
ссылка на оригинал статьи http://habrahabr.ru/post/195870/
Добавить комментарий