Inicio > Java, JavaScript > Comunicar Java (Applet) y JavaScript (Comunicación Web)

Comunicar Java (Applet) y JavaScript (Comunicación Web)

Hoy ,dia domingo y aun de vacaciones , estaba aburrido a no poder mas. y para no perder mi tiempo intente conectar a Java (Applet) con JavaScript, Habia visto JavaScript conectado con Flash pero no Java con JavaScript. Por lo que Busque y busque alguna forma de conectarlos y encontre esto.

En JCreator cree un proyecto “Basic Java Applet” y me Genero Automaticamente este codigo:

JavaJavaScript.java

import java.awt.*;
import java.applet.*;
public class JavaJavaScript extends Applet {
public void init() {
}
public void paint(Graphics g) {
g.drawString("Welcome to Java!!", 50, 60 );
}
}

a ese codigo le agregue un metodo holaMundo() que me devolviera un String ( se supone que despues quiero llamar a ese metodo desde javascript , por lo tanto debe devolverme alguna cosa)

import java.awt.*;
import java.applet.*;
public class JavaJavaScript extends Applet {
public void init() {
}
public void paint(Graphics g) {
g.drawString("Welcome to Java!!", 50, 60 );
}
public String holaMundo() {
return "Fui llamado desde JavaScript :D";
}
}
}

luego de eso compile y me genero un archivo lamado JavaJavaScript.class.

Despues de hacer eso cree un pequeño plugin JavaScript usando jQuery

(function($) {
var idApplet = null;
var returnData = null;
jQuery.initApplet = function( id ){
idApplet = id;
return this;
}
jQuery.callMethod = function( metodo,parametros ){
if(parametros != null)
return eval('document.all["'+idApplet+'"].'+metodo+'("'+parametros+'")');
else
return eval('document.all["'+idApplet+'"].'+metodo+'()');
}
})(jQuery);

La forma de usarlo es:

$.initApplet(NOMBRE_DEL_APPLET).callMethod(METODO_A_LLAMAR,[PARAMETROS_DEL_METODO]);

Despues de hacer eso ya estaba listo para testear el codigo usando HTML.


	
	
	

	
	
		

<a href="#">Testear</a>

	

Al hacer Click en el link “Testear” llama al metodo del Applet, el applet retorna datos y esos datos son tomados nuevamente por javascript y los muestra por alert

Como ven no es tan complicado.

Utilidades:
– Los Applet son muy feo esteticamente, pero tiene la fortaleza de ser una aplicacion java. Al poder comunicar Javascript con Java se podrian hacer diseños utilizando CSS y Javascript pero corriendo por abajo Java.

– El ancho de Banda mensual en los hostings es siempre un punto en contra al querer utilizar recursos de otras webs. Usando java se ahorra esa transferencia al ser utilizado por el lado del cliente (El usuario usa su ancho de banda y recuersos para conectarse). Por lo que se podria hacer una web que utilice recursos de otras webs con Java pero manipulados con JavaScript

Aqui hice un Ejemplo que conecto a mi Twitter desde un applet y los datos descargados de twitter son manipulados por javascript

Aca el ejemplo:
Codigo Java (Applet)

/**
 * @(#)JavaJavaScript.java
 *
 * JavaJavaScript Applet application
 *
 * @author Esteban Fuentealba
 * @version 1.00 2009/7/27
 */

import java.awt.*;
import java.applet.*;
import java.net.*;
import java.util.Scanner;
public class JavaJavaScript extends Applet {
	private HttpURLConnection con;
	private String link="";
	private URL url;
	public void init() {
		this.link = getParameter("urlLink");
		try {
			url = new URL(this.link);
		} catch(Exception ex) {

		}
	}
	public void paint(Graphics g) {
		g.drawString("Welcome to Java!!", 50, 60 );
	}
	public String getMiWeb() {
		System.getSecurityManager().checkPermission(new SocketPermission(url.getHost(), "connect"));
		StringBuffer sb = new StringBuffer();
		try {

		con = (HttpURLConnection)this.url.openConnection();
		con.connect();
		Scanner scan = new Scanner(con.getInputStream());

		while(scan.hasNext()) {
			sb.append(scan.nextLine());
		}
				} catch(Exception ex) {
					sb.append(ex.getMessage());
				}
    	return(sb.toString());
    }
}

Codigo HTML – JavaScript

	
	
	
		(function($) {
			var idApplet = null;
			var returnData = null;
			jQuery.initApplet = function( id ){
				idApplet = id;
				return this;
			}
			jQuery.callMethod = function( metodo,parametros ){
				if(parametros != null)
					return eval('document.all["'+idApplet+'"].'+metodo+'("'+parametros+'")');
				else
					return eval('document.all["'+idApplet+'"].'+metodo+'()');
			}
		})(jQuery);

		//Metodo JavaScript que Llama al metodo getMiWeb Java
		function onOpen() {
			var obj = $.initApplet('test').callMethod('getMiWeb');
			$(obj).find('item').each(function(){
				$('#resultados').append($(this).find('title').text()+"<br />");
			});
		}
	
	
	
		
			<h1>Ejemplo Java (Applet) a JavaScript</h1>
			<br />
				
				<!-- Le paso como parametro al applet mi link RSS de twitter -->
					
				
			<a href="#">Carga Datos de mi Twiter</a>
			<!-- Div contendra la informacion -->
			<div id="resultados"></div>
		
	

Aca el Ejemplo Funcionando:
http://estebanfuentealba.net/ejemplos/JavaJavaScript/classes/JavaJavaScript.htm

PD: Testeado en Firefox 3.5.1

Espero que a alguien le sirva o le paresca interesante

Saludos!

  1. fcsonline
    febrero 12, 2010 a las 2:39 pm

    Hola,

    te felicito por el ejemplo.

    He juegado un poco más, creando métodos que no solo devuelvan String desde Java, como por ejemplo List, HashMap, Object. Por lo que he visto, siempre se hace un toString del objecto devuelto.

    Saludos!

  2. marzo 10, 2010 a las 1:42 am

    Tu link está roto

  3. abril 12, 2010 a las 10:18 am

    puedes arreglar el link?

  4. Diogenes
    febrero 14, 2012 a las 7:32 am

    buenas, buenas espero que sigan por aquí, tengo algo similar, osea creo exactamente igual… yo tengo un ejemplo mas claro…!!!

    tengo un código viejo en java de un sistema de compra-venta y ahora ando jugando con el sencha touch 1.1.1 que esta hecho totalmente en HTML5, javascript, ccs3

    fuente: http://www.sencha.com/products/touch/

    y quiero aprovechar mi código viejo dándole una interfaz touch… Se entiende mi drama??

  5. Diogenes
    febrero 14, 2012 a las 7:55 am

    ahh per

    Diogenes :
    buenas, buenas espero que sigan por aquí, tengo algo similar, osea creo exactamente igual… yo tengo un ejemplo mas claro…!!!
    tengo un código viejo en java de un sistema de compra-venta y ahora ando jugando con el sencha touch 1.1.1 que esta hecho totalmente en HTML5, javascript, ccs3
    fuente: http://www.sencha.com/products/touch/
    y quiero aprovechar mi código viejo dándole una interfaz touch… Se entiende mi drama??

    ahh perdon.. mi codigo “viejo” es un servlet.. que hago en ese caso?

    • estebanfuentealba
      febrero 15, 2012 a las 10:54 pm

      La mejor opción es crear webservices con la lógica de tu antiguo código.

      yo ocupé Extjs4 en un proyecto , supongo que es casi la misma sintaxis para sencha touch

      Saludos!

  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: