Вы находитесь на странице: 1из 12

1

INGENIERIA WEB 2013-II

INTRODUCCION A LOS SERVLETS Los primeros servidores HTTP no incluan ningn mecanismo para generar respuestas dinmicamente, por lo tanto se desarrollaron interfaces para comunicar el servidor con programas externos que implementan dicha funcionalidad. La especificacin CGI (Common Gateway Interface) describe una interfaz estndar que sirve para que un servidor Web enve solicitudes del navegador al programaCGI, y para que el programa CGI devuelva datos de respuesta al navegador a travs del servidor Web. Un programa CGI puede ser escrito en cualquier lenguaje de programacin que produzca un fichero ejecutable. Entre los lenguajes ms habituales se encuentran: C, C++, Perl, Java, Visual Basic No obstante, debido a que el CGI recibe los parmetros en forma de texto ser til un lenguaje que permita realizar manipulaciones de las cadenas de caracteres de una forma sencilla, como por ejemplo Perl. Perl es un lenguaje interpretado que permite manipulaciones sencillas de ficheros y textos, as como la extraccin y manipulacin de cadenas de caracteres, unidas a unas bsquedas rpidas y fciles.

Un servlet es un objeto que se ejecuta en un servidor o contenedor JEE, fue especialmente diseado para ofrecer contenido dinmico desde un servidor web, generalmente es HTML. Otras opciones que permiten generar contenido dinmico son con los lenguajes ASP, PHP, JSP (un caso especial de servlet) y Python.

Los servlets forman parte de JEE (Java Enterprise Edition), que es una ampliacin de JSE (Java Standard Edition). Un servlet es un objeto Java que implementa la interfaz javax.servlet.Servlet o hereda alguna de las clases ms convenientes para un protocolo especfico (ej: javax.servlet.HttpServlet). Al implementar esta interfaz el servlet es capaz de interpretar los objetos de tipo HttpServletRequest y HttpServletResponse quienes contienen la informacin de la pgina que invoc al servlet. Entre el servidor de aplicaciones (o web content) y el servlet existe un contrato que determina cmo han de interactuar. La especificacin de ste se encuentra en los JSR (Java Specification Requests) del JCP (Java Community Process). CGI: Common Gateway Interface, una tecnologa que se usa en los servidores web. Ing. Jos Fernndez Murrugarra

INGENIERIA WEB 2013-II

Las tareas encomendadas a un Servlet son las siguientes: Leer los datos enviados por un usuario

Usualmente de formularios en pginas Web Pueden venir de applets de Java o programas cliente HTTP. Detalles de las capacidades del navegador, cookies, nombre del host del cliente, etc.

Buscar cualquier otra informacin sobre la peticin que venga incluida en esta

Generar los resultados

Puede requerir consults a Base de Datos, invocar a otras aplicaciones, computar directamente la respuesta, etc.

Dar formato a los resultados en un documento


Incluir la informacin en una pgina HTML Decirle al navegador el tipo de documento que se va a devolver, establecer las cookies, etc.

Establecer los parmetros de la respuesta HTTP

Enviar el documento al cliente

Los servlets ofrecen la misma funcionalidad que los CGI pero evitan ciertos problemas que tenan stos ltimos. Entre las ventajas que ofrecen los servlets cabe destacar: Eficiencia

CGI corto: el proceso de arranque de cada proceso puede dominar el tiempo de ejecucin N peticiones simultneas: el cdigo del CGI se carga en memoria N veces Al terminar el proceso, el CGI se cierra: difcil persistencia de datos (conexiones a BD, cach)

Ing. Jos Fernndez Murrugarra

INGENIERIA WEB 2013-II

Conveniencia

Los Servlets tienen una infraestructura muy amplia para la tratar automticamente datos de formularios HTML, gestionar sesiones y otras utilidades de alto nivel.

Potencia

Los Servlets pueden comunicar directamente con el navegador Web Pueden mantener datos entre peticiones, simplificando el seguimiento de sesiones y operaciones de cach Varios Servlets pueden compartir datos

Portabilidad

Los Servlets estn escritos en Java y siguen una API estndar. Pueden funcionar sin ningn cambio en diferentes servidores

Seguridad

CGI adolecen de vulnerabilidades porque:


Se ejecutan en el shell del SO Pueden sufrir overflows por el lenguaje (C, C++, )

Los Servlets no sufren estos problemas

Economa

Aadir soporte para Servlet a un servidor Web ya disponible tiene muy poco coste extra Existen ciertos servidores web y servidores de servlet gratuitos para trficos pequeos

Ing. Jos Fernndez Murrugarra

INGENIERIA WEB 2013-II

Arquitectura del Paquete Servlet El paquete javax.servlet proporciona clases e interfaces para escribir servlets. La arquitectura de este paquete se describe a continuacin. El Interface Servlet La abstracin central en el API Servlet es el interface Servlet. Todos los servlets implementan este interface, bien directamente o, ms comunmente, extendiendo una clase que lo implemente comoHttpServlet

El interface Servlet declara, pero no implementa, mtodos que manejan el Servlet y su comunicacin con los clientes. Los escritores de Servlets proporcionan algunos de esos mtodos cuando desarrollan un servlet. Interacin con el Cliente Cuando un servlet acepta una llamada de un cliente, recibe dos objetos. Un ServletRequest, que encapsula la comunicacin desde el cliente al servidor. Un ServletResponse, que encapsula la comunicacin de vuelta desde el servlet hacia el cliente. ServletRequest y ServletResponse son interfaces definidos en el paquete javax.servlet. El Interface ServletRequest El Interface ServletRequest permite al servlet aceder a : Informacin como los nombres de los parmetros pasados por el cliente, el protocolo (esquema) que est siendo utilizado por el cliente, y los nombres del host remote que ha realizado la peticin y la del server que la ha recibido. El stream de entrada, ServletInputStream. Los Servlets utilizan este stream para obtener los datos desde los clientes que utilizan protocolos como los mtodos POST y PUT del HTTP. Los interfaces que extienden el interface ServletRequest permiten al servlet recibir ms datos especficos del protocolo. Por ejemplo, el interface HttpServletRequest contiene mtodos para acceder a informacin de cabecera especfica HTTP. El Interface ServletResponse El Interface ServletResponse le da al servlet los mtodos para responder al cliente. Permite al servlet seleccionar la longitud del contenido y el tipo MIME de la respuesta. Proporciona un stream de salida, ServletOutputStream, y un Writer a travs del cual el servlet puede responder datos. Los interfaces que extienden el interface ServletResponse le dan a los servlets ms capacidades especficas del protocolo. Por ejemplo, el interface HttpServletResponse contiene mtodos que permiten al servlet manipular informacin de cabecera especfica HTTP.

Ing. Jos Fernndez Murrugarra

INGENIERIA WEB 2013-II

Capacidades Adicionales de los Servlets HTTP Las clases e interfaces descritos anteriormente construyen un servlet bsico. Los servlets HTTP tienen algunos objetos adicionales que proporcionan capacidades de seguimiento de sesin. El escritor se servlets pueden utilizar esos APIs para mantener el estado entre el servlet y el cliente persiste a travs de mltiples conexiones durante un periodo de tiempo. Los servlets HTTP tambin tienen objetos que proporcionan cookies. El API cookie se utiliza para guardar datos dentro del cliente y recuperar esos datos.

El API Servlets y el ciclo de vida.


Los servlets usan clases e interfaces de dos paquetes: javax.servlet que contiene clases para servlets genricos (independientes del protocolo que usen) y, javax.servlet.http (que aade funcionalidad particular de http). El nombre javax indica que los servlets son una extensin.

Los servlets no tienen el mtodo main() como los programas Java, sino que se invocan unos mtodos cuando se reciben peticiones. A esta metodologa se le llama ciclo de vida de un servlet y viene dado por tres mtodos: init, service, destroy: INICIALIZACIN: Una nica llamada al mtodo init por parte del servlet. Incluso se pueden recoger unos parmetros concretos con getInitParameter de ServletConfig inicialales y que operarn a lo largo de toda la vida del servlet. SERVICIO: una llamada a service() por cada invocacin al servlet para procesar las peticiones de los clientes web. DESTRUCCIN: Cuando todas las llamadas desde el cliente cesen o un temporizador del servidor as lo indique o el propio administrador as lo decida se destruye el servlet. Se usa el mtodo destroy para eliminar al servlet y para recoger sus restos (garbage collection).

Ing. Jos Fernndez Murrugarra

INGENIERIA WEB 2013-II

Cada vez que el servidor pasa una peticin (distinta a la primera) a un servlet se invoca el mtodo service(), este mtodo habr que sobreescribirlo (override). Este mtodo acepta dos parmetros: un objeto peticin (request) y un objeto respuesta. Los servlets http, que son los que vamos a usar, tienen ya definido un mtodo service() que llama a doXxx(), con Xxx el nombre de la orden que viene en la peticin al servidor web. Estos dos mtodos son doGet() y doPost() y nos sirven para atender las peticiones especficamente provinientes de mtodos GET o POST respectivamente. De esta manera, una vez se carga el servlet, es muy eficiente, pues slo hay una copia cargada en memoria (se ejecutan uno o varios hilos), no hay que crear nuevos objetos (un solo objeto servlet), y tiene persistencia: puede guardar informacin entre peticiones, como contadores o conexiones a una base de datos. Esto ltimo puede ser muchsimo ms eficiente hacerlo en el mtodo init que abrir y cerrar la conexin con la base de datos en cada peticin.

Ing. Jos Fernndez Murrugarra

INGENIERIA WEB 2013-II

Mtodos GET y POST GET: Paso de parmetros en la propia URL de acceso al servicio/recurso del servidor. Mtodo asociado del servlet doGet POST: Lo mismo que GET pero los parmetros van en lnea aparte dentro del cuerpo de la peticin. Mtodo asociado del servlet doPost. Ejemplo1: Veamos la estructura bsica de un servlet con un ejemplo. Para entender cmo funciona un servlet vamos a disear uno muy bsico y que a modo de plantilla nos sirva para construir otros, para hacer esto, iniciamos una sesin del IDE de NetBeans. Hacemos proyecto Web nuevo al que llamaremos Ejem0Servlet, una vez tengamos la plantilla de la pgina index.jsp vamos a hacer que sta llame a un servlet a travs de un enlace href, es decir, el cdigo de index.jsp ser:

Ing. Jos Fernndez Murrugarra

INGENIERIA WEB 2013-II

Ahora vamos a aadir un paquete al que llamaremos paquete0, para hacer esto, bastara situarse con el botn derecho sobre el nombre del proyecto y seleccionar Nuevo Paquete. Cuando tengamos el paquete, nos situamos en l y con el botn derecho seleccionamos Nuevo Servlet, llamamos al nuevo servlet Servlet0 y aparecer la siguiente plantilla,

donde hemos descomentado las instrucciones de processRequest . Como vemos en este servlet elemental, comienza con una cabecera donde se indica el paquete que lo contiene y seis importaciones de paquetes que son necesarios para su correcta ejecucin,

luego vemos que la clase que define el servlet es una clase pblica extendida o derivada de HttpServlet. Esta clase, naturalmente es pblica para poder ser vista desde cualquier otro servlet o jsp del proyecto, es decir,

Ing. Jos Fernndez Murrugarra

INGENIERIA WEB 2013-II

La contiene varios mtodos, a saber: 1.- Mtodo protected void processRequest(HttpServletRequest request, HttpServletResponse response)

Como vemos este mtodo se ejecuta tanto si la peticin se realiza a travs de GET como si es a travs de POST y lo nico que hace es devolver un texto. Merece especial consideracin las instrucciones: response.setContentType(text/html;charset=UTF-8); Esta instruccin fija el tipo de contenido que ser devuelto al peticionario, al cliente. PrintWriter out = response.getWriter(); Esta instruccin crea el objeto out que permitir escribir la salida. Este objeto es distinto al objeto out implcito de los jsp. request.getContextPath; , contiene el path desde donde se ha reaklizado la peticin. 2.-Mtodo protected void doGet(HttpServletRequest request, HttpServletResponse response)

Este mtodo llama al mtodo processRequest, se prejuzga que las tareas a ejecutar son las mismas con una llamada GET que con una llamara POST. En caso de error se lanza la excepcin ServletException.

Ing. Jos Fernndez Murrugarra

10

INGENIERIA WEB 2013-II

3.-Mtodo protected void doPost(HttpServletRequest request, HttpServletResponse response)

Este mtodo llama al mtodo processRequest, se prejuzga que las tareas a ejecutar son las mismas con una llamada GET que con una llamara POST. En caso de error se lanza la excepcin ServletException. 4.-Mtodo public String getServletInfo()

Podemos observar que la clase no tiene ni mtodo init() ni mtodo destroy. No son necesarios, ni obligatorios. Si ejecutamos,

Ing. Jos Fernndez Murrugarra

11

INGENIERIA WEB 2013-II

EJEMPLO2. En el ejemplo anterior no queda claro quien atiende especficamente la peticin, si doGet() o doPOst(). En realidad queda claro, pero de manera implcita, ya que cuando no existe un atributo method en una etiqueta form de HTML que especifique el mtodo GET o POST, el servlet SIEMPRE, por defecto, responde con el mtodo doGet(). Vamos a modificar el programa anterior y construiremos otro al que llamaremos ejem1Servlet (la mejor idea es copiarlo con el IDE de Netbeans). Modificaremos el Servlet0 de manera que no exista el mtodo processRequest. Esta vez haremos que cada uno de los mtodos doGet() y doPOst() responda cada uno por s slo. He aqu los mtodos:

Ing. Jos Fernndez Murrugarra

12

INGENIERIA WEB 2013-II

Si ejecutamos el programa

como vemos, el servlet ha respondido con el mtodo doGet(), que es el que utiliza por defecto cuando no se explicita el mtodo de llamada.

Descriptor de Despligue:
El archivo web.xml se denomina descriptor de despliegue y es necesario cuando se utilizan servlet, porque con l se define su nombre y se identifica al paquete y clase que lo contiene, entre otras cuestiones. Mas adelante en este tutorial se analizarn otros usos, tales como los filtros, los parametros de contexto, los parametros iniciales, etcEn NetBeans se encuentra en la carpeta WEB-INF.

Ing. Jos Fernndez Murrugarra

Вам также может понравиться