Rhino може використовуватися як зневаджувач при використанні Rhino Shell. Він також може використовуватися в застосунках при вбудовуванні Rhino.
Незначно модифікована версія Rhino 1.6r2 поставляється разом з Sun MicrosystemsJava SE 6, яка була випущена в грудні 2006[3]. Це спрощує інтеграцію JavaScript в Java-програми і доступ до Java-ресурсів з JavaScript. Інші реалізації Java 6 можуть мати відмінності.
Історія
Проєкт Rhino був початий в Netscape у 1997. У той час Netscape планувала розробити версію Navigator, написану повністю на Java і тому їй була потрібна реалізація JavaScript, написана на Java. Коли Netscape зупинила роботу над «Javagator», як він був названий, проєкт Rhino був закінчений як JavaScript-рушій. З того часу кілька великих компаній (включаючи Sun Microsystems) ліцензували Rhino для використання у своїх проєктах і платили для цього Netscape, дозволяючи продовжувати роботу над ним.
Спочатку, Rhino компілював весь JavaScript код в байткод Java в згенерованих файлах класів. Це давало кращу продуктивність (при запуску на JIT часто перевищувала продуктивність C-реалізації JavaScript), але мала два недоліки. По-перше, час компіляції був великим, оскільки генерація байткоду Java та завантаження згенерованих класів були важким процесом. По-друге, реалізація допускала великі витоки пам'яті, оскільки більшість JVM не збирали невикористовувані класи або рядки, які інтернували як результат завантаження клас-файлу.
Тому восени 1998 в Rhino був доданий інтерпретований режим. Генерація кодів клас-файлів була переміщена в опціональну, динамічно-завантажувану бібліотеку. Компіляція прискорилася і коли скрипти більше не використовувалися вони могли бути зібрані як і будь-які інші Java-об'єкти.
Rhino був переданий Mozilla Foundation в квітні 1998. В результаті переходу Rhino в open source він знайшов різні застосування і більша кількість людей стали вкладати внесок у код[4].
Проєкт отримав свою назву від тварини на обкладинці книги про JavaScript, виданої O'Reilly Media[4][5].
Починаючи з версії 1.7R1, Rhino ґрунтується на платформі Java 5 і підтримує JavaScript версії 1.7[6].
У 2014 році платформа Java 8 одержала більш продуктивнішу бібліотеку Nashorn, яка замінила Rhino[7].
Застосування
Rhino і Java Scripting API використовуються для скриптингу Java застосунків[3]. Це дозволяє описувати бізнес-логіку простішою, ніж Java, мовою (залучаючи до цього фахівців у предметній області з базовими навичками програмування), забезпечити модульну, розширювану за рахунок плагінів архітектуру програми та інтеграцію у застосунок раніше існуючих скриптів[8].
Це також гарне рішення для JavaScript на стороні сервера при використанні Java-хостингу, кілька таких рішень було створено в рамках проєкту CommonJS[9].[10] Також Rhino можна використовувати спільно з Google App Engine[11].
Ось приклад Java-коду, що запускає JavaScript print('Hello, world!')
importjavax.script.ScriptEngine;importjavax.script.ScriptEngineManager;importjavax.script.ScriptException;publicclassRhinoEngine{publicstaticvoidmain(String[]args){ScriptEngineManagermgr=newScriptEngineManager();ScriptEngineengine=mgr.getEngineByName("JavaScript");// Тепер у нас є екземпляр рушія і ми можемо виконати JavaScripttry{engine.put("name",args[0]);engine.eval("print('Hello ' + name + '!')");}catch(ScriptExceptionex){ex.printStackTrace();}}}
ScriptEngineManager — це основний клас, використовуваний при роботі з пакетом скриптинга (більшість інших — [[інтерфейс ООП|інтерфейси]]), шляхом створення його примірників. У разі використання JavaScript-рушія Rhino треба задати його ім'я "JavaScript" [9].