Java Servlet
¿Qué es un Servlet de Java?
Es una tecnología que nos permite crear aplicaciones web interactivas
(dinámicas), es decir, le permite al usuario interactuar con la
aplicación (hacer consultas, insertar y eliminar datos, …)
Un Servlet es un objeto java que pertenece a una clase que extiende de javax.servlet.http.HttpServlet
Son pequeños programas escritos en Java que admiten peticiones a través
del protocolo HTTP. Los servlets reciben peticiones desde un navegador
web, las procesan y devuelven una respuesta al navegador, normalmente en
HTML. Para realizar estas tareas podrán utilizar las clases incluidas
en el lenguaje Java. Estos programas son los intermediarios entre el
cliente (casi siempre navegador web) y los datos (BBDD)
Un contenedor de Servlet es un programa capaz de recibir peticiones de páginas web y redireccionar estas peticiones a un objeto Servlet.
Ejemplo: Apache Tomcat
¿Cómo funciona un contenedor de Servlets?
1. El navegador (cliente) pide una página al servidor HTTP que es un contenedor de Servlets.
2. El servlet procesa los argumentos de la petición, es decir, el contenedor de Servlets delega la petición a un Servlet en particular elegido de entre los Servlets que contiene.
3. El Servlet, que es una objeto java, se encarga de generar el texto de la página web que se entrega al contenedor.
4. El contenedor devuelve la página web al navegador (cliente) que la solicitó, normalmente en HTML.
Por lo tanto nos encontramos en una arquitectura Cliente-Servidor. Lo normal para esto es utilizar Apache Tomcat como contenedor de servlets. Recordar que apache es un servidor HTTP.
CGI(Common Gateway Interface)
Interfaz de entrada común (en inglés Common Gateway Interface, abreviado CGI) es una importante tecnología de la World Wide Web que permite a un cliente (navegador web) solicitar datos de un programa ejecutado en un servidor web. CGI especifica un estándar para transferir datos entre el cliente y el programa. Es un mecanismo de comunicación entre el servidor web y una aplicación externa cuyo resultado final de la ejecución son objetos MIME. Las aplicaciones que se ejecutan en el servidor reciben el nombre de CGIs.
Las aplicaciones CGI fueron una de las primeras prácticas de crear contenido dinámico para las páginas web. En una aplicación CGI, el servidor web pasa las solicitudes del cliente a un programa externo. Este programa puede estar escrito en cualquier lenguaje que soporte el servidor, aunque por razones de portabilidad se suelen usar lenguajes de script. La salida de dicho programa es enviada al cliente en lugar del archivo estático tradicional.
CGI ha hecho posible la implementación de funciones nuevas y variadas en las páginas web, de tal manera que esta interfaz rápidamente se volvió un estándar, siendo implementada en todo tipo de servidores web.
DIFERENCIAS ESTRE LAS TECNOLOGIAS CGI Y SERVLET
La tecnología Servlet proporciona las mismas ventajas del lenguaje Java en cuanto a portabilidad (“write once, run anywhere”) y seguridad, ya que un Servlet es una clase de Java igual que cualquier otra, y por tanto tiene en ese sentido todas las características del lenguaje, Esto es algo de lo que carecen los programas CGI, ya que hay que compilarlos para el sistema operativo del servidor y no disponen en muchos casos de técnicas de comprobación dinámica de errores en tiempo de ejecución.Otra de las principales ventajas de los Servlets con respecto a los programas CGI, es la del rendimiento y esto a pesar de que java no es un lenguaje particularmente rápido, Mientras que es necesario cargar los programas CGI tantas veces como peticiones del servicio existan por parte de los clientes, los Servlets, una vez que son llamados por primera vez, quedan activos en la memoria del servidor hasta que el programa que controla el servidor los desactiva. De esta manera se minimiza en gran medida el tiempo de respuesta.
Además, los Servlets se benefician de la gran capacidad de Java para ejecutar métodos en ordenadores remotos, para conectar bases de datos, para la seguridad de la información, ect. Se podría decir que las clases estándar de Java ofrecen resueltos muchos problemas que con otros lenguajes tiene que resolver el programador.
CARACTERISTICAS:
- Manejo de Sesiones: Se puede hacer seguimiento de usuarios a través de distintos servlets a través de la creación de sesiones.
- Utilización de Cookies: Las cookies son pequeños datos en texto plano que pueden ser guardados en el cliente. La API de servlets permite un manejo fácil y limpio de ellas.
- Multi-thread: Los servlets soportan el acceso concurrente de los clientes, aunque hay que tener especial cuidado con las variables compartidas a menos que se utilize la interfaz SingleThreadModel.
- Programación en Java: Se obtienen las características de multiplataforma o acceso a APIs como JDBC, RMI, etc.
CICLO DE VIDA DE SERVLET:
- 1. Inicializar el servlet
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
- 3. Destruir el servlet
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.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>");
}
}
No hay comentarios:
Publicar un comentario