JAVA SERVLET
Cliente/Servidor
Por su versatilidad y potencialidad la mayoría de usuarios utilizan en sus comunicaciones con los servidores de datos, los navegadores.
Cada uno de los navegadores proporciona soluciones adicionales a problemas más especpíficos, por tal motivo hay que tomar en cuenta que navegador se va a comunicar con un servidor, ya que el resultado puede ser distinto de acuerdo al navegador empleado, lo cual puede dar lugar a errores.
El navegador que utilicemos debe soportar Java, lo cual implica que debe disponer de una JAVA VIRTUAL MACHINE en la que se ejecutan los ficheros *.class de las Apletts que traen a travéz de internet. Los navegadores que emplean la Java Virtual Machine pueden sustituirla por un mecanismo definido por Sun. Este mecanismo se llama Java plug-in, estos son aplicaciones que se ejecutan controladas por los navegadores y que permiten extender sus capacidades.
CGI(Common Gateway Interface)
CGI(Common Gateway Interface)
Es una importante tecnologia de la World Wide Web que permite a un cliente solicitar datos de un programa ejecutando un servidor web. CGI especifica un estandar 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 son conocidas como CG'S.
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.
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.
Los Servlets son módulos escritos en Java que se utilizan en un servidor, que puede ser o no ser servidor web, para extender sus capacidades de respuesta a los clientes al utilizar las potencialidades de Java. Los Servlets son para los servidores lo que los applets para los navegadores, aunque los servlets no tienen una interfaz gráfica.
Los servelts pueden ser incluidos en servidores que soporten la API de Servlet (ver servidores). La API no realiza suposiciones sobre el entorno que se utiliza, como tipo de servidor o plataforma, ni del protocolo a utilizar, aunque existe una API especial para HTTP.
Los Servlets son un reemplazo efectivo para los CGI en los servidores que los soporten ya que proporcionan una forma de generar documentos dinámicos utilizando las ventajas de la programación en Java como conexión a alguna base de datos, manejo de peticiones concurrentes, programación distribuida, etc. Por ejemplo, un servlet podría ser responsable de procesar los datos desde un formulario en HTML como registrar la transacción, actualizar una base de datos, contactar algún sistema remoto y retornar un documento dinámico o redirigir a otro servlet u alguna otra cosa.
Servlet dispone las mismas ventajas del lenguaje Java en cuanto a:
- Portabilidad (“write once, run anywhere”) y seguridad.
- Rendimiento (A pesar de que java no es un lenguaje particularmente rápido).
- Quedan activos en la memoria del servidor hasta que el progrmra que controla el servidor los desactiva (minimizando el tiempo de respuesta)
- Se benefician de la gran capacidad de Java para ejecutar métodos en ordenadores remotos:
- Para conectar con bases de datos.
- Para la seguridad en la información.
Un servlet es una clase de Java igual que cualquier
otra, tiene 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 de 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 con bases de datos, para la seguridad en la información, etc.
1. Son independientes del servidor utilizado y de su sistema operativo, lo que quiere decir que a pesar
de estar escritos en Java, el servidor puede estar escrito en cualquier lenguaje de programación,
obteniéndose exactamente el mismo resultado que si lo estuviera en Java.
2. Los servlets pueden llamar a otros servlets, e incluso a métodos concretos de otros servlets.
3. Los servlets pueden obtener fácilmente información acerca del cliente (la permitida por el
protocolo HTTP), tal como su dirección IP, el puerto que se utiliza en la llamada, el método
utilizado (GET, POST, ...), etc.
4. Permiten además la utilización de cookies y sesiones, de forma que se puede guardar información
específica acerca de un usuario determinado, personalizando de esta forma la interacción cliente-servidor.
Una clara aplicación es mantener la sesión con un cliente.
5. Los servlets pueden actuar como enlace entre el cliente y una o varias bases de datos en
arquitecturas cliente-servidor de 3 capas (si la base de datos está en un servidor distinto).
6. Asimismo, pueden realizar tareas de proxy para un applet. Debido a las restricciones de
seguridad, un applet no puede acceder directamente por ejemplo a un servidor de datos localizado
en cualquier máquina remota, pero el servlet sí puede hacerlo de su parte.
7. Al igual que los programas CGI, los servlets permiten la generación dinámica de código HTML
dentro de una propia página HTML. Así, pueden emplearse servlets para la creación de
contadores, banners, etc.
- 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.
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.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>"); } }
Como se escribe código html en un servlet?
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ParamServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
// Obtenemos un objeto Print Writer para enviar respuesta
res.setContentType("text/html");
PrintWriter pw = res.getWriter();
pw.println("<HTML><HEAD><TITLE>Leyendo parámetros</TITLE></HEAD>");
pw.println("<BODY BGCOLOR=\"#CCBBAA\">");
pw.println("<H2>Leyendo parámetros desde un formulario html</H2><P>");
pw.println("<UL>\n");
pw.println("Te llamas " + req.getParameter("NOM") + "<BR>");
pw.println("y tienes " + req.getParameter("EDA") + " años<BR>");
pw.println("</BODY></HTML>");
pw.close();
}
}
No hay comentarios:
Publicar un comentario