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

Wolmir Cezer Garbin por Wolmir Cezer Garbin - - Java - TUTORIAL

Última atualização em: | 6314 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 e ScriptEngine de javax.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.


Apoiadores

Publique seu post no Receitas de Código

Aguarde, estamos trabalhando para que você possa publicar sua postagem no Receitas de Código!