Lunes, 14 Julio 2014 20:00

Java Script en cualquier aplicacion 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.

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

Como siempre usamos Netbeans, nos creamos un proyecto Java, y en nuestro Main agregamos las siguientes líneas

  1. package aplicacion;
  2. import javax.script.*;
  3. /**
  4.  *
  5.  * @author RAFAEL
  6.  */
  7. public class Main {
  8.  
  9.     /**
  10.      * @param args the command line arguments
  11.      */
  12.     public static void main(String[] args) throws ScriptException {
  13.          // creamos el objeto script de ScriptEngineManager
  14.         ScriptEngineManager script = new ScriptEngineManager();
  15.         //del objeto script obtenemos la instancia del tipo
  16.         //JavaScript y se la asignamos al objeto js del tipo ScriptEngine
  17.         ScriptEngine js = script.getEngineByName("JavaScript");
  18.         // evaluamos lineas java script
  19.         js.eval("print('HOLA MUNDO ')");
  20.  
  21.     }
  22.  
  23. }


Observamos la salida, y vemos nuestro” hola mundo”



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

        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" );
 

Ejecutamos y observamos la salida

A pedido 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>

<?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

 
 
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class Main {
    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 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;" +
                "}" ;
        js.eval(codigo);
        Invocable inv = (Invocable) js;
        System.out.println(inv.invokeFunction("suma",1,4));
        System.out.println(inv.invokeFunction("resta",12,4));
        System.out.println(inv.invokeFunction("multiplicacion",16,34));
        System.out.println(inv.invokeFunction("division",100,4));
        System.out.println(inv.invokeFunction("SumaYMultiplica"));
    }
}


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 547 veces

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.