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:

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