JavaScript EE, част 1

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

javax script

Серия съдържание:

Следете за още статии от тази поредица.

Използване на 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 () трябва да е истина, за да се използва реда за достъп вместо реда по подразбиране за записите в таблицата на картата.