Desarrollo de Applets
Uno de los desarrollos que más ha contribuido al arranque de Java, fue el
desarrollo de las llamadas Applets.
Un applet es un pequeño componente Java de se enlaza a una página Html.
Al descargarse un navegador nuestra página Html, detecta la etiqueta que
identifica al applet y arranca una máquina virtual. Posteriormente, solicita
los ficheros necesarios para la ejecución e inicializa el programa.
Hay un punto clave que hay que tener en cuenta para que las applets
funcionen… la configuración de seguridad del navegador …
Los applets son elementos que se deben utilizar con cuidado porque mucha
gente es reacia a autorizar que se ejecute su código… además, es muy posible
que en Internet con líneas de comunicación lentas… no sea muy factible su
utilización.
Otrotutorial que tenemos sobre JFreeChart ha presentado mucho interés… y mucha
gente me ha preguntado como usarlo desde un applet.
En un primer paso… vamos a hacer una cosa más curiosa ….. seguir usando
nuestro servlet para generar las gráficas dinañicamente en el servidor (y no
tener que distribuir las clases a través de internet… y desde un applet
llamar a este servlet para que nos genere la grafica deseada… es decir, la
imagen.
El código de nuestro applet es bastante sencillo…
La dinamica es sencilla
Extendemos una clase de applet
public class appletsimple extends Applet
implements ImageObserver
Al arrancar el applet, cargamos la imagen
URL trayectoBase = this.getCodeBase();
depura(«El trayecto base es: » + trayectoBase.toString());
URL
trayectoImagen = new URL(trayectoBase,»imagen.jpg»);
this.getAppletContext().showStatus(trayectoImagen.toString());
depura(«El fichero es » + trayectoImagen.toString());
iMiGrafica =
getImage(trayectoImagen);
Y pintamos en pantalla la imagen
g.drawImage(iMiGrafica,50,60,this);
/* * appletsimple.java * * Created on 21 de septiembre de 2003, 16:06 */ package appletroberto; /** * * @author Administrator */ import java.awt.*; import java.applet.*; import java.io.*; import java.net.*; import java.awt.image.*; public class appletsimple extends Applet implements ImageObserver { Image iMiGrafica = null; public void init() { depura("Inicializamos el applet"); } public void paint(Graphics g) { g.drawString("Este es el mensaje", 50,50); depura("Pintamos cadena"); g.drawImage(iMiGrafica,50,60,this); } public void start() { depura("Arranque de la App"); try { URL trayectoBase = this.getCodeBase(); depura("El trayecto base es: " + trayectoBase.toString()); URL trayectoImagen = new URL(trayectoBase,"imagen.jpg"); this.getAppletContext().showStatus(trayectoImagen.toString()); depura("El fichero es " + trayectoImagen.toString()); iMiGrafica = getImage(trayectoImagen); } catch (Exception e) { depura("Error al cargar Imagen"); } } public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) { if (infoflags == ImageObserver.ALLBITS) { depura("Ya se ha cargado"); repaint(); } return true; } void depura(String pCadena) { System.out.println("Mensaje: " + pCadena ); } } |
Ahora creamos una página html con la etiqueta adecuada
<html> <body> <p align=»left»> |
Para probar nuestro programa … ejecutamos la aplicación de prueba appletviewer
que viene con el JSDK
Y el resultado del programa es:
Ahora, si queremos que nuestro applet utilice el servlet que
genera la gráfica, solamente debemos cambia la URL para llamar al servlet.
Ahora modificamos nuestro servlet para pasarle los datos que
queremos pintar
/* * servletGeneradorGraficaDinamica.java * * Created on 21 de septiembre de 2003, 17:46 */ import java.io.*; import java.net.*; import javax.servlet.*; import org.jfree.data.*; /** public JFreeChart crearChart(int array[]) // inicializamos los valores pasados XYDataset juegoDatos= new XYSeriesCollection(series); JFreeChart chart = ChartFactory.createLineXYChart(«Sesiones en Adictos al Trabajo», return chart;
int getParamEntero(HttpServletRequest request,String pNombre, int pDefecto) if (param == null || param.compareTo(«») == 0) return Integer.parseInt(param); }
/** Processes requests for both HTTP GET and POST methods. OutputStream salida = response.getOutputStream(); int ancho = getParamEntero(request,»ancho»,300); // esto es una ñapa paro de momento solo queremos demostrar que funciona int array[] = new int[iNumeroElemento]; // leemos variables al estilo y0=1 y1=2 y3=22
JFreeChart grafica = crearChart(array); salida.close(); /** Handles the HTTP GET method. } |
Vamos a probar el servlet por separado
Solicitamos nuestra URL
http://localhost:8081/servlet/servletGeneradorGraficaDinamica?elementos=3&y0=2&y1=33&y2=23
Y vemos el resultado
Y ahora readaptamos el applet para solicitar una imagen en la
URL.
public void start() { depura("Arranque de la App"); try { URL trayectoBase = this.getCodeBase(); depura("El trayecto base es: " + trayectoBase.toString()); //URL trayectoImagen = new URL("http://localhost:8081/servlet/servletGeneradorGraficaDinamica? //elementos=3&y0=2&y1=33&y2=23$ancho=200&alto=300"); Tambien podriamos indicar tamaño URL trayectoImagen = new URL("http://localhost:8081/servlet/servletGeneradorGraficaDinamica?elementos=3&y0=2&y1=33&y2=23"); this.getAppletContext().showStatus(trayectoImagen.toString()); depura("El fichero es " + trayectoImagen.toString()); iMiGrafica = getImage(trayectoImagen); } catch (Exception e) { depura("Error al cargar Imagen"); } } |
Para que esto funcione en un navegador Web externo… debemos
tener la precaución de copiar todos los ficheros del applet y la página HTML
al directorio Web de nuestro servidor (pero no copiar los .java)
Es probable que en vuestra página Web no funcione bien ….
mirar las opciones de seguridad y …. ya hablaremos de la firma
digital de applets para evitar problemas …. pero …eso será en otro
tutorial …
La verdad es que es bastante sencillo ¿verdad?