INTRODUCCIÓN A LAS APPLETS A. Introducción
Las applets (miniaplicación) son programas escritos en Java J ava que sirven para "dar vida" a las páginas Web (interacción en tiempo real, inclusión de animaciones, sonidos...), de ahí su potencia. Las applets son programas que se incluyen en las páginas Web. Las applets son ejecutadas en la máquina cliente, con lo que no existen ex isten ralentizaciones por la saturación sat uración del módem o del ancho de banda. Permiten cargar a través de la red una aplicación portable que se ejecuta en el navegador. Para que esto ocurra tan sólo hace falta falt a que el navegador sea capaz de interpretar Java. A las páginas que contienen applets se las denomina páginas Java-Powered . Las applets pueden ser visualizadas con la herramienta appletviewer , incluido en el JDK de Java. Las applets no son exactamente aplicaciones Java, ya que presentan las siguientes diferencias respecto a las aplicaciones normales Java:
Se cargan mediante un navegador, no siendo lanzados por el intérprete Java. Son cargados a través de la red por medio de páginas HTML y no residen en el disco duro de la máquina que los ejecuta. Poseen un ciclo de vida diferente; mientras que una aplicación se lanza una vez, una applet se arranca (inicia) cada vez que el usuario recarga la página en la que se encuentra la applet . Tienen menos derechos que una aplicación clásica, por razones de seguridad. De modo predeterminado en el puesto que los ejecuta no pueden ni leer ni escribir ficheros, ni lanzar programas, ni cargar DLLs. Sólo pueden comunicarse con el servidor Web en que se encuentra la página Web que las contiene.
B. Consideraciones sobre la seguridad en las applets
Como ya se ha dicho las applets tienen una serie ser ie de restricciones de programación que las hacen "seguras". Estas restricciones de seguridad son especialmente importantes, ya que evitarán que se cargue por error una applet que destruya datos de la máquina, que obtenga información restringida, o que produzca otros daños inesperados. Las applets no dejan de ser "ejecutables" que funcionan dentro de una aplicación, como puede ser un visualizador de páginas Web ( browser ). ). Este ejecutable puede obtenerse de una red, lo que significa que hay código posiblemente no fiable que se ejecuta e jecuta dentro de la aplicación. Java tiene muchas salvaguardas de seguridad se guridad que minimizan el riesgo de la ejecución de applets, pero estas salvaguardas también limitan limi tan a los programadores de applets en su capacidad de programación.
El modelo de seguridad para las applets en Java trata una applet como código no fiable ejecutándose dentro de un entorno fiable. Por ejemplo, cuando un usuario instala una copia de un navegador Web en una máquina se está fiando de que su código será funcional en el entorno. Normalmente los usuarios tienen cuidado de qué instalan instala n cuando proviene de una red. Una applet , por el contrario, se carga desde la red sin ninguna comprobación de su fiabilidad. El lenguaje Java y las applets son escritos para que eviten las applets no fiables. Estas salvaguardas son implementadas para verificar verif icar que los códigos de byte de las clases de los applets, no rompen las reglas básicas del lenguaje ni las restricciones de acceso en tiempo de ejecución. Sólo cuando estas restricciones son satisfechas se le permite a la applet ejecutar su código. Cuando se ejecuta, se le marca para señalar que se encuentra dentro del intérprete. Esta marca permite a las clases de tiempo de ejecución determinar cuándo a una fracción del código se le permite invocar a cierto método. Por ejemplo, una applet está restringida en los hosts en los que se puede abrir una conexión de red o en un conjunto de URLs a las que puede acceder. En su conjunto estas restricciones constituyen una política de seguridad. En el futuro, Java tendrá políticas más ricas, incluyendo algunas que usen encriptación y autentificación para permitir a las applets una mayor capacidad. La actual política de seguridad afecta a los recursos que una applet puede usar, cuyos principales puntos son:
Los accesos que pueden realizar las applets a los ficheros son restringidos. En particular escribir en ficheros y/o leerles no será una capacidad estándar que se pueda realizar en los navegadores que soporten applets de Java. Las conexiones de red serán restringidas a conectar solo con el host del que proviene la applet . Una applet no es capaz de usar ningún método que pueda resultar en una ejecución arbitraria, código no revisado o ambos. Esto incluye métodos que ejecuten programas arbitrarios (métodos nativos) así como la carga de bibliotecas dinámicas.
Se anticipa en cualquier caso que en el futuro los modelos de seguridad permitirán a las applets autentificadas superar estas restricciones.
LA CLASE APPLET A. Situación de la clase Applet en la API de Java
La clase Applet Java, de la cual han de heredar todos los programas Java que vayan a actuar como applets, es la única clase que contiene el paquete java.applet de la API de Java. Esta clase hereda de Object (como todas las clases Java), pero además hereda de Component y Container , que son dos clases del paquete gráfico AWT. Esto ya perfila las posibilidades gráficas de este tipo de aplicaciones Java. B. Métodos del ciclo de vida
Como ya se ha indicado una applet no tiene un ciclo de vida tan "sencillo" como el de una aplicación, que simplemente se ejecuta hasta que finaliza su método main(). La siguiente figura modeliza el ciclo de vida de una applet :
Imagen 11: Ciclo de vida de una applet
Cada círculo representa una fase en el ciclo de vida de la applet . Las flechas representan transiciones y el texto representa la acción que causa la transición. Cada fase está marcada con una invocación a un método de la applet :
void init(); Es invocado cuando se carga la applet . Aquí se suelen introducir las iniciaciones que la applet necesite. void start();Es invocado cuando la applet , después de haber sido cargada, ha
sido parada (cambio de página Web, minimización del navegador,...), y de nuevo activada (vuelta a la página, restauración del navegador,...). Se informa a la applet de que tiene que empezar su funcionamiento.
void stop(); Es invocado para informar a la applet de que debe de parar su ejecución. Así una applet que utilice threads, debería detenerlos en el código de
este método.
void destroy();Es invocado para informar a la applet de que su espacio está
siendo solicitado por el sistema, es decir el usuario abandona el navegador. La applet debe de aprovechar este momento para liberar o destruir los recursos que está utilizando. void paint(); Es invocado cada vez que hay que el navegador redibuja la applet .
Al crear una applet no es necesario implementar todos estos métodos. De hecho habrá applets que no los necesiten. Cuando un navegador carga una página Web que contiene una applet , suele mostrar en su parte inferior un mensaje como: initializing... starting...
Esto indica que la applet , se está cargando: 1. Una instancia de la clase applet es creada. 2. La applet es iniciada, mediante su método init(). 3. La applet empieza a ejecutarse, mediante su método start(). Cuando el usuario se encuentra con una página Web, que contiene una applet y salta a otra página, entonces la applet se detiene invocando a su método stop(). Si el usuario retorna a la página donde reside la applet , ésta vuelve a ejecutarse nuevamente invocando a su método start(). Cuando el usuario sale del navegador la applet tiene un tiempo para finalizar su ejecución y hacer una limpieza final, mediante el método destroy(). C. La clase URL
Un URL (Uniform Resource Locator) es una dirección de Internet. Cada recurso (fichero, página Web, imagen...) tiene uno propio. En Java existe una clase denominada URL que modeliza esta clase de objetos. La clase URL pertenece al paquete java.net , y tiene una cierta importancia en el desarrollo de las applets, puesto que muchos de los métodos de la clase Applet la utilizan para acceder a determinado recurso de Internet o para identificarse. Podemos especificar un URL de manera absoluta: URL URLabsoluto = new URL("http://www.host.com/dir/fich.htm");
O bien podemos especificar un URL de manera relativa:
URL URLhost = new URL("http://www.Javasoft.com/"); URL URLrelativo = new URL( URLhost, "dir/fich.htm");
Ambos ejemplos corresponderían al URL "http://www.host.com/dir/fich.htm". D. Inclusión de la applet en una página Web
Para incluir una applet en una página Web, una vez compilada la applet , debe incluirse entre el código HTML de la página Web una etiqueta