Post on 18-Jan-2016
transcript
5.6 Ejemplos prácticos de servlets
Los ejercicios que se trabajarán en este capítulo se realizan en el entorno NetBeans
7.1.1 IDE, utilizando como contenedor de servlets Tomcat 7.0.22.0 y se visualizarán
en el navegador Internet Explorer 8.
5.6.1 Ejercicios utilizando las peticiones GET y POST
a) Hacer un programa que utilice un servlet de Java con la petición get de HTTP que
permita mostrar un mensaje de bienvenida.
Nota: en este primer ejemplo de servlets se realizaran todos los pasos necesarios hasta
lograr ejecutar el servlet. En posteriores ejemplos se omitirán algunos pasos.
Crear proyecto Java Web
Desde el entorno de desarrollo de NetBeans pulse Archivo, luego Proyecto Nuevo… o
simplemente pulse Ctrl + Mayúsculas + N, se visualizará la siguiente ventana:
Figura 5.3 Ventana para crear un nuevo proyecto.
En Categorías seleccione Java Web, en Proyectos la opción Web Application y pulse
el botón Siguiente, para visualizar la siguiente figura:
Figura 5.4 Nombre y localización del nuevo proyecto Web.
Como Project Name escriba Servlets, en Project Location se puede cambiar la
localización (ruta) de éste, además deje habilitado el cuadro de verificación Set as Main
Project y pulse el botón Siguiente para ver la ventana del servidor y ajustes.
Figura 5.4 Servidor y ajustes del proyecto Web.
En el campo Server seleccione la versión de Apache Tomcat (en el ejemplo es Apache
Tomcat 7.0.22.0), en Java EE Versión escoja JEE 1.4 y pulse el botón Siguiente para
ver la ventana de marcos de trabajo.
Figura 5.5 Ventana Frameworks.
Pulse el botón Terminar para ver el proyecto Web creado
Figura 5.6 Proyecto Web Servlets creado desde NetBeans IDE.
En NetBeans IDE cuando se crea el proyecto Web se genera la siguiente estructura de
directorios de configuración:
Web Pages: se encontrará lo siguiente:
o Carpeta META-INF: la cual contiene el archivo de configuración de
metadatos context.xml.
o Carpeta WEB-INF: contiene el archivo web.xml (descriptor de
despliegue).
o Arhivo index.jsp: este archivo es de extensión jsp y será el punto de
partida de la aplicación para ejecutar el servlet, el cual contiene la
estructura básica de un página HTML(al dar doble clic sobre éste se
visualizará el código generado), donde posteriormente se le adicionará
una etiqueta form (formulario) y en su atributo action se le definirá el
nombre del servlet que se desea ejecutar al enviar (submit) el formulario.
Source Packages: aquí se pueden crear los paquetes de la aplicación y los
servlets o clases.
Libraries: permite adicionar archivos necesarios para el buen funcionamiento
de la aplicación (driver de bases de datos, archivos para graficar, etc.).
Configuration Files: contiene archivo de configuración.
Crear el servlet
Seleccione la carpeta Source Packages y pulse el botón derecho del mouse y elija
Nuevo y después Servlet, como se aprecia en la siguiente figura:
Figura 5.7 Crear un nuevo Servlet.
Al dar clic se observará la ventana para definir el nombre y la ubicación del servlet.
Figura 5.8 Nombre y ubicación del Servlet.
Como Nombre de Clase escriba PrimerServlet y sí se creó un paquete para el servlet
escríbalo o selecciónelo en la opción Paquete. Sí pulsa el botón Siguiente se
visualizará la ventana Configuración para implementar el Servlet.
Figura 5.9 Ventana Configure Servlet Deployment.
Al pulsar el botón Terminar, en la parte izquierda se observará el archivo creado y en
la parte derecha el código generado por NetBeans IDE para el nuevo servlet.
Figura 5.10 Ventana con el código generado para el nuevo servlet.
Escribir código
En el editor de código, elimine el código generado y escriba el siguiente:
public class PrimerServlet extends HttpServlet { protected void doGet(HttpServletRequest peticion, HttpServletResponse respuesta) throws ServletException, IOException { respuesta.setContentType("text/html"); PrintWriter salida=respuesta.getWriter(); salida.println("<head>"); salida.println("<title> Primer ejemplo de un Servlet</title>"); salida.println("</head>"); salida.println("<body>"); salida.println("<h1>! Bienvenido a los Servlets de Java......!</h1>"); salida.println("</body>"); salida.println("</html>"); salida.close(); } }
Análisis del código
Se define la clase PrimerServlet, la cual hereda los métodos de la clase HttpServlet,
por otro se implementa el método doGet, que responde a las peticiones get. El método
doGet recibe dos argumentos: un objeto HttpServletRequest (peticion) y un objeto
HttpServletResponse (respuesta), donde el objeto HttpServletRequest representa la
petición del cliente y el objeto HttpServletResponse representa la respuesta del
servidor al cliente. Si un método doGet no puede manejar la petición del cliente, lanza
una excepción de tipo javax.servlet.ServletException, y si encuentra un error durante
el procesamiento de los flujos de información (leer del cliente o escribir al cliente),
lanza una excepción de tipo javax.io.IOException. Utilizando el método
setContentType se establece el tipo de dato que se utiliza como respuesta, en este caso
es de tipo text/html, para indicarle al navegador que la respuesta es un documento
HTML, además con el método getWriter se devuelve un flujo de datos de tipo
PrintWriter, que permite al servidor enviar el contenido al cliente.
Por último se crea el documento HTML, escribiendo cadenas de caracteres mediante el
método println y se cierra el flujo de salida y se envía la información al cliente.
Observación: en el código se espera que se aprecien errores, porque NetBeans IDE no
reconoce automáticamente las clases utilizadas. Para importar los paquetes necesarios,
dé clic derecho sobre el mouse y seleccione la opción reparar importaciones (fix
imports) o simplemente pulse Ctrl + Mayúsculas +I.
Modificar el archivo index.jsp
Busque el archivo index.jsp en la carpeta Web Pages, dé doble clic sobre éste para
visualizar el código generado y reemplácelo por el siguiente:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Ejecutar un primer servlet</title> </head> <body> <form action ="PrimerServlet" method ="get"> <p> <label>Pulse el botón para llamar el servlet <input type ="submit" value="obtener documento HTML"/> </label> </p> </form> </body> </html>
Análisis del código
Se define la estructura básica de un documento HTML:
<html> <head> </head> <body> </body> </html>
Dentro de la etiqueta <head> se establece el tipo de contenido, en este caso text/html,
para indicarle al navegador que el contenido es un documento HTML, además un título
en el encabezado por intermedio de la etiqueta <title>. Por otro lado en la etiqueta
<form> utilizando el atributo action se especifica la ruta URL, que invoca al servlet
(PrimerServlet) y con el atributo method se le indica al navegador que se envía una
petición get al servidor, la cual llama al método doGet del servlet. Con la etiqueta <p>
se define un párrafo y en la etiqueta <label> se escribe el texto que ira dentro del
párrafo. La sentencia submit de tipo input crea un botón y value permite colocarle un
texto al botón creado.
Ejecutar el archivo jsp
Seleccione el archivo index.jsp, pulse el botón derecho del mouse y escoja la opción
Ejecutar archivo o simplemente pulse Mayúsculas + F6. Se visualizará la siguiente
figura:
Figura 5.11 Ejecución index.jsp.
Al pulsar el botón obtener documento HTML, se visualizará:
Figura 5.12 Llamado al servlet de Java (PrimerServlet).
b) Escribir programa que utilice un servlet llamado SaludoServlet con la petición get
de HTTP y deberá permitir capturar los nombres, la edad, la principal afición, el
deporte favorito, el lugar de nacimiento y la edad actual e imprimir dicha
información.
Nota: a partir de este ejemplo se omitirán algunos pasos que se realizaron en el ejemplo
anterior.
Código servlets
Cree un nuevo serlvet llamado SaludoServlet y reemplace el código por el siguiente:
public class SaludoServlet extends HttpServlet { protected void doGet(HttpServletRequest peticion, HttpServletResponse respuesta) throws ServletException, IOException { String nombres=peticion.getParameter("nombres"); String profesion=peticion.getParameter("profesion"); String aficion=peticion.getParameter("aficion"); String deporte=peticion.getParameter("deporte"); String nacimiento=peticion.getParameter("nacimiento"); String edad=peticion.getParameter("edad"); respuesta.setContentType("text/html"); PrintWriter salida=respuesta.getWriter(); salida.println("<head>"); salida.println("<title> Procesamiento de peticiones get con datos</title>"); salida.println("</head>"); salida.println("<body>"); salida.println("<h1 align=center>! hola :"+nombres+" ....!!!Bienvenido a los servlets!!!<br/></h1>"); salida.println("<h3 align=center>Tu profesion es:"+profesion+" ...Que BIEN!!!!<br/>"); salida.println("Lo que más le gusta hacer es :"+aficion+" ...CHEVERE!!!<br/>"); salida.println("Tu deporte preferido es:"+deporte+" ...BACANO!!!<br/>"); salida.println("Naciste en: :"+nacimiento+"<br/>"); salida.println("Y tu edad es:"+edad+"<br/><h3>"); salida.println("</body>"); salida.close(); } }
Análisis del código
Se implementa el método doGet, que responde a las peticiones get, el cual recibe dos
argumentos: un objeto HttpServletRequest (petición del cliente) llamado peticion y
un objeto HttpServletResponse (respuesta del servidor) llamado respuesta. Por otro
lado, se definen seis variables de tipo String (nombre, profesión, afición, deporte,
nacimiento, edad) a las cuales se les asignan los valores que contienen la URL (página
HTML o JSP), por intermedio del método getParameter (permite obtener el valor de
un parámetro a recuperar) perteneciente a la interface HttpServletRequest. Utilizando
el objeto salida de tipo PrintWriter() se crea el documento HTML escribiendo
cadenas de caracteres mediante el método println y por último se cierra el flujo de
salida por medio del método close().
Observación: en el código se espera que se aprecien errores, porque NetBeans IDE no
reconoce automáticamente las clases utilizadas. Para importar los paquetes necesarios,
dé clic derecho sobre el mouse y seleccione la opción reparar importaciones (fix
imports) o simplemente pulse Ctrl + Mayúsculas +I.
Crear el archivo saludo.jsp
Seleccione la carpeta Web Pages y pulse el botón derecho del mouse y elija Nuevo y
después JSP, como se aprecia en la siguiente figura:
Figura 5.13 Crear un archivo JSP.
Al dar clic sobre la opción JSP, se visualizará la ventana para dar Nombre y la
ubicación al nuevo JSP, como se aprecia en la siguiente figura:
Figura 5.14 Nombre y ubicación del archivo JSP.
Como Nombre de Archivo (File Name) escriba saludo. Al pulsar el botón Terminar
se visualizará la ventana con el código HTML generado.
Figura 5.15 Nombre y ubicación del archivo JSP.
Modificar el archivo saludo.jsp
Seleccione el código generado en el archivo saludo.jsp y reemplácelo por el siguiente:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Saludo con un Servlet</title> </head> <body> <form action ="SaludoServlet" method ="get"> <h1 align="center"> Solicitud información</h1> <h3><label> Escriba sus nombres : <input type ="text" name ="nombres"/> Cuál es su profesión: <input type ="text" name ="profesion"/><br/><br/>
Su afición preferida: <input type ="text" name ="aficion"/> Su deporte favorito : <input type ="text" name ="deporte"/><br/><br/> Lugar de nacimiento : <input type ="text" name ="nacimiento"/> Su edad es : <input type ="text" name ="edad"/><br/><br/> <input type = "submit" value="Enviar información"/> </label></h3> </form> </body> </html>
Análisis del código
En la etiqueta <form> utilizando el atributo action se especifica la URL, que invoca al
servlet (SaludoServlet) y con el atributo method se le indica al navegador que se envía
una petición get al servidor, la cual llama al método doGet del servlet. Utilizando el
elemento text perteneciente al atributo type del elemento interactivo input se crean
cajas de texto, donde se digitará la información solicitada. Al pulsar el botón (submit)
con la etiqueta Enviar la información, se enviará los datos al servlet seleccionado para
visualizarlos en la página Web.
Ejecutar el archivo jsp
Seleccione el archivo saludo.jsp, pulse el botón derecho del mouse y escoja la opción
Ejecutar archivo o simplemente pulse Mayúsculas + F6. Se visualizará la siguiente
figura:
Figura 5.16 Ejecución archivo saludo.jsp.
Sí se digita la información que se aprecia en la siguiente figura:
Figura 5.17 Información de la página Web saludo.jsp.
Y la pulsar el botón Enviar información, se observará la siguiente figura:
Figura 5.18 Llamado al servlet de Java (SaludoServlet).
c) Diseñar programa que utilice servlet con la petición post de http, donde se pueda
capturar el valor de un préstamo, seleccionar el plazo en meses del préstamo y digitar
la tasa de interés e imprimir las cuotas mensuales del préstamo.
Código servlets
Cree un nuevo serlvet llamado ServletPrestamo y reemplace el código por el siguiente:
public class ServletPrestamo extends HttpServlet { protected void doPost(HttpServletRequest peticion, HttpServletResponse respuesta) throws ServletException, IOException { double tasa=Double.parseDouble(peticion.getParameter("tasa")); long valor=Long.parseLong(peticion.getParameter("valor")); int plazo=Integer.parseInt(peticion.getParameter("plazo")); respuesta.setContentType("text/html"); PrintWriter salida=respuesta.getWriter(); double cuota=0, interes=0; int i; salida.println("<h1 align=center>Simulación mensual de las cuotas</h1>"); salida.println("<table border=2 align=center>"); salida.println("<tr><th>Saldo Prestamo</th><th>Interes</th><th>cuota mensual</th<</tr>"); for(i=plazo;i>=1;i--) { interes=Math.round((valor*tasa)/100); cuota= Math.round(interes+ (valor/plazo)); salida.println("<tr><td>"+valor+"</td><td>"+interes+"</td><td>"+cuota+
"</td<</tr>"); valor=valor-(valor/plazo); } salida.println("</table>"); salida.close(); } }
Análisis del código
Se definen las siguientes variables: double (tasa, cuota, interés), long (valor), int (plazo,
i). Utilizando la etiqueta <table> se define una tabla HTML, con la etiqueta <tr> se
especifican las filas y con <th> se colocan en negrilla los encabezados de dicha tabla.
Con un ciclo for se inicializa la variable i con el valor del plazo inicial, el cual se
repetirá mientras la variable i sea mayor o igual que 1 (esta variable se ira
decrementando en 1). A la variable interes se le asigna el valor mensual del interés del
préstamo; a la variable cuota se le asigna el valor de la cuota mensual y con <td> se
imprime por columna el saldo del préstamo (valor), el interés sobre el saldo (interes) y
el valor de la cuota del respectivo mes (cuota). Por último a la variable valor se le resta
el valor de la cuota para obtener el nuevo saldo.
Observación: en el código se espera que se aprecien errores, porque NetBeans IDE no
reconoce automáticamente las clases utilizadas. Para importar los paquetes necesarios,
dé clic derecho sobre el mouse y seleccione la opción reparar importaciones (fix
imports) o simplemente pulse Ctrl + Mayúsculas +I.
Crear archivo .jsp
Cree un nuevo archivo JSP llamado prestamo.jsp. El código generado en el archivo
reemplácelo por el siguiente:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Servlet Prestamo</title> </head> <body> <h1 align="center">Simulación cuota crédito</h1> <form action ="ServletPrestamo" method ="post"> <p><label>Valor del préstamo: <input type ="text" name ="valor"/><br/><br/> Plazo en meses del préstamo: <select name="plazo" size="1"> <option>12</option> <option>24</option> <option>36</option> <option>48</option> </select> <br/><br/> Tasa de interes del préstamo: <input type ="text" name ="tasa"/><br/><br/> <input type = "submit" value="Simular"/> </p></label> </form> </body> </html>
Análisis del código
En la etiqueta <form> utilizando el atributo action se especifica la URL, que invoca al
servlet (ServletPrestamo) y con el atributo method se le indica al navegador que se
envía una petición post al servidor, la cual llama al método doPost del servlet.
Utilizando el elemento text perteneciente al atributo type del elemento interactivo input
se crean cajas de texto (valor y tasa), donde se digitará la información solicitada y con la
etiqueta <select> se define una lista de opciones con diferentes plazos Al pulsar el
botón (submit) con la etiqueta Simular, se enviará los datos al servlet seleccionado
para visualizarlos en la página Web.
Ejecutar el archivo jsp
Seleccione el archivo prestamo.jsp, pulse el botón derecho del mouse y escoja la
opción Ejecutar archivo o simplemente pulse Mayúsculas + F6. Se visualizará la
siguiente figura:
Figura 5.19 Ejecución archivo prestamo.jsp.
Sí se digita los valores 10000000, 2.5 y selecciona 12 respectivamente, como se observa
en la anterior figura y al pulsar el botón Simular se obtendrá la página Web que a
continuación se presenta:
Figura 5.20 Ejecución servlet ServletPrestamo.
d) Escribir un programa que utilice servlets con la petición post de http, el cual permita
capturar los valores de horas, minutos y segundos e imprima las horas, los minutos y
los segundos un (1) segundo después. Se debe tener en cuenta que las horas están en
el rango entre 0 y 23 y los minutos y los segundos entre 0 y 59. Ejemplo:
Se captura Se obtiene
Horas Minutos Segundos +1 Horas Minutos Segundo
15 23 10 15 23 11
17 31 59 17 32 0
21 59 59 22 0 0
23 59 59 0 0 0
Código servlets
Cree un nuevo serlvet llamado ServletUnSegundo y reemplace el código por el
siguiente:
public class ServletUnSegundo extends HttpServlet { protected void doPost(HttpServletRequest peticion, HttpServletResponse respuesta) throws ServletException, IOException { respuesta.setContentType("text/html"); PrintWriter salida=respuesta.getWriter(); int horas=Integer.parseInt(peticion.getParameter("horas")); int minutos=Integer.parseInt(peticion.getParameter("minutos")); int segundos=Integer.parseInt(peticion.getParameter("segundos")); salida.println("<h1 align=center>Horas-minutos-segundos 1 segundo después</h1>"); salida.println("<table border=2 align=center>"); salida.println("<tr><th>horas</th><th>minutos</th><th>segundos</th<</tr>"); if(horas==23 && minutos==59 && segundos==59) { horas=minutos=segundos=0; } else { if(minutos==59 && segundos==59) { horas+=1; minutos=segundos=0; } else { if(segundos==59) { segundos=0; minutos+=1; } else segundos++; } } salida.println("<tr><td>"+horas+"</td><td>"+minutos+"</td><td>"+segundos+"</td<</tr>"); salida.println("</table>"); salida.close(); } }
Análisis del código
Se definen las variables de tipo int: horas, minutos, segundos a las cuales a las cuales se
les asignan los valores enviados por el archivo JSP por intermedio del método
getParameter. Con una primera estructura If se evalúa si el valor de horas es igual a
23, el de minutos es igual a 59 y el de segundos igual a 59, si se cumple la condición se
le asigna a las variables el valor de cero (0). Si no se cumple la condición por falso
(else) se evaluará los valores de minutos y segundos. Si estos son iguales a 59, se
incrementará en uno (+1) el valor de la variable horas y a las variables minutos y
segundos se les asignará el valor cero (0). Si tampoco la condición es verdadera se
evaluará el valor de segundos. Si esta es igual a 59, se incrementa en uno (+1) el valor
de la variable minutos y a segundos se le asignará el valor de cero (0). Por otro lado, si
tampoco se cumple la condición se incrementará segundos en uno (+1). Al determinarse
los valores de horas, minutos, segundos se imprimirá dichos valores en la página Web
correspondiente
Crear archivo .jsp
Cree un nuevo archivo JSP llamado segundo.jsp. El código generado en el archivo
reemplácelo por el siguiente:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Servlet un segundo después</title> </head> <body> <form action ="ServletUnSegundo" method ="post"> <h1 align="center"> Horas - minutos - segundos</h1> <h2><label> Escriba la hora : <input type ="text" name ="horas"/><br/><br/> Escriba los minutos : <input type ="text" name ="minutos"/><br/><br/> Escriba los segundos: <input type ="text" name ="segundos"/><br/><br/> <input type = "submit" value="Enviar"/> </label></h2> </form> </body> </html>
Análisis del código
En la etiqueta <form> utilizando el atributo action se especifica la URL, que invoca al
servlet (ServletUnSegundo) y con el atributo method se le indica al navegador que se
envía una petición post al servidor, la cual llama al método doPost del servlet.
Utilizando el elemento text perteneciente al atributo type del elemento interactivo input
se crean tres cajas de texto (horas, minutos, segundos), donde se digitará la información
solicitada. Al pulsar el botón (submit) con la etiqueta Enviar, se enviará los datos al
servlet seleccionado para visualizarlos en la página Web.
Ejecutar el archivo jsp
Seleccione el archivo segundo.jsp, pulse el botón derecho del mouse y escoja la opción
Ejecutar archivo o simplemente pulse Mayúsculas + F6. Se visualizará la siguiente
figura:
Figura 5.21 Ejecución archivo segundo.jsp.
Sí se digitas los valores 21, 38 y 59 respectivamente y al pulsar el botón Enviar, se
observará la siguiente figura:
Figura 5.22 Ejecución servlet ServletUnSegundo.