Executando código JavaScript usando ScriptEngineManager em java

Postado em por Wolmir Cezer Garbin em Java | 17 Visualizações
Última atualização em:

Neste post vou mostrar como é possível executar código JavaScript dentro do código java de maneira muito simples

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.

Wolmir Cezer Garbin

Wolmir Cezer Garbin


Sou formado em Desenvolvimento de Sistemas para Internet pela faculdade Mater Dei e Pós graduado em Desenvolvimento de sistemas em Java pela UTFPR. Trabalho a mais de 9 anos com desenvolvimento em Java, Android e Web utilizando as principais tecnologias do mercado. Atuo como professor na faculdade Mater Dei, programador na Garbo Software e criador do Receitas de Código.

Ver mais

Posts relacionados


Code Conference

Esta é uma conferência de código realizada na cidade de Pato Branco para dissiminar tendências e informações sobre programação e novas tecnológias

Veja mais sobre o Code Conference

Publique seu post no Receitas de Código

Agora você pode publicar seu post no Receitas de Código e compartilhar seu conhecimento com muitas pessoas!

Quero publicar