JavaScript EE, част 1
Научете се да използвате API на javax.script в приложенията Ajax и Java EE

Серия съдържание:
Следете за още статии от тази поредица.
Използване на API на javax.script
Изпълнение на скриптове
API на javax.script е изключително прост. Започваме със създаването на екземпляр ScriptEngineManager, който ни позволява да получим обект ScriptEngine (вижте Листинг 1) чрез един от следните методи:
- getEngineByName ()
- getEngineByExtension ()
- getEngineByMimeType ()
Листинг 1. Получаване на екземпляр на ScriptEngine
С инстанцирания javax.script.ScriptEngine можете да извикате eval () за изпълнение на скриптове. Можете също да експортирате Java обекти като скриптни променливи, като предадете обект Bindings на метода eval (). Листинг 2 показва примерен ScriptDemo.java, който експортира две променливи с име demoVar и strBuf, изпълнява скрипт с име DemoScript.js и след това извлича променливите, за да покаже променените им стойности.
Листинг 2. Пример за ScriptDemo.java.
Файлът DemoScript.js (показан в листинг 3) съдържа функция printType (), която се използва за отпечатване на типа на всяка променлива на скрипта. Примерът извиква метода append () на обекта strBuf, променя стойността на demoVar и създава нова променлива на скрипта с име newVar .
Листинг 3. Пример на DemoScript.js
Листинг 4. Резултат от ScriptDemo.java
Достъп до функции
Примерът InvDemo.java (показан в листинг 5) изпълнява скрипт на име InvScript.js, който съдържа рутина demoFunction (). След конвертиране на екземпляра ScriptEngine в Invocable, примерът на Java предава името на функцията и параметрите на метода invokeFunction () на механизма, който връща стойността, получена от demoFunction () .
Листинг 5. Пример InvDemo.java
Файлът InvScript.js (вижте листинг 6) съдържа подпрограмата demoFunction () и същата функция printType (), която е използвана в предишния пример за скрипт.
Листинг 6. Пример за InvScript.js
Листинг 7. Резултат от InvDemo.java
Компилиране на скриптове
Класът CachedScript (вижте Листинг 8) взема файла на скрипта и го рекомпилира само ако изходният код се промени. Методът getCompiledScript () извиква метода compile () от механизма за скриптове, който връща обект javax.script.CompiledScript, чиито eval () методи изпълняват скрипта.
Листинг 8. Класът CachedScript
Класът ScriptCache (показан в Листинг 9) организира хранилище за компилирани скриптове с помощта на обекта java.util.LinkedHashMap. Първоначалният капацитет на картата е зададен на максималния брой скриптове, съхранявани в кеша, а коефициентът на зареждане е 1. Тези два параметъра гарантират, че cacheMap никога не трябва да се хешира.
По подразбиране класът LinkedHashMap използва ред на вмъкване за своите записи. Третият параметър на конструктора LinkedHashMap () трябва да е истина, за да се използва реда за достъп вместо реда по подразбиране за записите в таблицата на картата.