Executando código JavaScript usando ScriptEngineManager em java
Neste post vou mostrar como é possível executar código JavaScript dentro do código java de maneira muito simples
Última atualização em: | 6623 Visualizações
Já pensou em executar código javascript através de código java?
Pois bem, isso é possível e muito fácil de implementar.
O Java possui um sistema ScriptEngine que permite que você execute declarações em linguagem diferente. E o ECMAscript é suportado sem problema algum.
Outras linguagens ainda podem ser utilizadas, mas neste momento mostraremos apenas um exemplo utilizando JavaScript, veja:
import javax.script.*;
import java.util.HashMap;
import java.util.Map;
public class TestMain {
public static void main(String[] args) {
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("JavaScript");
try {
engine.put("aParam", 5);
engine.put("bParam", 10);
engine.eval( "function ola(a, b) { return a + b; }" );
engine.eval("print('Resultado: '+ ola(aParam, bParam) )");
engine.eval("var s = ola(aParam, bParam)");
// create the engine and have it load your javascript
Bindings bind = engine.getBindings(ScriptContext.ENGINE_SCOPE);
for ( String attr : bind.keySet() ) {
System.out.println( attr );
}
@SuppressWarnings("rawtypes")
Map m = new HashMap();
m.put("c", 10);
engine.put("m", m);
engine.eval("var x = m.get('c');");
System.out.println("Max num: " + engine.get("x"));
} catch (ScriptException e) {
e.printStackTrace();
}
}
}
Note que importamos a classe
ScriptEngineManager
eScriptEngine
dejavax.script.*
;
Inicializando o ScriptEngine com JavaScript
podemos executar código em tempo de execução.
Enviando parâmetros
O .put
permite inicializar variáveis, já passando seu valor;
engine.put("aParam", 5);
As variáveis podem ser utilizadas posteriormente no código js.
Executando
A execução acontece de maneira top/down, se quiser chamar uma função basta declarar e chamar após sua declaração, similar ao browser.
engine.eval( "function ola(a, b) { return a + b; }" );
engine.eval("print('Resultado: '+ ola(aParam, bParam) )");
Recuperando valores
Ainda é possível recuperar valores utilizando o .get
, veja:
engine.eval("var x = m.get('c');");
System.out.println("Max num: " + engine.get("x"));
Este é um exemplo simples, caso tenha alguma dúvida deixe nos comentários.
Não esqueca de deixar suas dúvidas nos comentários e compartilhar este post.