370 likes | 617 Views
TEMA 6. Applets y servlets. Introducción Applets Servlets. Bibliografía. Bobadilla, J. y otros. Comunicaciones y Bases de Datos en Java. Capítulos 1 y 6. 1 . Introducción. Conceptos. Applet aplicación Java diseñada específicamente para ser ejecutada en el contexto de un navegador web.
E N D
TEMA 6.Applets y servlets Introducción Applets Servlets
Bibliografía Bobadilla, J. y otros. Comunicaciones y Bases de Datos en Java. Capítulos 1 y 6.
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.
1 . Introducción Esquema Servidor Navegador SERVLET APPLET
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>
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 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.
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".
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).
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)
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>
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.
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);}}
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>
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.
start stop init destroy 2 . Applets Ciclo de vida • 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.
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); } }
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 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.
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.
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.
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.
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.
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.
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.
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 class file imgDir a.gif
2 . Applets Mostrar cadenas de estado • Los applets muestran líneas de estado con el método showStatus. showStatus("MiApplet: Cargando fichero " + file);
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)
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.
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.
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".
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.
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.
2 . Applets Ejemplo <APPLET CODE=ejemplo.class WIDTH=350 HEIGHT=60> <PARAM NAME=mes VALUE=12> <PARAM NAME=anio VALUE=1989> </APPLET>
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));}}
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");