icono_twiter icono LinkedIn icono Facebook Icono Xing
Roberto Canales Mora

Creador y propietario de AdictosAlTrabajo.com, Director General de Autentia S.L., Ingeniero Técnico de Telecomunicaciones y Executive MBA por el Instituto de Empresa 2007.
Twitter:

Autor de los Libros: Planifica tu éxito: de aprendiz a empresario y Informática profesional, las reglas no escritas para triunfar en la empresa

Puedes consultar mi CV y alguna de mis primeras aplicaciones (de los 90) aquí

Ver todos los tutoriales del autor

Fecha de publicación del tutorial: 2003-09-21

Tutorial visitado 35.643 veces Descargar en PDF
New Page 1

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.

Otro tutorial 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">
<applet width="300" height="300" code="appletroberto.appletsimple.class" 
codebase="./">Applet que muestra imagen simple</applet>
</p>

</body>
</html>

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 javax.servlet.http.*;

import org.jfree.data.*;
import org.jfree.chart.*;
import org.jfree.chart.plot.*;

/**
*
* @author Roberto Canales
* @version
*/
public class servletGeneradorGraficaDinamica extends HttpServlet 
{

public JFreeChart crearChart(int array[])
{
XYSeries series = new XYSeries("Evolucion Sesiones");

// inicializamos los valores pasados
for (int i=0; i<array.length; i++)
{
series.add(i, array[i]);
}


XYDataset juegoDatos= new XYSeriesCollection(series);

JFreeChart chart = ChartFactory.createLineXYChart("Sesiones en Adictos al Trabajo", 
"Meses", "Sesiones", juegoDatos, 
PlotOrientation.VERTICAL,
true,true,true 
);

return chart;
}


int getParamEntero(HttpServletRequest request,String pNombre, int pDefecto)
{
String param = request.getParameter(pNombre);

if (param == null || param.compareTo("") == 0)
{
return pDefecto;
}

return Integer.parseInt(param);

}


/** Processes requests for both HTTP GET and POST methods.
* @param request servlet request
* @param response servlet response
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("image/jpeg");

OutputStream salida = response.getOutputStream();

int ancho = getParamEntero(request,"ancho",300);
int alto = getParamEntero(request,"alto",300);

// esto es una ñapa paro de momento solo queremos demostrar que funciona
int iNumeroElemento = getParamEntero(request,"elementos",3);

int array[] = new int[iNumeroElemento];

// leemos variables al estilo y0=1 y1=2 y3=22
for(int i = 0; i< array.length;i++)
{
array[i] = getParamEntero(request,"y" + i ,0);
}


JFreeChart grafica = crearChart(array);

ChartUtilities.writeChartAsJPEG(salida,grafica,ancho,alto);

salida.close();
}

/** Handles the HTTP GET method.
* @param request servlet request
* @param response servlet response
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

}

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?

 

Sobre el Autor ..

A continuación puedes evaluarlo:

Regístrate para evaluarlo

Por favor, vota +1 o compártelo si te pareció interesante

Share |
Anímate y coméntanos lo que pienses sobre este TUTORIAL:

Fecha publicación: 2006-09-05-10:37:22

Autor:

[rosy] me gusto mucho este manual porke aparte de explicarte con ejemplos te muestra lo que te va a salir a la hora de ejecutar el programa y asi ya no tienes duda si lo que te salio en el programa era lo que deberia de salirte o te ekivokaste..... la verdad esta chilo me gusto mucho.