Está en la página 1de 14

FACULTAD DE INFORMTICA Y CIENCIAS APLICADAS

ESCUELA DE INFORMTICA PROGRAMACIN IV Seccin 02 Dom. 7:00-10:00 am

Ing. Numa Suncin

REPASO SERVLETS
Objetivo: Revisar las partes en que se descompone un servlet, el ciclo de vida de un servlet y como pasar parmetros a un servlet desde un formulario HTML. Pasos
1- Crear un proyecto en NetBeans El primer paso es generar un nuevo proyecto, File-->New Project

En la seccin de categoras seleccionamos Java Web y en la seccin de proyectos seleccionamos Web Application.

Se nombra el proyecto, en este ejemplo: JavaServlet por Ejemplo.

FACULTAD DE INFORMTICA Y CIENCIAS APLICADAS


ESCUELA DE INFORMTICA PROGRAMACIN IV Seccin 02 Dom. 7:00-10:00 am

Ing. Numa Suncin

A continuacin se configura el servidor web en el que se ejecutar el servlet. En este ejemplo se usa GlassFish.

FACULTAD DE INFORMTICA Y CIENCIAS APLICADAS


ESCUELA DE INFORMTICA PROGRAMACIN IV Seccin 02 Dom. 7:00-10:00 am

Ing. Numa Suncin

2- Crear un servlet llamado HolaMundo ponindolo en el Package utec.progra4.servlets como se muestra en la figura siguiente:

Su proyecto debe de verse como el siguiente:

3- Modificar y/o Borrar el contenido del Servlet creado , dejndolo como se muestra a continuacin.

FACULTAD DE INFORMTICA Y CIENCIAS APLICADAS


ESCUELA DE INFORMTICA PROGRAMACIN IV Seccin 02 Dom. 7:00-10:00 am

Ing. Numa Suncin

Revisando el servlet anterior:

Lo primero que aparece es el paquete donde est ubicado el servlet creado, luego las clase que se utilizan. Vemos que utiliza las clases correspondientes a servlets (javax.servlet.*), las clases correspondientes a servlets que utilizan el protocolo HTTP (javax.servlet.http.*).

FACULTAD DE INFORMTICA Y CIENCIAS APLICADAS Ing. Numa Suncin El protocolo HTTP es el protocolo estndar en la web (o WWW - World Wide Web). Por eso, cuando en un navegador abrimos una direccin, la mayora empieza por http://. Tambin 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 pblica (public), en el sentido de que cualquiera puede usarla sin ningn tipo de restriccin) y que hereda (extends) de la clase HttpServlet.
ESCUELA DE INFORMTICA PROGRAMACIN IV Seccin 02 Dom. 7:00-10:00 am

Algo que debemos saber es que toda clase, para que se considere un servlet, debe implementar el interfaz javax.servlet.Servlet. Para conseguirlo lo ms 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. En esta guia, slo vamos a ver servlets que funcionen con el protocolo HTTP as que, por tanto, siempre heredarn de HttpServlet. Resumiendo, slo cambiar el nombre de la clase para cada servlet que hagamos. El siguiente trozo de cdigo que aparece (y que tenemos que implementar siempre) es la redefinicin del mtodo init. El servidor invoca a este mtodo cuando se crea el servlet y en este mtodo podemos hacer todas las operaciones de inicializacin que queramos. Como en este servlet no nos hace falta inicializacin ninguna, lo nico que hacemos es llamar al mtodo init por defecto (al de la superclase).

Podemos observar que el mtodo init es pblico, no devuelve ningn tipo (void), que puede lanzar una excepcin (ServletException) y que tiene un parmetro (ServletConfig conf). De estos dos ltimos aspectos (excepcin y parmetro) no nos tenemos que preocupar pues es el servidor quien ejecuta el mtodo init. En el peor de los casos, tendramos que lanzar la excepcin (si sabemos hacerlo), si por algn motivo el mtodo init que nosotros implementemos falle (por ejemplo, que no se pueda conectar a la base de datos y evitamos mostrar un mensaje de error) Lo siguiente que hacemos redefinir el mtodo service, cuando el servidor web recibe una peticin para un servlet llama al mtodo public void service(HttpServletRequest req, HttpServletResponse res) con dos parmetros: el primero, de la clase HttpServletRequest, representa la peticin del cliente y el segundo, de la clase HttpServletResponse, representa la respuesta del servidor (del servlet, ms concretamente).

FACULTAD DE INFORMTICA Y CIENCIAS APLICADAS


ESCUELA DE INFORMTICA PROGRAMACIN IV Seccin 02 Dom. 7:00-10:00 am

Ing. Numa Suncin

Como en este primer ejemplo no necesitamos ninguna informacin del cliente, no usaremos para nada el parmetro HttpServletRequest, ms adelante veremos cmo hacerlo. De la clase HttpServletResponse usamos dos mtodos:

setContextType(String str) para establecer el tipo de respuesta que vamos a dar. Para indicar que se trata de una pgina 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) slo nos queda utilizar el mtodo println de la clase PrinterWriter para ir escribiendo en dicho flujo de salida la pgina HTML que queremos que visualice el cliente

FACULTAD DE INFORMTICA Y CIENCIAS APLICADAS


ESCUELA DE INFORMTICA PROGRAMACIN IV Seccin 02 Dom. 7:00-10:00 am

Ing. Numa Suncin

Servlet GetPost
Si llamamos un servlet desde un formulario HTML, podremos hacerlo de dos formas: GET y POST. Con la primera los parmetros del formulario estn incluidos la url que se utiliza para invocar el servlet y en el segundo caso los parmetros se almacenan en un buffer especial del servidor. Para procesar el primer tipo de peticiones (GET) est el mtodo doGet mientras que para el segundo tenemos el mtodo doPost . La implementacin por defecto del mtodo service es capaz de determinar el tipo de peticin HTTP que en un momento dado recibe el servlet. Una vez identificada llama o al mtodo doGet o al doPost segn el caso. Como, en la mayora de los casos, seremos nosotros quien programe el formulario que llame al servlet, sabremos que tipo de llamada se har, por lo que podemos optar por redefinir uno slo de los mtodos. En el caso de que no lo supiramos se deben implementar los mtodos doGet y doPost. Un servlet que tiene diferente respuesta en funcin de la llamada que se le hace.

4- Crear un servlet llamado GetPost.java ponindolo en el Package utec.progra4.servlets cuyo cdigo fuente era el siguiente:

FACULTAD DE INFORMTICA Y CIENCIAS APLICADAS


ESCUELA DE INFORMTICA PROGRAMACIN IV Seccin 02 Dom. 7:00-10:00 am

Ing. Numa Suncin

FACULTAD DE INFORMTICA Y CIENCIAS APLICADAS Ing. Numa Suncin 5- Para llamar el servlet con un tipo de llamada get crear una pagina html llamada get.html con el siguiente cdigo.
ESCUELA DE INFORMTICA PROGRAMACIN IV Seccin 02 Dom. 7:00-10:00 am

6-

Para llamar el servlet con un tipo de llamada post crear una pagina html llamada post.html con el siguiente cdigo.

Su proyecto debe tener una estructura similar a esta:

Utilice sus destrezas para verificar como trabajan las dos distintas llamadas a los mtodos get y post. (Ejecutar las paginas HTML)

FACULTAD DE INFORMTICA Y CIENCIAS APLICADAS


ESCUELA DE INFORMTICA PROGRAMACIN IV Seccin 02 Dom. 7:00-10:00 am

Ing. Numa Suncin

Ciclo de vida del Servlet


Como hemos visto antes, cuando se crea un servlet, el servidor llama al mtodo init y cada vez que un cliente acceda al servlet el servidor llamar al mtodo service que se encargar de redirigir la llamada doGet o a doPost. Esto nos quiere decir que cuando se llama por primera vez a un servlet se ejecutara primero init y despus service, pero ... Y la segunda vez y sucesivas tambin se llama a init o slo a service?. Normalmente, el servidor crea el servlet (llama, por tanto, al mtodo init) y lo mantiene funcionando, si ha pasado un tiempo suficiente (y que puede ir desde unos segundos a nunca) sin que el servlet se llame lo deja de ejecutar. Es decir, un servlet se empieza a ejecutar con la primera llamada y, normalmente, se seguir ejecutando. De esta forma, vamos a crear un servlet que cuente el nmero de visitas que recibe, para ello nos bastar crear una variable contador que inicializaremos en el mtodo init y que incrementaremos en doPost/doGet. Por lo que, el contador se inicializar cuando se llame por primera vez al servlet y se ir incrementando en llamadas sucesivas. 7- Crear un servlet llamado Contador.java ponindolo en el Package utec.progra4.servlets cuyo cdigo fuente era el siguiente:

FACULTAD DE INFORMTICA Y CIENCIAS APLICADAS


ESCUELA DE INFORMTICA PROGRAMACIN IV Seccin 02 Dom. 7:00-10:00 am

Ing. Numa Suncin

FACULTAD DE INFORMTICA Y CIENCIAS APLICADAS


ESCUELA DE INFORMTICA PROGRAMACIN IV Seccin 02 Dom. 7:00-10:00 am

Ing. Numa Suncin

Utilice sus destrezas para verificar como trabaja el servlet Contador. (Modifique las paginas HTML get.html y post.html)

8- Puede genera un war y deployarlo en Tomcat y hacer las siguientes consultas. http://localhost:8080/ServletsWebApp/get.html http://localhost:8080/ServletsWebApp/post.html

Al hacer click en Enviar consulta tendr el siguiente resultado:

Llamando al Mtodo POST y al hacer click en Enviar consulta tendr el siguiente resultado:

FACULTAD DE INFORMTICA Y CIENCIAS APLICADAS


ESCUELA DE INFORMTICA PROGRAMACIN IV Seccin 02 Dom. 7:00-10:00 am

Ing. Numa Suncin

Parmetros desde un formulario HTML


Normalmente los servlets tendrn parmetros o fuentes de informacin que le darn su aspecto dinmico. Es decir, para generar una simple pgina HTML no nos complicamos tanto la vida, se escribe la pgina HTML y se ha terminado. Las fuentes de informacin de las que un servlet hace uso, pueden ser varias: el propio servlet, el servidor web, ficheros o bases de datos a los que pueda acceder o parmetros que le pase el cliente. De todas estas fuentes, nos interesan los accesos a bases de datos que veremos ms adelante y los pa;rmetros que nos pasa el cliente mediante formularios HTML. Cuando pasamos parmetros a travs de un formulario, en los Servlets a travs de la clase ServletRequest, disponemos de los siguientes mtodos para su tratamiento:

String getParameter(String nombre): Nos devuelve el valor del parmetro cuyo nombre le indicamos. Si la variable no existiera o no tuviese ningn valor, devolvera null Enumerate getParameterNames(): Nos devuelve una enumeracin de los nombres de los parmetros que recibe el servlet.

FACULTAD DE INFORMTICA Y CIENCIAS APLICADAS Ing. Numa Suncin Enumerate getParameterValues(String): Nos devuelve los valores que toma un parmetro dado, esto es til para listas de seleccin mltiple donde un parmetro tiene ms de un valor.
ESCUELA DE INFORMTICA PROGRAMACIN IV Seccin 02 Dom. 7:00-10:00 am