Está en la página 1de 17

5.

6 Ejemplos prcticos de servlets


Los ejercicios que se trabajarn en este captulo se realizan en el entorno NetBeans
7.1.1 IDE, utilizando como contenedor de servlets Tomcat 7.0.22.0 y se visualizarn
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 peticin 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 omitirn algunos pasos.
Crear proyecto Java Web
Desde el entorno de desarrollo de NetBeans pulse Archivo, luego Proyecto Nuevo o
simplemente pulse Ctrl + Maysculas + N, se visualizar la siguiente ventana:

Figura 5.3 Ventana para crear un nuevo proyecto.
En Categoras seleccione Java Web, en Proyectos la opcin Web Application y pulse
el botn Siguiente, para visualizar la siguiente figura:
Figura 5.4 Nombre y localizacin del nuevo proyecto Web.
Como Project Name escriba Servlets, en Project Location se puede cambiar la
localizacin (ruta) de ste, adems deje habilitado el cuadro de verificacin Set as Main
Project y pulse el botn Siguiente para ver la ventana del servidor y ajustes.
Figura 5.4 Servidor y ajustes del proyecto Web.
En el campo Server seleccione la versin de Apache Tomcat (en el ejemplo es Apache
Tomcat 7.0.22.0), en Java EE Versin escoja JEE 1.4 y pulse el botn Siguiente para
ver la ventana de marcos de trabajo.
Figura 5.5 Ventana Frameworks.
Pulse el botn 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 configuracin:
Web Pages: se encontrar lo siguiente:
o Carpeta META-INF: la cual contiene el archivo de configuracin de
metadatos context.xml.
o Carpeta WEB-INF: contiene el archivo web.xml (descriptor de
despliegue).
o Arhivo index.jsp: este archivo es de extensin jsp y ser el punto de
partida de la aplicacin para ejecutar el servlet, el cual contiene la
estructura bsica de un pgina HTML(al dar doble clic sobre ste se
visualizar el cdigo 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 aplicacin y los
servlets o clases.
Libraries: permite adicionar archivos necesarios para el buen funcionamiento
de la aplicacin (driver de bases de datos, archivos para graficar, etc.).
Configuration Files: contiene archivo de configuracin.
Crear el servlet
Seleccione la carpeta Source Packages y pulse el botn derecho del mouse y elija
Nuevo y despus 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 ubicacin del servlet.
Figura 5.8 Nombre y ubicacin del Servlet.

Como Nombre de Clase escriba PrimerServlet y s se cre un paquete para el servlet
escrbalo o seleccinelo en la opcin Paquete. S pulsa el botn Siguiente se
visualizar la ventana Configuracin para implementar el Servlet.
Figura 5.9 Ventana Configure Servlet Deployment.


Al pulsar el botn Terminar, en la parte izquierda se observar el archivo creado y en
la parte derecha el cdigo generado por NetBeans IDE para el nuevo servlet.

Figura 5.10 Ventana con el cdigo generado para el nuevo servlet.




Escribir cdigo
En el editor de cdigo, elimine el cdigo 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();
}
}
Anlisis del cdigo
Se define la clase PrimerServlet, la cual hereda los mtodos de la clase HttpServlet,
por otro se implementa el mtodo doGet, que responde a las peticiones get. El mtodo
doGet recibe dos argumentos: un objeto HttpServletRequest (peticion) y un objeto
HttpServletResponse (respuesta), donde el objeto HttpServletRequest representa la
peticin del cliente y el objeto HttpServletResponse representa la respuesta del
servidor al cliente. Si un mtodo doGet no puede manejar la peticin del cliente, lanza
una excepcin de tipo javax.servlet.ServletException, y si encuentra un error durante
el procesamiento de los flujos de informacin (leer del cliente o escribir al cliente),
lanza una excepcin de tipo javax.io.IOException. Utilizando el mtodo
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, adems con el mtodo 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
mtodo println y se cierra el flujo de salida y se enva la informacin al cliente.

Observacin: en el cdigo se espera que se aprecien errores, porque NetBeans IDE no
reconoce automticamente las clases utilizadas. Para importar los paquetes necesarios,
d clic derecho sobre el mouse y seleccione la opcin reparar importaciones (fix
imports) o simplemente pulse Ctrl + Maysculas +I.
Modificar el archivo index.jsp
Busque el archivo index.jsp en la carpeta Web Pages, d doble clic sobre ste para
visualizar el cdigo generado y reemplcelo 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 botn para llamar el servlet
<input type ="submit" value="obtener documento HTML"/>
</label>
</p>
</form>
</body>
</html>
Anlisis del cdigo
Se define la estructura bsica 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, adems un ttulo
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 enva una
peticin get al servidor, la cual llama al mtodo doGet del servlet. Con la etiqueta <p>
se define un prrafo y en la etiqueta <label> se escribe el texto que ira dentro del
prrafo. La sentencia submit de tipo input crea un botn y value permite colocarle un
texto al botn creado.
Ejecutar el archivo jsp
Seleccione el archivo index.jsp, pulse el botn derecho del mouse y escoja la opcin
Ejecutar archivo o simplemente pulse Maysculas + F6. Se visualizar la siguiente
figura:

Figura 5.11 Ejecucin index.jsp.

Al pulsar el botn 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 peticin get
de HTTP y deber permitir capturar los nombres, la edad, la principal aficin, el
deporte favorito, el lugar de nacimiento y la edad actual e imprimir dicha
informacin.
Nota: a partir de este ejemplo se omitirn algunos pasos que se realizaron en el ejemplo
anterior.
Cdigo servlets
Cree un nuevo serlvet llamado SaludoServlet y reemplace el cdigo 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 ms 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();
}
}


Anlisis del cdigo
Se implementa el mtodo doGet, que responde a las peticiones get, el cual recibe dos
argumentos: un objeto HttpServletRequest (peticin del cliente) llamado peticion y
un objeto HttpServletResponse (respuesta del servidor) llamado respuesta. Por otro
lado, se definen seis variables de tipo String (nombre, profesin, aficin, deporte,
nacimiento, edad) a las cuales se les asignan los valores que contienen la URL (pgina
HTML o JSP), por intermedio del mtodo getParameter (permite obtener el valor de
un parmetro 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 mtodo println y por ltimo se cierra el flujo de
salida por medio del mtodo close().

Observacin: en el cdigo se espera que se aprecien errores, porque NetBeans IDE no
reconoce automticamente las clases utilizadas. Para importar los paquetes necesarios,
d clic derecho sobre el mouse y seleccione la opcin reparar importaciones (fix
imports) o simplemente pulse Ctrl + Maysculas +I.
Crear el archivo saludo.jsp
Seleccione la carpeta Web Pages y pulse el botn derecho del mouse y elija Nuevo y
despus JSP, como se aprecia en la siguiente figura:

Figura 5.13 Crear un archivo JSP.

Al dar clic sobre la opcin JSP, se visualizar la ventana para dar Nombre y la
ubicacin al nuevo JSP, como se aprecia en la siguiente figura:

Figura 5.14 Nombre y ubicacin del archivo JSP.
Como Nombre de Archivo (File Name) escriba saludo. Al pulsar el botn Terminar
se visualizar la ventana con el cdigo HTML generado.
Figura 5.15 Nombre y ubicacin del archivo JSP.
Modificar el archivo saludo.jsp
Seleccione el cdigo generado en el archivo saludo.jsp y reemplcelo 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 informacin</h1>
<h3><label>
Escriba sus nombres : <input type ="text" name ="nombres"/>
Cul es su profesin: <input type ="text" name ="profesion"/><br/><br/>
Su aficin 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 informacin"/>
</label></h3>
</form>
</body>
</html>
Anlisis del cdigo
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 enva
una peticin get al servidor, la cual llama al mtodo doGet del servlet. Utilizando el
elemento text perteneciente al atributo type del elemento interactivo input se crean
cajas de texto, donde se digitar la informacin solicitada. Al pulsar el botn (submit)
con la etiqueta Enviar la informacin, se enviar los datos al servlet seleccionado para
visualizarlos en la pgina Web.
Ejecutar el archivo jsp
Seleccione el archivo saludo.jsp, pulse el botn derecho del mouse y escoja la opcin
Ejecutar archivo o simplemente pulse Maysculas + F6. Se visualizar la siguiente
figura:

Figura 5.16 Ejecucin archivo saludo.jsp.


S se digita la informacin que se aprecia en la siguiente figura:

Figura 5.17 Informacin de la pgina Web saludo.jsp.
Y la pulsar el botn Enviar informacin, se observar la siguiente figura:
Figura 5.18 Llamado al servlet de Java (SaludoServlet).

c) Disear programa que utilice servlet con la peticin post de http, donde se pueda
capturar el valor de un prstamo, seleccionar el plazo en meses del prstamo y digitar
la tasa de inters e imprimir las cuotas mensuales del prstamo.
Cdigo servlets
Cree un nuevo serlvet llamado ServletPrestamo y reemplace el cdigo 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>Simulacin 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();
}
}


Anlisis del cdigo
Se definen las siguientes variables: double (tasa, cuota, inters), 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 inters del
prstamo; a la variable cuota se le asigna el valor de la cuota mensual y con <td> se
imprime por columna el saldo del prstamo (valor), el inters 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.

Observacin: en el cdigo se espera que se aprecien errores, porque NetBeans IDE no
reconoce automticamente las clases utilizadas. Para importar los paquetes necesarios,
d clic derecho sobre el mouse y seleccione la opcin reparar importaciones (fix
imports) o simplemente pulse Ctrl + Maysculas +I.
Crear archivo .jsp
Cree un nuevo archivo JSP llamado prestamo.jsp. El cdigo generado en el archivo
reemplcelo 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">Simulacin cuota crdito</h1>
<form action ="ServletPrestamo" method ="post">
<p><label>Valor del prstamo:
<input type ="text" name ="valor"/><br/><br/>
Plazo en meses del prstamo:
<select name="plazo" size="1">
<option>12</option>
<option>24</option>
<option>36</option>
<option>48</option>
</select> <br/><br/>
Tasa de interes del prstamo:
<input type ="text" name ="tasa"/><br/><br/>
<input type = "submit" value="Simular"/>
</p></label>
</form>
</body>
</html>
Anlisis del cdigo
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
enva una peticin post al servidor, la cual llama al mtodo 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 informacin solicitada y con la
etiqueta <select> se define una lista de opciones con diferentes plazos Al pulsar el
botn (submit) con la etiqueta Simular, se enviar los datos al servlet seleccionado
para visualizarlos en la pgina Web.
Ejecutar el archivo jsp
Seleccione el archivo prestamo.jsp, pulse el botn derecho del mouse y escoja la
opcin Ejecutar archivo o simplemente pulse Maysculas + F6. Se visualizar la
siguiente figura:

Figura 5.19 Ejecucin 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 botn Simular se obtendr la pgina Web que a
continuacin se presenta:
Figura 5.20 Ejecucin servlet ServletPrestamo.


d) Escribir un programa que utilice servlets con la peticin 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 despus. Se debe tener en cuenta que las horas estn 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
Cdigo servlets
Cree un nuevo serlvet llamado ServletUnSegundo y reemplace el cdigo 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 despus</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();
}
}
Anlisis del cdigo
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 mtodo
getParameter. Con una primera estructura If se evala 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 condicin se
le asigna a las variables el valor de cero (0). Si no se cumple la condicin 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 condicin 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 condicin se incrementar segundos en uno (+1). Al determinarse
los valores de horas, minutos, segundos se imprimir dichos valores en la pgina Web
correspondiente

Crear archivo .jsp
Cree un nuevo archivo JSP llamado segundo.jsp. El cdigo generado en el archivo
reemplcelo por el siguiente:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Servlet un segundo despus</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>
Anlisis del cdigo
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
enva una peticin post al servidor, la cual llama al mtodo 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 informacin
solicitada. Al pulsar el botn (submit) con la etiqueta Enviar, se enviar los datos al
servlet seleccionado para visualizarlos en la pgina Web.


Ejecutar el archivo jsp
Seleccione el archivo segundo.jsp, pulse el botn derecho del mouse y escoja la opcin
Ejecutar archivo o simplemente pulse Maysculas + F6. Se visualizar la siguiente
figura:

Figura 5.21 Ejecucin archivo segundo.jsp.


S se digitas los valores 21, 38 y 59 respectivamente y al pulsar el botn Enviar, se
observar la siguiente figura:

Figura 5.22 Ejecucin servlet ServletUnSegundo.