Programación Orientada a Objetos (3 curso, grupo 2, tarde) 19 Marzo, 2001
7. Applets
Páginas web estáticas
Applets
Páginas web estáticas: html Páginas web dinámicas
Navegador web § Texto con formato
§ Multimedia: imágenes, sonido, plug-ins
§ Hipertexto (links)
sin estado
§
Clientes
Ejecución de programas en el servidor (CGI's)
§ Funcionalidades básicas de interfaz de usuario:
botones, campos, etc.
.html .html
Cliente Servidor
3 4
Páginas html dinámicas: html + Java Applets
Navegador web
§ Páginas dinámicas: § Se ejecutan desde un navegador de páginas web (i.e. un browser de html)
– Se ejecuta código (cálculos, animaciones, etc.) Netscape 2.0+ es compatible con JDK 1.1, plug-in para JDK 1.2
– Interfaz gráfica plena (botones, menús, dibujar,
§ No requieren definir main (applets vs. aplicaciones stand-alone)
eventos, etc.)
El navegador es quien invoca los métodos del applet
§ El código se ejecuta en la máquina cliente
– Se evita sobrecargar la CPU del servidor § Se definen creando una subclase de [Link]
– Se evita el tráfico de datos y resultados por la red class A extends Applet {...}
§ El navegador crea objetos de las clases de applets y los gestiona
.html .html
.class .class llamando a los métodos init, start, stop, destroy, paint
applet applet § Programar un applet = sobreescribir estos métodos
§ Una vez definido un applet A, se puede incluir en un documento html con
<applet code="[Link]" width=500 height=20> </applet>
Directorio del fichero .class: document base, codebase y packages
Cliente Servidor
5 6
Pablo Castells E.T.S. Informática, Universidad Autónoma de Madrid
Programación Orientada a Objetos (3 curso, grupo 2, tarde) 19 Marzo, 2001
7. Applets
Los métodos propios de Applet
Ejemplo
§ init(): inicialización, papel equivalente a un constructor
Invocado al cargar la página (en algunos browsers tb. al cargar de nuevo) [Link]
§ start(): ejecuta las acciones del applet (a menudo iniciando threads) import [Link];
Invocado al cargar y volver a cargar import [Link];
§ stop(): detener las acciones iniciadas con start() public class HelloWorld extends Applet {
public void paint (Graphics g) {
Invocado al abandonar la página, minimizar la ventana o cerrar el navegador
[Link] ("Hello world!", 50, 25);
§ destroy(): clean-up adicional además de stop() }
}
Invocado al cerrar el navegador
§ Métodos heredados: paint, update, repaint
7 8
[Link]
<HTML>
<HEAD> <TITLE> A Simple Program </TITLE> </HEAD>
Carga de un applet
<BODY>
§ La JVM del navegador carga el fichero .class indicado en <applet...>,
Here is the output of my program:
<APPLET CODE="[Link]" WIDTH=150 HEIGHT=25> accediendo a él a través de la red si no es local
</APPLET>
§ El navegador crea una instancia de la subclase de applet definida en el
</BODY>
</HTML> fichero .class
§ El navegador invoca el método init() sobre el objeto creado
§ El navegador invoca el método start() sobre el objeto creado
§ Si el applet utiliza una clase auxiliar:
1. El navegador comprueba si la clase ya está cargada en el cliente
2. Si no lo está, la busca en el servidor de la página html
§ Cuando la ventana del navegador se actualiza, invoca al método paint
del applet
9 10
...
public void init () {
Ejemplo
buffer = new StringBuffer ();
addItem ("initializing... ");
}
import [Link]; public void start () { addItem ("starting... "); }
public void stop () { addItem ("stopping... "); }
import [Link];
public void destroy () {
public class Simple extends Applet { addItem ("preparing for unloading...");
StringBuffer buffer; }
void addItem (String newWord) { public void paint (Graphics g) {
[Link] (newWord); //Draw a Rectangle around the applet's display area.
[Link] (newWord); Standard output:
[Link] (0, 0, getSize () .width - 1,
repaint (); Java-console
del navegador getSize () .height - 1);
} //Draw the current string inside the rectangle.
... [Link] ([Link] (), 5, 15);
}
11 } 12
Pablo Castells E.T.S. Informática, Universidad Autónoma de Madrid
Programación Orientada a Objetos (3 curso, grupo 2, tarde) 19 Marzo, 2001
7. Applets
Un applet es una interfaz gráfica AWT
§ Dibujar: paint, update, repaint de [Link]
§ Añadir widgets: add, remove, setLayout de [Link]
§ Respuesta a input del usuario:
Implementar p.e. [Link]
Funciones de dibujo
Object Component
Respuesta a eventos del usuario
Añadir componentes
Container
Gestionar layout
Layout por defecto: [Link]
Panel
(centrado con salto de línea)
Applet Respuesta a eventos del navegador
§ Un applet no requiere crear una ventana: utiliza la del navegador
§ Un applet tiene tamaño fijo, no se puede cambiar
13 14
Respuesta a eventos: ejemplo
public class Click extends Simple implements MouseListener {
public void init () {
addMouseListener (this);
buffer = new StringBuffer (); Método de
Component
addItem ("initializing... ");
}
public void mouseClicked (MouseEvent event) {
addItem ("click!... "); Método de
} MouseListener
public void mouseEntered (MouseEvent event) { }
public void mouseExited (MouseEvent event) { }
public void mousePressed (MouseEvent event) { }
public void mouseReleased (MouseEvent event) { }
}
15 16
Hilos en applets: ejemplo
public class Counter extends Applet implements Runnable {
Hilos y applets boolean running = false; int counter = 0;
public void run () {
while (running) {
repaint ();
§ Un applet puede pertenecer a múltiples hilos try { [Link] (1000); }
catch (InterruptedException e) {}
§ Muchos navegadores asignan un hilo para cada applet de una página html }
§ Un applet puede lanzar varios hilos en start() }
public void paint (Graphics g) {
§ Si un applet tiene una tarea que consume mucho tiempo, conviene [Link] ([Link] (++counter), 5, 15);
}
realizarla en el método run() de un hilo public void start () {
if (!running) {
running = true;
new Thread (this) .start ();
}
}
public void stop () { running = false; }
17 } 18
Pablo Castells E.T.S. Informática, Universidad Autónoma de Madrid
Programación Orientada a Objetos (3 curso, grupo 2, tarde) 19 Marzo, 2001
7. Applets
Otras funcionalidades de los applets
§ Parámetros: papel similar a argumentos de main o de constructor Seguridad
– <applet ...> <PARAM NAME=param1 VALUE=valor>... <\applet>
– Método getParameter(String) de Applet § Restricciones para los applets remotos: the sandbox policy
§ Procedencia del applet – No pueden leer ni escribir en el disco local (cliente)
– getCodeBase()
→ [Link] – No pueden cargar clases java locales
– getDocumentBase()
– No pueden definir métodos nativos ni arrancar programas en el cliente
§ La interfaz [Link]
– Sólo pueden realizar conexiones al servidor del que proceden
– Applet: getAppletContext() → AppletContext
– AppletContext: showDocument(URL), showStatus(String), § Diferencias de unos navegadores a otros
getApplet(String) § Para superar las restricciones: comunicarse con un programa que se
§ Sonido: la interfaz [Link] ejecute en el servidor y realice las funciones deseadas
– Applet: play(URL), getAudioClip(URL) → AudioClip
– AudioClip: play(), loop(), stop()
19 20
Pablo Castells E.T.S. Informática, Universidad Autónoma de Madrid