Download Sin título de diapositiva

Document related concepts
no text concepts found
Transcript
TEMA 6.
Applets y servlets
1. Introducción
2. Applets
3. Servlets
1
Bibliografía
Bobadilla, J. y otros. Comunicaciones y
Bases de Datos en Java. Capítulos 1 y 6.
2
1 . Introducción
Conceptos

Applet
– aplicación Java diseñada
específicamente para ser ejecutada
en el contexto de un navegador
web.

Servlet
– aplicación Java diseñada para ser
ejecutada en el contexto de una
servidor web.
3
1 . Introducción
Esquema
Navegador
Servidor
APPLET
SERVLET
4
2 . Applets
HTML



Una applet se ejecuta en el contexto de un
navegador.
Un navegador es un programa cliente que
sabe interpretar el lenguaje html (Hiper Text
Mark Languaje)
Ejemplo de una página en HTML
<HTML>
<HEAD>Applet de Prueba</HEAD>
<BODY>
<OBJECT CODE="Hola.class" WIDTH=600 HEIGHT=400>
</OBJECT>
</BODY>
</HTML>
5
2 . Applets
Ejecutar un applet



Los applets están pensados para incluirse en
páginas HTML.
Usando la etiqueta <APPLET> u <OBJECT>,
especificamos (como mínimo) la localización de la
subclase de Applet o JApplet y las dimensiones de
la ventana donde se visualizará el applet.
Cuando una navegador que soporta Java encuentra
una etiqueta Applet, reserva espacio en la pantalla
para el applet, carga la subclase Applet dentro del
ordenador donde se está ejecutando el navegador y
6
crea una instancia de la subclase Applet
2 . Applets
Etiqueta applet y object en html


La etiqueta APPLET está desaprobado (con
todos sus atributos) en favor de OBJECT. A
continuación se presentan los diferentes atributos
que posee la etiqueta:
codebase = uri [CT]
– Este atributo especifica el URI base para el applet. Si este
atributo no se especifica, entonces su valor por defecto es
el mismo URI base que el del documento actual.

code = cdata [CS]
– Este atributo especifica o bien el nombre del fichero class
que contiene la subclase Applet compilada del applet, o
bien la ruta para obtener la clase, incluyendo al propio
fichero class. Se interpreta con respecto al URI base
(codebase) del applet. Deben estar presentes o bien code
o bien object.
7
2 . Applets
Etiqueta applet y object en html

name = cdata [CS]
– Este atributo especifica un nombre para la
instancia del applet, lo cual hace posible que los
applets de la misma página se encuentren (y se
comuniquen) entre sí.

archive = lista de uris [CT]
– Esta lista especifica una lista de URIs separados
por comas de archivos que contienen clases y
otros recursos que serán "precargados".
8
2 . Applets
Etiqueta applet y object en html

width = longitud [CI]
– Este atributo especifica la anchura inicial
del área de presentación del applet (sin
incluir las ventanas o cuadros de diálogo
que cree el applet).

height = longitud [CI]
– Este atributo especifica la altura inicial del
área de presentación del applet (sin
incluir las ventanas o cuadros de diálogo
que cree el applet).
9
2 . Applets
Etiqueta applet y object en html

Atributos definidos en otros lugares
– id, class (identificadores a nivel de
documento)
– title (título del elemento)
– style (información de estilo en línea)
– alt (texto alternativo)
– align, hspace, vspace (presentación visual
de objetos, imágenes y aplicaciones)
10
2 . Applets
Etiqueta applet y object en html

EJEMPLO DESAPROBADO:
<APPLET code=“hola.class" width="500" height="500">
Applet Java que dibuja burbujas animadas.
</APPLET>

Este ejemplo puede reformularse con OBJECT de
esta forma:
<OBJECT codetype="application/java"
classid="java:hola.class" width="500" height="500">
Applet Java que dibuja burbujas animadas.
</OBJECT>
11
2 . Applets
Introducción


Todo applet se implementa creando
una subclase de la clase Applet o
JApplet.
La siguiente figura muestra el árbol de
herencia de la clase Applet.
12
2 . Applets
Ejemplo “hola mundo”
import java.awt.*;
import java.applet.*;
public class Hola extends Applet {
public void paint (Graphics g) {
g.drawString("Hola mundo", 10,15);}}
13
2 . Applets
Ejemplo “hola mundo”

Fijémonos que no tenemos en el applet ningún
método main(). Está todo en la clase base Applet.
<HTML>
<HEAD>Applet de Prueba</HEAD>
<BODY>
<OBJECT CODE="Hola.class" WIDTH=500 HEIGHT=500>
</OBJECT>
</BODY>
</HTML>
14
2 . Applets
Ciclo de vida



El navegador crea una instancia de la clase
principal y le remite un conjunto de mensajes
preestablecidos en respuesta a distintas
situaciones.
Todo applet debe ceñirse a su ciclo de vida.
Cuando se crea la instancia se ejecuta el método
init. El navegador invoca paint cada vez que se
necesita redibujar una área de interacción.
15
2 . Applets
Ciclo de vida
init
start
stop
destroy

init(): Se llama cuando se inicializa por primera vez el applet.

start(): Llamado tras el anterior y cada vez que el navegador visita el
applet.

stop(): Llamado cada vez que se abandona un applet.

paint(): Cada vez que se quiere pintar el área de interacción.

destroy(): Llamado al descargarse el applet de la página.
16
2 . Applets
Ejemplo del ciclo de vida
import java.awt.*;
import java.applet.*;
public class MasApplets extends Applet {
String s;
int inits = 0;
int starts = 0;
int stops = 0;
public void init() { inits++; }
public void start() { starts++; }
public void stop() { stops++; }
public void paint(Graphics g) {
s = "inits: " + inits + ", starts: " + starts +", stops: "
+ stops;
g.drawString(s, 10, 10);
}
}
17
2 . Applets
Ciclo de vida

No todos los applets necesitan sobreescribir todos estos
métodos.

El método init es útil para una inicialización de una vez
que tarde mucho tiempo.


En general, el método init debería contener el código
que normalmente pondríamos en un constuctor. La
razón por la que los applets no deberían tener
constructores es que un applet no tiene garantizado un
entorno completo hasta que se llame a su método init.
Por ejemplo, la carga de imágenes en un applet
simplemente no funciona dentro de un constructor de
applet. Por otro lado, el método init, es una gran lugar
para llamar a los métodos de carga de imágenes ya que
18
los métodos se ejecutan rápidamente.
2 . Applets
Ciclo de vida

Todo applet que haga algo después de la inicialización
(excepto en respuesta a acciones de usuario) debe
sobreescribir el método start.



La mayoría de los applet que sobreescriben start
deberían sobreescribir el método stop. Por ejemplo, un
applet que muestra animaciones debería intentar parar
la animación cuando el usuario no la está mirando.
Muchos applets no necesitan sobreescribir el método
destroy, ya que su método stop (al que se le llama antes
de destroy) hace todo lo necesario para parar la
ejecución del applet.
19
2 . Applets
Restricciones de seguridad



Todo navegador implementa políticas de seguridad
para evitar que los applets comprometan la
seguridad del sistema
Todo navegador tiene un objeto SecurityManager que
implementa sus políticas de seguridad. Cuando un
SecurityManager detecta una violación, lanza una
SecurityException.
Nuestro applet puede capturar dicha excepción y
reaccionar de la forma apropiada.
20
2 . Applets
Restricciones de seguridad



Un applet no puede cargar librerías o
definir métodos nativos.
Normalmente no puede leer o escribir
ficheros en el host en el que se está
ejecutando.
No puede hacer conexiones de red
excepto con el host desde el que vino.
21
2 . Applets
Restricciones de seguridad



No puede arrancar ningún programa en
el host donde se está ejecutando.
No puede leer ciertas propiedades del
sistema.
Las ventanas que muestran los applets
son distintas a las que muestra una
aplicación.
22
2 . Applets
Capacidades de los applets



Normalmente pueden hacer conexiones de
red hacia el host del que vinieron.
Los applets que se ejecutan dentro de un
navegador Web pueden hacer fácilmente que
se muestren documentos HTML.
Los Applets pueden invocar métodos públicos
de otros applets que haya en la misma
página.
23
2 . Applets
Capacidades de los applets


Los Applets que se cargan desde el sistema
local de ficheros (desde un directorio en el
CLASSPATH del usuario) no tienen ninguna
de las restricciones que tienen los applets
cargados a través de la red.
Aunque la mayoría de los applets detienen su
ejecución una vez que hemos abandonado su
página, no tienen porque hacerlo.
24
2 . Applets
Cargar ficheros de datos


Los métodos getCodeBase y
getDocumentBase de Applet obtienen
información del servidor de donde
vienen el applet y la página HTML .
La clase Applet define formas
convenientes de métodos para cargar
imágenes y sonidos que nos permiten
especificar ficheros de imágenes y
sonidos en relación a un URL base.
25
2 . Applets
Cargar ficheros de datos

Para crear un objeto Image usando el
fichero de imagen a.gif bajo el
directorio imgDir, podemos usar el
siguiente código:
Image image = getImage(getCodeBase(),
"imgDir/a.gif");
directorio
imgDir
a.gif
class file
26
2 . Applets
Mostrar cadenas de estado

Los applets muestran líneas de estado
con el método showStatus.
showStatus("MiApplet: Cargando
fichero " + file);
27
2 . Applets
Mostrar documentos en el navegador

Con los métodos showDocument de
AppletContext (se obtiene mediante el
método getAppletContext), un applet
puede decirle al navegador qué URL
mostrar y en qué ventana del
navegador.
public void showDocument(java.net.URL url)
public void showDocument(java.net.URL url, String
targetWindow)
28
2 . Applets
Enviar mensajes a otros 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 y en la misma ventana del navegador.
29
2 . Applets
Encontrar un applet por nombre


El método getApplet (método de
AppletContext, se obtiene mediante
getAppletContext) busca a través de
todos los applets de la página actual para ver
si uno de ellos tiene el nombre especificado.
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. Mediante el atributo
name.
30
2 . Applets
Ejecutar sonidos


La clase Applet y el interface AudioClip
proporcionar un soporte básico para
ejecutar sonidos.
Actualmente, el API sólo soporta un
formato de sonido: ficheros de 8 bit,
µlaw, 8000 Hz, one-channel, Sun ".au".
31
2 . Applets
Métodos para el sonido

getAudioClip(URL)
– Devuelve un objeto que implementa el interface AudioClip.

play(URL)
– Ejecutar el AudioClip correspondiente a la URL especificada.

El interface AudioClip define los siguientes métodos:
– loop

Empieza la ejecución del clip repetidamente.
– play

Ejecuta el sonido una vez.
– stop

Para el clip.
32
2 . Applets
Parámetros



Los parámetros son a los applets lo que los
argumentos de la línea de comandos a las
aplicaciones.
Permiten al usuario personalizar la operación
del applet.
Definiendo parámetros, podemos incrementar
la flexibilidad de nuestro applet, haciendo
que trabaje en múltiples situaciones sin tener
que codificarlo y recompilarlo de nuevo.
33
2 . Applets
Ejemplo
<APPLET CODE=ejemplo.class
HEIGHT=60>
WIDTH=350
<PARAM NAME=mes VALUE=12>
<PARAM NAME=anio VALUE=1989>
</APPLET>
34
2 . Applets
Ejemplo
public class CalendarioMes extends Applet {
public void init() {
String MesSeleccionado = getParameter("Mes");
String AnioSeleccionado = getParameter("Anio");
int ValorMes = Integer.parseInt(MesSeleccionado);
int ValorAnio = Integer.parseInt(AnioSeleccionado);
add(new Label(MesSeleccionado));
add(new Label(AnioSeleccionado));}}
35
2 . Applets
Propiedades del sistema

Los applets pueden leer las siguientes propiedades del
sistema:
–
–
–
–
–
–
"file.separator"Separador de fichero (por ejemplo, "/")
"java.class.version"Número de versión de la clase Java
"java.vendor"Strings Específico del Vendedor de Java
"java.vendor.url"URL del Vendedor de Java
"java.version"Número de Versión de Java
"line.separator"Separador de Líneas"os.arch"Arquitectura del
Sistema Operativo
– "os.name"Nombre del Sistema Operativo
– "path.separator"Separador de Path (por ejmplo, ":")

Para leer una propiedad del sistema desde dentro de un
applet, usamos el método getProperty de la clase System. Por
ejemplo:
String newline = System.getProperty("line.separator");
36