Escribir Applets

Los applets pueden encontrar otros applets y enviarles mensajes, con las siguientes restricciones de seguridad:

  • Muchos navegadores requieren que los applets sean originarios desde el mismo servidor.
  • Muchos navegadores adem�s requieren que los applets procedan del mismo directorio del servidor (el mismo code base).
  • El API Java requiere que los applets se est�n ejecutando en la misma p�gina, en la misma ventana del navegador.
Nota:

Algunos navegadores permiten a los applets invocar m�todos de otros applets -- incluso de applets en diferentes p�ginas del mismo navegador -- siempre que todos los applets tengan el mismo code base. Este m�todo de comunicaci�n entre applets no est� soportado por el API Java, y posiblemente no ser� soportado por todos los navegadores.

Un applet puede encontrar otro applet busc�ndolo por su nombre (usando el m�todo AppletContext getApplet) o buscando todos los applets que hay en una p�gina (usando el m�todo AppletContext getApplets). Ambos m�todos, si tienen �xito le dan al llamador uno o m�s objetos Applet. Una vez que el llamador encuentra un objeto Applet, el llamador puede invocar los m�todos del objeto.

.�Encontrar un Applet por su Nombre: El M�todo getApplet

El m�todo getApplet busca a trav�s de todos los applets de la p�gina actual para ver si uno de ellos tiene el nombre especificado. Si es as�, getApplet devuelve el objeto Applet del Applet.

Por defecto, un applet no tiene nombre. Para que un applet tenga nombre, se debe especificar en el c�digo HTML que a�ade el applet a la p�gina. Podemos especificar el nombre de una applet de dos formas:

  • Especificando el atributo NAME dentro de la etiqueta <APPLET>.

    Por ejemplo:

    <APPLET CODEBASE=example/ CODE=Sender.class
        WIDTH=450
        HEIGHT=200
        NAME="buddy">
    . . .
    </applet>
    
  • Especificando un par�metro NAME con una etiqueta <PARAM> .

    Por ejemplo:

    <APPLET CODEBASE=example/ CODE=Receiver.class
        WIDTH=450
        HEIGHT=35>
    <PARAM NAME="name" value="old pal">
    . . .
    </applet>
    
Nota de Navegador:

Aunque al menos un navegador compatible Java concede una b�squeda sensible a las ma�usculas, el comportamiento esperado para el m�todo getApplet es realizar un b�squeda no sensible a las may�sculas. Por ejemplo, getApplet("old pal") y getApplet("OLD PAL") deber�an encontrar un applet llamado "Old Pal".

Pulsa sobre la imagen del applet para ver el ejemplo de b�squeda por nonbre en acci�n:

El primero, el emisor, busca al segundo, el receptor. Cuando el emisor encuentra al receptor, le env�a un mensaje llamando a uno de sus m�todos (pas�ndo el nombre del emisor como argumento) El receptor reacciona a esta llamada a m�todo cambiando el string m�s la izquierda a "Received message from sender-name!".

Nota:

Como algunos viejos navegadores no soportan 1.1, los applets del ejemplo son versiones 1.0. Aqu� est�n los enlaces al c�digo 1.0 para las clases Sender y el Receiver.

Para ejecutar las versiones 1.1 de los applets puedes ir a la p�gina example-1dot1/iac.html.

Prueba esto:

Pulsa sobre el bot�n Send message del applet de la parte superior (el Sender). En su ventana aparecer� alguna informaci�n de estado y el Receiver confirmar� (con su propia cadena de estado) que ha recibido el mensaje. Despu�s de haber le�do la cadena de estado del Receiver, pulsa el bot�n Clear para resetear el receptor. En el Campo de texto llamado "Receiver name:," del Sender, teclea buddy y pulsa Return. Como "buddy" es el nombre del propio Sender, �ste encontrar� un applet llamado buddy pero no querr� enviarle un mensaje porque no es un ejemplar de Receiver.

Aqu� est� el programa completo del Sender. El c�digo usado para buscar y comunicarse con el Receiver se lista abajo. El c�digo que podemos usar sin modificar en nuestros propios applets est� en negrita.

Applet receiver = null;
String receiverName = nameField.getText(); //Get name to search for.
receiver = getAppletContext().getApplet(receiverName);

El Sender se asegura de que ha encontrado un Receiver y que es un ejemplar de la clase correcta (Receiver). Si todo va bien, el Sender env�a un mensaje al Receiver. (Aqu� est� el Programa Receiver.)

if (receiver != null) {
    //Use the instanceof operator to make sure the applet
    //we found is a Receiver object.
    if (!(receiver instanceof Receiver)) {
        status.appendText("Found applet named "
                          + receiverName + ", "
                          + "but it's not a Receiver object.\n");
    } else {
        status.appendText("Found applet named "
                          + receiverName + ".\n"
                          + "  Sending message to it.\n");
        //Cast the receiver to be a Receiver object
        //(instead of just an Applet object) so that the
        //compiler will let us call a Receiver method.
        ((Receiver)receiver).processRequestFrom(myName);
    }
} . . .

Desde el punto de vista de un applet, su nombre se almacena en un par�metro llamado NAME. Puede obtener el valor del par�metro usando el m�todo Applet getParameter. Por ejemplo, Sender obtiene su propio nombre con el siguiente c�digo:

myName = getParameter("NAME");

Para m�s informaci�n sobre como usar getParameter, puedes ver la p�gina Escribir C�digo para Soportar Par�metros.

Los applets de esta p�gina realizan comunicaci�n en un sentido -- desde el emisor al receptor. Si queremos que el receptor pueda enviar mensajes al emisor, s�lo tenemos que hacer que el emisor le de una referencia de s� mismo (this) al receptor. Por ejemplo:

((Receiver)receiver).startCommunicating(this);

.�Encontrar Todos los Applets de una P�gina: El M�todo getApplets

El m�todo getApplets devuelve una lista (una Enumeration, para ser precesisos) con todos los applets de la p�gina. Por razones de seguridad, muchos navegadores y visualizadores de applets implementan getApplets para que s�lo devuelva aquellos applets originarios del mismo host del applet que llam� a getApplets. Aqu� tenemos un applet que simplemente lista los applets que puede encontrar en esta p�gina:

Pulsa sobre la imagen para ejecutar los applets...
Nota:

Como algunos viejos navegadores no soportan 1.1, los applets de lejemplo son versiones 1.0. Aqu� est� el enlace al c�digo 1.0 para la clase GetApplets y el c�digo de la versi�n 1.1.

Para ejecutar las versiones 1.1 de los applets puedes ir a la p�gina example-1dot1/iac2.html.

Abajo tenemos las partes importantes del m�todo que llama a getApplets. (Aqu� est� el programa completo.)

public void printApplets() {
    //Enumeration will contain all applets on this page (including
    //this one) that we can send messages to.
    Enumeration e = getAppletContext().getApplets();
    . . .
    while (e.hasMoreElements()) {
        Applet applet = (Applet)e.nextElement();
        String info = ((Applet)applet).getAppletInfo();
        if (info != null) {
            textArea.appendText("- " + info + "\n");
        } else {
            textArea.appendText("- "
                                + applet.getClass().getName()
                                + "\n");
        } 
    }
    . . .
}

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR

SIGUIENTE ARTÍCULO