jueves, 12 de noviembre de 2015

Servlets

Definición de servlet
El servlet es una clase en el lenguaje de programación Java, utilizada para ampliar las capacidades de un servidor. Aunque los servlets pueden responder a cualquier tipo de solicitudes, éstos son utilizados comúnmente para extender las aplicaciones alojadas por servidores web, de tal manera que pueden ser vistos como applets de Java que se ejecutan en servidores en vez de navegadores web. Este tipo de servlets son la contraparte Java de otras tecnologías de contenido dinámico Web, como PHP y ASP.NET.

La palabra servlet deriva de otra anterior, applet, que se refiere a pequeños programas que se ejecutan en el contexto de un navegador web. El uso más común de los servlets es generar páginas web de forma dinámica a partir de los parámetros de la petición que envíe el navegador web.

Historia
La especificación original de Servlets fue creada por Sun Microsystems (la versión 1.0 fue terminada en junio de 1997). Comenzando con la versión 2.3, la especificación de Servlet fue desarrollada siguiendo el Proceso de la Comunidad Java (Java Community Process).

Ciclo de vida
1. Inicializar el servlet
Cuando un servidor carga un servlet, ejecuta el método init del servlet. El proceso de inicialización debe completarse antes de poder manejar peticiones de los clientes, y antes de que el servlet sea destruido.

Aunque muchos servlets se ejecutan en servidores multi-thread, los servlets no tienen problemas de concurrencia durante su inicialización. El servidor llama sólo una vez al método init al crear la instancia del servlet, y no lo llamará de nuevo a menos que vuelva a recargar el servlet. El servidor no puede recargar un servlet sin primero haber destruido el servlet llamando al método destroy.

2. Interactuar con los clientes
Después de la inicialización, el servlet puede dar servicio a las peticiones de los clientes. Estas peticiones serán atendidas por la misma instancia del servlet, por lo que hay que tener cuidado al acceder a variables compartidas, ya que podrían darse problemas de sincronización entre requerimientos simultáneos.

3. Destruir el servlet
Los servlets se ejecutan hasta que el servidor los destruye, por cierre del servidor o bien a petición del administrador del sistema. Cuando un servidor destruye un servlet, ejecuta el método destroy del propio servlet. Este método sólo se ejecuta una vez y puede ser llamado cuando aún queden respuestas en proceso, por lo que hay que tener la atención de esperarlas. El servidor no ejecutará de nuevo el servlet hasta haberlo cargado e inicializado de nuevo.

Clases y objetos necesarios
Podemos crear un Servlet haciendo uso del paquete javax.servlet.

Interface HttpServletRequest
Sigue este enlace para ver su definición detallada (en inglés): http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/http/HttpServletRequest.html

Interface HttpServletResponse
Sigue este enlace para ver su especificación detallada (en inglés): http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/http/HttpServletResponse.html

Beneficios de utilizar Servlets en lugar de CGI
Son más eficientes y utilizan menos recursos. CGI utiliza un nuevo proceso por cada petición. En cambio en los Servlets sólo existe una copia cargada en la máquina virtual y por cada petición se inicia un hilo, lo cual reduce el uso de memoria del servidor y el tiempo de respuesta.
Tienen persistencia, por lo que siguen "vivos" una vez terminada la petición.

Ejemplo
Código de ejemplo de un Servlet que procesa una petición GET y devuelve una página web HTML sencilla:

package org.pruebas;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HolaMundoServlet extends HttpServlet {

    /**
     * Servlet de ejemplo que procesa una petición GET
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException 
     */
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">");
        out.println("<html>");
        out.println("<head><title>Ejemplo Hola Mundo</title></head>");
        out.println("<body>");
        out.println("<h1>¡Hola Mundo!</h1>");
        out.println("</body></html>");
    }
}

miércoles, 11 de noviembre de 2015

Inserccion de Applets en una pagina HTML

 Inserción de Applets Java.


De ahora en adelante consideraremos que ya tenemos un applet, bien porque lo hemos programado nosotros mismos, bien porque estamos usando un applet de distribución gratuita, es hora de aprender a insertarlo en nuestra página Web. Para ello usaremos una nueva etiqueta: APPLET. Esta etiqueta está formada por una instrucción de inicio, <APPLET>, y una instrucción de fin, </APPLET>.

Atención.
La etiqueta APPLET fue introducida por Netscape en la versión 2.0 de Navigator fruto de un acuerdo con Sun para soportar la tecnología Java. Todos sus navegadores posteriores también la soportan. El otro gran navegador, Microsoft Internet Explorer, soporta la tecnología Java desde la versión 3.0. En cuanto al estándar se refiere, esta etiqueta se incluye en la especificación HTML 3.2, aunque no podemos asegurar que los navegadores posteriores que respetan la norma HTML 3.2 soporten la tecnología Java, simplemente entienden la etiqueta, pero no son capaces de ejecutar un applet.

La inserción de un applet en una página es similar a la inserción de una imagen, a lo cual ya estamos muy acostumbrados. Deberemos especificar el archivo donde se encuentra el applet y las dimensiones (anchura y altura) que este debe ocupar en la página. Al igual que ocurría con las imágenes el applet se introducirá en el lugar exacto donde indique su código, si es necesario se insertará entre el texto, pero no pasará a una nueva línea, como sucedía con las marquesinas, si no lo indicamos específicamente (con la etiqueta <BR>). Para indicar el archivo en el que se encuentra el applet usaremos el atributo CODE y para especificar la anchura y altura en pixeles usaremos WIDTH y HEIGHT respectivamente. En resumen, para insertar un applet debemos usar el siguiente código en cualquier lugar de la página:


<APPLET CODE="nombre_applet.class" WIDTH="ancho" HEIGHT="alto">
</APPLET>

Los tres atributos que hemos usado deben incluirse obligatoriamente siempre que insertemos un applet. Esto parece obvio con el atributo CODE, ya que no se podría insertar el applet sin indicar donde está, pero resulta más extraño con los atributos WIDTH y HEIGHT. Aun así, si no especificamos el tamaño que debe ocupar el applet en la página no será mostrado ni ejecutado por el navegador. Debemos estar muy atentos a este detalle ya que hasta ahora estos dos atributos eran totalmente optativos y por ello es un error común olvidarlos y no ser capaz de descubrir porqué no funciona el applet.

Y aquí vemos como insertar un applet de ejemplo:


<HTML>
<HEAD>
<TITLE>Applet sonoro</TITLE>
</HEAD>
<BODY>
<APPLET CODE="SoundExample.class" WIDTH=450 HEIGHT=50></APPLET>
</BODY>
</HTML>

Los applets Java tienen la terminación .class, como ya hemos comentado antes, esto exige que para poder usar un applet debemos utilizar un sistema operativo que soporte nombres largos. Desgraciadamente los usuarios de Windows 3.1 no podrán probar esta tecnología localmente en su ordenador. Afortunadamente esto no significa que no puedan disfrutar los applets que estén publicados en el WWW.

Pasemos a explicar que ocurre cuando el navegador se encuentra con el código anterior. En primer lugar busca el archivo SoundExample.class en la misma dirección URL y en el mismo directorio donde se encuentre la página actual y lo baja a nuestro ordenador (este es un ejemplo en el que ambos archivos ya están en nuestro ordenador, con lo que este paso no sería necesario). Mientras reserva un rectángulo, con las dimensiones especificadas por los atributos WIDTH y HEIGHT, donde será mostrado el applet. Una vez ha llegado el archivo anterior el navegador llama a lo que se conoce como máquina virtual Java (también llamada JVM, Java Virtual Machine) que pasará a ejecutar el applet. A partir de ese momento el applet se ejecutará como cualquier otro programa de nuestro ordenador, aunque lo hará en el interior de la página Web. De esta forma cuando nuestro cursos este dentro del rectángulo de 450x50 creado el control pasará al applet y si pulsamos los botones el propio applet será el encargado de realizar las acciones oportunas. La Máquina Virtual Java implementa además ciertas medidas de seguridad para que el applet no pueda, por ejemplo, borrar nuestro disco duro. Una vez conocemos el funcionamiento de los applets podemos adentrarnos más a fondo en las diferentes características de estos que pueden ser modificadas con el lenguaje HTML.