1-Repaso Clase Servlet

Embed Size (px)

Citation preview

  • 7/25/2019 1-Repaso Clase Servlet

    1/12

    FACULTAD DE INFORMTICA Y CIENCIAS APLICADAS

    ESCUELA DE INFORMTICAPROGRAMACIN IV Seccin 02 Ciclo 01-16

    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 (Ver Guia para crear proyecto web condescriptor que est en edutec).

    2- Crear un servlet llamado HolaMundo ponindolo en el Package

    utec.progra4.servletscomo se muestra en la figura siguiente:

    Su proyecto debe de verse como el siguiente:

  • 7/25/2019 1-Repaso Clase Servlet

    2/12

    FACULTAD DE INFORMTICA Y CIENCIAS APLICADAS

    ESCUELA DE INFORMTICAPROGRAMACIN IV Seccin 02 Ciclo 01-16

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

    continuacin.

    Revisando el servlet anterior:

    Lo primero que aparece es el paquete donde est ubicado el servlet creado, luego las clase

    que se utilizan.

  • 7/25/2019 1-Repaso Clase Servlet

    3/12

    FACULTAD DE INFORMTICA Y CIENCIAS APLICADAS

    ESCUELA DE INFORMTICAPROGRAMACIN IV Seccin 02 Ciclo 01-16

    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 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.

    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 ojavax.servlet.http.HttpServlet. Con la primera obtendremos un servlet independiente delprotocolo, 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 mtodoinit.

    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 lasuperclase).

    Podemos observar que el mtodo inites pblico, no devuelve ningn tipo (void), que puedelanzar 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 laexcepcin (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 unapeticin para un servlet llama al mtodo public void service(HttpServletRequest req,HttpServletResponse res) con dos parmetros: el primero, de la clase HttpServletRequest,

  • 7/25/2019 1-Repaso Clase Servlet

    4/12

    FACULTAD DE INFORMTICA Y CIENCIAS APLICADAS

    ESCUELA DE INFORMTICAPROGRAMACIN IV Seccin 02 Ciclo 01-16

    representa la peticin del cliente y el segundo, de la clase HttpServletResponse, representa la

    respuesta del servidor (del servlet, ms concretamente).

    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 claseHttpServletResponse usamos dos mtodos:

    setContextType(String str)para establecer el tipo de respuesta que vamos a dar. Paraindicar 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 dondeiremos 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

  • 7/25/2019 1-Repaso Clase Servlet

    5/12

    FACULTAD DE INFORMTICA Y CIENCIAS APLICADAS

    ESCUELA DE INFORMTICAPROGRAMACIN IV Seccin 02 Ciclo 01-16

    Servlet GetPost

    Si llamamos un servlet desde un formulario HTML, podremos hacerlo de dos formas:GETy POST. Con la primera los parmetros del formulario estn incluidos la url que seutiliza para invocar el servlet y en el segundo caso los parmetros se almacenan en unbuffer especial del servidor.

    Para procesar el primer tipo de peticiones (GET) est el mtodo doGetmientras quepara el segundo tenemos el mtodo doPost.

    La implementacin por defecto del mtodo servicees capaz de determinar el tipo depeticin HTTP que en un momento dado recibe el servlet.

    Una vez identificada llama o al mtodo doGeto al doPostsegn el caso. Como, en lamayora de los casos, seremos nosotros quien programe el formulario que llame alservlet, sabremos que tipo de llamada se har, por lo que podemos optar por redefiniruno slo de los mtodos. En el caso de que no lo supiramos se deben implementarlos mtodos doGety 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 Packageutec.progra4.servlets cuyo cdigo fuente era el siguiente:

  • 7/25/2019 1-Repaso Clase Servlet

    6/12

    FACULTAD DE INFORMTICA Y CIENCIAS APLICADAS

    ESCUELA DE INFORMTICAPROGRAMACIN IV Seccin 02 Ciclo 01-16

  • 7/25/2019 1-Repaso Clase Servlet

    7/12

    FACULTAD DE INFORMTICA Y CIENCIAS APLICADAS

    ESCUELA DE INFORMTICAPROGRAMACIN IV Seccin 02 Ciclo 01-16

    5- Para llamar el servlet con un tipo de llamada get crear una pagina html llamada

    get.html con el siguiente cdigo.

    6- Para llamar el servlet con un tipo de llamada post crear una pagina html llamadapost.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)

  • 7/25/2019 1-Repaso Clase Servlet

    8/12

    FACULTAD DE INFORMTICA Y CIENCIAS APLICADAS

    ESCUELA DE INFORMTICAPROGRAMACIN IV Seccin 02 Ciclo 01-16

    Ciclo de vida del Servlet

    Como hemos visto antes, cuando se crea un servlet, el servidor llama al mtodo initycada vez que un cliente acceda al servlet el servidor llamar al mtodo serviceque seencargar de redirigir la llamada doGeto a doPost.

    Esto nos quiere decir que cuando se llama por primera vez a un servlet se ejecutaraprimero init y despus service, pero ... Y la segunda vez y sucesivas tambin sellama a inito slo a service?.

    Normalmente, el servidor crea el servlet (llama, por tanto, al mtodo init) y lo mantienefuncionando, si ha pasado un tiempo suficiente (y que puede ir desde unos segundos anunca) 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 inity que incrementaremos en doPost/doGet.

    Por lo que, el contador se inicializar cuando se llame por primera vez al servlet y seir incrementando en llamadas sucesivas.

    7- Crear un servlet llamado Contador.java ponindolo en el Packageutec.progra4.servlets cuyo cdigo fuente era el siguiente:

  • 7/25/2019 1-Repaso Clase Servlet

    9/12

    FACULTAD DE INFORMTICA Y CIENCIAS APLICADAS

    ESCUELA DE INFORMTICAPROGRAMACIN IV Seccin 02 Ciclo 01-16

  • 7/25/2019 1-Repaso Clase Servlet

    10/12

    FACULTAD DE INFORMTICA Y CIENCIAS APLICADAS

    ESCUELA DE INFORMTICAPROGRAMACIN IV Seccin 02 Ciclo 01-16

    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:

    http://localhost:8080/ServletsWebApp/get.htmlhttp://localhost:8080/ServletsWebApp/get.htmlhttp://localhost:8080/ServletsWebApp/post.htmlhttp://localhost:8080/ServletsWebApp/post.htmlhttp://localhost:8080/ServletsWebApp/post.htmlhttp://localhost:8080/ServletsWebApp/get.html
  • 7/25/2019 1-Repaso Clase Servlet

    11/12

    FACULTAD DE INFORMTICA Y CIENCIAS APLICADAS

    ESCUELA DE INFORMTICAPROGRAMACIN IV Seccin 02 Ciclo 01-16

    Parmetros desde un formulario HTML

    Normalmente los servlets tendrn parmetros o fuentes de informacin que le darn suaspecto dinmico. Es decir, para generar una simple pgina HTML no noscomplicamos 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 propioservlet, el servidor web, ficheros o bases de datos a los que pueda acceder oparmetros que le pase el cliente.

    De todas estas fuentes, nos interesan los accesos a bases de datos que veremos msadelante 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 laclase ServletRequest, disponemos de los siguientes mtodos para su tratamiento:

    String getParameter(String nombre): Nos devuelve el valor del parmetro cuyonombre le indicamos. Si la variable no existiera o no tuviese ningn valor,devolvera null

    Enumerate getParameterNames(): Nos devuelve una enumeracin de losnombres de los parmetros que recibe el servlet.

    Enumerate getParameterValues(String): Nos devuelve los valores que toma unparmetro dado, esto es til para listas de seleccin mltiple donde un parmetrotiene ms de un valor.

  • 7/25/2019 1-Repaso Clase Servlet

    12/12

    FACULTAD DE INFORMTICA Y CIENCIAS APLICADAS

    ESCUELA DE INFORMTICAPROGRAMACIN IV Seccin 02 Ciclo 01-16

    Esto lo pudimos comprobar en la practica 3 donde se cre la aplicacin Web que contena el

    formulario html llamadoFormulario1.html; los servlets ServletEnlace.javayServletFormulario1.java