Lunes, 01 Agosto 2016 00:00

Ejecutar Codigo Java Script en Java

Escrito por 
Valora este artículo
(0 votos)

A partir del jdk 6 java posee la posibilidad de poder ejecutar código  Java Script  en una aplicación JSE, o una JEE del lado del servidor . Quizas algún dia nos encontremos en la necesidad de ejecutar código java script, pero dentro de una aplicación java sin la necesidad de abrir un navegador.

Algunas de las razones de poder ejecutar código Java Script podrían ser las siguientes:

  • Tranquilamente podríamos externalizar  parte de la aplicación, es decir podemos tener un archivo Java Script, fuera de nuestra aplicación y poder cambiarlo dinámicamente según nuestras necesidades.
  • Al ser un lenguaje de scripting, no son fuertemente tipados, es decir no es necesario declarar el tipo de variable a usar,  o bien creamos una variable y la inicializamos como entera, luego  podemos asignar a la misma variable un string y no va a haber problemas.
  • Usar funcionalidades de Java Script y poder usarlas desde una aplicacion Desktop en Java

En este post veremos como realizar ejecutar una pequeña porción de código Java Script, en una aplicación Java.

La funcionalidad Java Script se encuentra en el paquete javax.script, por tal motivo necesitamos importar tal paquete . Se trata de una API relativamente pequeña y simple.
La forma más sencilla de utilizar la API de secuencias de comandos es la siguiente:

  1. Crear un ScriptEngineManager objeto.
  2. Obtener un objeto ScriptEngine de la instancia ScriptEngineManager.
  3. Evaluar líneas java script  utilizando el método eval  de ScriptEngine

A continuacion   vemos un simple ejemplo que realiza  un print  de Java Script

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package javascript;
 
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
 
/**
 *
 * @author rafa22
 */
public class JavaScript {
 
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // creamos el objeto script de ScriptEngineManager
        ScriptEngineManager script = new ScriptEngineManager();
        //del objeto script obtenemos la instancia del tipo
        //JavaScript y se la asignamos al objeto js del tipo ScriptEngine
        ScriptEngine js = script.getEngineByName("JavaScript");
        try {
            // evaluamos lineas java script
            js.eval("print('HOLA MUNDO ')");
        } catch (ScriptException ex) {
            System.out.println("Hubo un error:"+ex);
        }
 
    }
    
}

La salida

Ahora  incluiremos una función y la invocaremos, para ello agregamos las siguientes líneas

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package javascript;
 
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
 
/**
 *
 * @author rafa22
 */
public class JavaScript {
 
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws ScriptException, NoSuchMethodException {
       ScriptEngineManager script = new ScriptEngineManager();
        ScriptEngine js = script.getEngineByName("JavaScript");
        // Añanidimos al string codigo JavaScript
        String codigo = "function hola(nombre) { print('Hola, ' + nombre); }";
        // ejecutamos las lineas
        js.eval(codigo);
        // creamos un objeto inv a partir de la referencia js
        Invocable inv = (Invocable) js;
        // invocamos  a la funcion hola partir del metodo
        //invokeFunction("nombre de la funcion","parametros")
        inv.invokeFunction("hola", "JAVA" );
 
    }
    
}

La salida seria

Ahora veremos un poquito de codigo mas trabajado javascript, para poder ejecutarlo desde una apliacion desktop o bien del lado del servidor,

El siguiente codigo es el que podriamos tener en una pagina web, encerrado entre etiquetas <script></script>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?xml version="1.0" encoding="UTF-8"?>
<!--
To change this template, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <title>TODO supply a title</title>
        <script type="JavaScript" >
              function suma(a,b){
                var resultado= a+b;
                return resultado;
                }
              function resta(a,b){
                var resultado= a-b;
                return resultado;
                }
              function multiplicacion(a,b){
                var resultado= a*b;
                return resultado;
                }
              function division(a,b){
                var resultado= a/b;
                return resultado;
                }
              function SumaYMultiplica(){
                var resultado=suma(2, 10)+multiplicacion(2, 4);
                return resultado;
                }
 
        </script>
    </head>
    <body>
    </body>
</html>

 Bien tal codigo lo podriamos ejecutar dentro de una aplicacion java, que se este ejecutando del lado del servidor o bien en una aplicacion desktop JSE como lo haremos a continuacion, disponemos del siguiente codigo java para poder ejecutar el codigo JS anteriornmente citado

Bien ahora ya estamos en condiciones de ejecutar nuestro codigo, en donde llamamos a cada una de las funciones JS implementadas, la salida es la siguiente con los correspondientes resultados de las funciones.

Debemos tener en cuenta que desde este codigo no podemos llamar ninguna etiqueta html, recordemos que esto lo estamos ejecutando del lado del servidor  o bien desde una aplicacion de escritorio, pero no del lado del cliente....

Bien con esto vimos como tenemos en java la posibilidad de poder ejecutar java script del lado del servidor si quisiéramos, o bien en una aplicación JSE.

Visto 3154 veces Modificado por última vez en Lunes, 01 Agosto 2016 14:12

1 comentario

  • Enlace al Comentario Eduardonom Sábado, 09 Diciembre 2017 06:21 publicado por Eduardonom

    rayhhealthcare online order medication canadian pharcharmy online Canadian Online Pharmacy cialis canadian pharmacy edemedications.ru canadian pharmacy supreme suppliersmumbaiindia acheter nizagara viagra for sale in canada canadian pharmacy online

Deja un comentario

Asegúrate de llenar la información requerida marcada con (*). No está permitido el código HTML. Tu dirección de correo NO será publicada.