Jueves, 28/03/2024, 06:56:37
Universidad de Londres - Informática
 
Menú del sitio

Asignaturas

Recursos

Visitas

Estadística

Total en línea: 1
Invitados: 1
Usuarios: 0

Inicio » 2011 » Octubre » 14 » JAVA SERVLET's
20:58:33
JAVA SERVLET's


- Que es SERVLET??

Un servlet es un programa que se ejecuta en un servidor.
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.
Un servlet es un objeto que se ejecuta en un servidor o contenedor JEE, especialmente diseñado para ofrecer contenido dinámico desde un servidor web, generalmente HTML.

Un servlet implementa la interfaz javax.servlet.Servlet o hereda alguna de las clases más convenientes para un protocolo específico.
Al implementar esta interfaz el servlet es capaz de interpretar los objetos de tipo HttpServletRequest y HttpServletResponse quienes contienen la información de la página que invocó al servlet.
Entre el servidor de aplicaciones (o web content) y el servlet existe un contrato que determina cómo han de interactuar. La especificación de éste se encuentra en los JSR (Java Specification Requests) del JCP (Java Community Process).

- Que es un contenedor de SERVLET??

Contenedor Web, también denominado contenedor Servlet/JSP, maneja la ejecución de los servlets y páginas JSP. Estos componentes se ejecutan sobre un servidor Enterprise Edition.
En pocas palabras, es el sitio donde resinden los servlet's para que sean llamados por el usuario.

- Cual es el ciclo de vida de un SERVLET??

El ciclo de vida de un Servlet se divide en los siguientes puntos:
- 1) El cliente solicita una petición a un servidor vía URL.

- 2) El servidor recibe la petición.
- 1) Si es la primera, se utiliza el motor de Servlets para cargarlo y se llama al método init().
- 2) Si ya está iniciado, cualquier petición se convierte en un nuevo hilo. Un Servlet puede manejar múltiples peticiones de clientes.

- 3) Se llama al método service() para procesar la petición devolviendo el resultado al cliente.

- 4) Cuando se apaga el motor de un Servlet se llama al método destroy(), que lo destruye y libera los recursos abiertos.

- Despliegue de un SERVLET

Para desplegar un servlet, normalmente se requiere la configuración de un servidor de aplicaciones. Cuando el servidor encuentra un tipo particular de solicitud, invoca al servlet, pasándole los detalles sobre la solicitud y un objeto response para devolver el resultado.

Todos lo servlets implementan el interface javax.servlet.Servlet directamente (en el caso de los servelts genéricos) o indirectamente (en el caso de los servlets HTTP o JSP).
El interface javax.servlet.Servlet incluye los siguientes métodos importantes:

* init():
Define cualquier código de inicialización que debería ejecutarse cuando se carga el servlet en memoria.

* service():
El método principal, llamado cuando el servlet recibe una solicitud de servicio. Define un paquete de lógica de procesamiento proporcionado por el servlet.

* destroy():
Define cualquier código de limpieza requerido antes de eliminar el servlet de la memoria.

Cuando el contenedor servlet carga por primera vez un servlet invoca al método init() del servlet para inicializarlo. Luego según se hacen solicitudes para ejecutar el servlet, el contenedor servlet llama repetidamente la método service() del servlet. Finalmente, cuando el contenedor servlet no necesita el servlet, llama al método destroy() del servlet y lo descarga de la memoria. Observa que durante el tiempo de vida de un servlet, los métodos init() y destroy() sólo son invocados una vez, mientras que el método service() será invocado muchas veces (una cada vez que se haga una solicitud para ejecutar el servlet).

Servlets HTTP

Los servlets HTTP extienden la clase javax.servlet.http.HttpServlet. Esta clase extiende la clase javax.servlet.GenericServlet, que a su vez implementa javax.servlet.Servlet. La clase HttpServlet sobreescribe el método service() de forma que puede manejar diferentes tipos de solicitudes HTTP: DELETE, GET, OPTIONS, POST, PUT, y TRACE. Por cada uno de estos tipos de solicitud, la clase HttpServlet proporciona su correspondiente método doXXX().

Aunque podemos sobreescribir el método service() en nuestra clase servlet, frecuentemente querremos sobreescribir métodos doXXX() individuales. Si sobreescribimos el método service(), debemos tener cuidado de que los métodos doXXX() por defecto, sólo sean llamados si llamamos a super.service o los invocamos directamente.

- Ejemplo de SERVLET

Este es el ejemplo de un servlet llamado HolaMundo.java cuyo código fuente es el siguiente:

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class HolaMundo extends HttpServlet
{
public void init(ServletConfig conf)
throws ServletException
{
super.init(conf);
}

public void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
res.setContentType("text/html");
PrintWriter out = res.getWriter();

out.println("<html>");
out.println("<body>");
out.println("<h1>Hola Mundo</h1>");
out.println("</body>");
out.println("</html>");
}
}

Lo primero que nos aparece son las clases que utiliza (las bibliotecas):

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

Vemos que utiliza las clases correspondientes a servlets (javax.servlet.*), las clases correspondientes a servlets que utilizan el protocolo HTTP (javax.servlet.http.*). El protocolo HTTP es el protocolo estándar en la web (o WWW - World Wide Web). Por eso, cuando en un navegador abrimos una dirección, la mayoría empieza por http://. También utiliza clases de entrada/salida (java.io.* - io viene input/output) para poder escribir en pantalla.

Lo segundo que vemos es el nombre de la clase (class HolaMundo) que es pública (public), en el sentido de que cualquiera puede usarla sin ningún tipo de restricción) y que hereda (extends) de la clase HttpServlet.

public class HolaMundo extends HttpServlet {

Algo que debemos saber es que toda clase, para que se considere un servlet, debe implementar el interfaz javax.servlet.Servlet. Para conseguirlo lo más sencillo es hacer que nuestra clase herede o bien de la clase javax.servletGenericServlet o javax.servlet.http.HttpServlet. Con la primera obtendremos un servlet independiente del protocolo, mientras que con la segunda tendremos un servlet HTTP, sólo cambiará el nombre de la clase para cada servlet que hagamos.

El siguiente segmento de código que aparece (y que tenemos que implementar siempre) es la redefinición del método init. El servidor invoca a este método cuando se crea el servlet y en este método podemos hacer todas las operaciones de inicialización que queramos. Como en este servlet no nos hace falta inicialización ninguna, lo único que hacemos es llamar al método init por defecto:

public void init(ServletConfig conf)
throws ServletException {
super.init(conf);
}

Podemos observar que el método init es público, no devuelve ningún tipo (void), que puede lanzar una excepción (ServletException) y que tiene un parámetro (ServletConfig conf). De estos dos últimos aspectos (excepción y parámetro) no nos tenemos que preocupar pues es el servidor quien ejecuta el método init.

Lo siguiente que hacemos redefinir el método service, cuando el servidor web recibe una petición para un servlet llama al método public void service(HttpServletRequest req, HttpServletResponse res) con dos parámetros: el primero, de la clase HttpServletRequest, representa la petición del cliente y el segundo, de la clase HttpServletResponse, representa la respuesta del servidor (del servlet, más concretamente).

public void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/html");
PrintWriter out = res.getWriter();

out.println("<html>");
out.println("<body>");
out.println("<h1>Hola Mundo</h1>");
out.println("</body>");
out.println("</html>");
}

Como en este ejemplo no necesitamos ninguna información del cliente, no usaremos el parámetro HttpServletRequest, de la clase HttpServletResponse usamos dos métodos:

setContextType(String str) para establecer el tipo de respuesta que vamos a dar. Para indicar que se trata de una página web, como haremos siempre, usamos el tipo "text/html".

res.setContentType("text/html");

PrinterWriter getWriter(void) con el que obtendremos una clase PrinterWriter en donde iremos escribiendo los datos que queremos que el cliente reciba:

PrintWriter out = res.getWriter();

Una vez que hemos establecido el tipo de respuesta (text/html)y tenemos el flujo de salida (variable out) sólo nos queda utilizar el método println de la clase PrinterWriter para ir escribiendo en dicho flujo de salida la página HTML que queremos que visualice el cliente.

- SERVLET CONTAINER y SERVLET API

El Servlet Container (Servlet Engine), es el que junto con el servidor web, proporciona la interfaz HTTP a los usuarios de dicho servlet.
Cuando el Servlet Container recibe una solicitud, decide que servlet llamar dependiendo de la configuracion del archivo que envia la solicitud, llama el metodo service() del servlet y pasa a las instancias de ServletRequest y ServletResponse, dependiendo del metodo (GET o POST), llama los servicios doGet() o doPost().
El Servlet Container es responsable de la carga e inicializacion de los servlet's y de llamar al init().
Un ejemplo de Servlet Container es TOMCAT.

- SERVLET API

Una interfaz de programación de aplicaciones o API (del inglés Application Programming Interface) es el conjunto de funciones y procedimientos (o métodos, en la programación orientada a objetos) que ofrece cierta biblioteca para ser utilizado por otro software como una capa de abstracción.
La API de un SERVLET contiene las clases y rutinas que necesita el servlet para poder comunicarse con el Servlet Container o sitio web en el cual esta alojado el servlet, dentro de java existen dos "paquetes" con las API, uno es para servlet's normales y otra, para servlet's HTTP que son:

javax.servlet (para servlet normal)
javax.servlet.http (para servlet HTTP)

Una de sus caracteristicas que les dan ventaja en relacion a su "potencia" es que pueden compartir datos entre ellos, esta debido a que poseen una estructura API estandar para todos lo cual reduce los tiempos de proceso, ademas de que cuentan con una infraestructura HTTP muy amplia para gestionar formularios y otras operaciones de alto nivel.

Las fuentes usadas para este resumen son las siguientes, los ejemplos tambien estan alli:

http://flanagan.ugr.es/docencia/2005-2006/2/servlets/servlet.html
http://es.wikipedia.org/wiki/Java_Servlet
http://www.proactiva-calidad.com/java/arquitectura/index.html
http://www.webtaller.com/maletin/articulos/desplegar-servlets-aplicaciones-web-tomcat-weblogic-server.php
http://www.adp-gmbh.ch/java/servlets/container.html

Sanchez Duran Fernando
Camacho de la Rosa Carlos
Categoría: Blog de resùmenes - Sistemas multiplataforma | Visiones: 957 | Ha añadido: Carlos | Ranking: 0.0/0
Total de comentarios: 6
6 Alejandro  
0
buen aporte los ejemplos muy bien y lainformacion muy completa cool

5 omar  
0
woow..mucha informacion aunque bien explicada y como dice la mayra con un ejemplo practico quedaria mas claro..
Buen articulo biggrin

4 mayrita  
0
Muy interesante este tema al verlo vi mucha informacion y pensé que me iba a dar flojera, pero esta muy bien estructurado y explica muy bien los puntos, lo que faltaría seria llevarlo a la practica en clase con algún ejemplo mas claro.

3 noealejandro  
0
Muy bien Camacho y Fernando... empezamos ahora a comentar en el foro, ahí ya abrí un hilo.

Saludos.

2 alets  
0
que organizas crocker si el primero en postear tema es alejandro que no viste la lista de los equipos...TUS MAMADAS... ahora vas a hacer un relajo el lunes

1 issac22  
0


ñañañañañañañañañaña
ñañañañañañañañañañaña
ñañañañañañañañañañaña......ñaaaaaa

Solamente los usuarios registrados pueden añadir los comentarios.
[ Registrarse | Entrada ]
Buscar

Foro PE
  • Clase en línea - miércoles 9 (4)
  • Tarea 2 (6)
  • ¿Qué es obo? (2)

  • Foro DSM
  • TEMAS A DESARROLLAR POR EQUIPO (13)
  • Servicios Web XML o Web Services (1)
  • RMI (Java Remote Method Invocation) (0)

  • Compartir en

    Mini-chat
    200

    Copyright MyCorp © 2024Crear un sitio web gratis con uCoz