Instituto Politécnico Nacional
Escuela Superior de Cómputo
Ingeniería en Sistemas Computacionales
Unidad temática II
Java Servlets
M. en C. Sandra Ivette Bautista Rosales
M. en C. Sandra Ivette Bautista Rosales
Web Application Development
Introducción a los servlets
• Sabemos que una aplicación JEE es un conjunto de
componentes, cada uno de los cuales proporciona a
la aplicación un servicio determinado; por ejemplo,
utilizan un cliente ligero (también llamado
navegador), para interactuar con el usuario. Dicho
cliente contiene poca o ninguna lógica de
procesamiento, tarea que se deja para programas
que se ejecuten en el servidor, como por ejemplo
un servlet.
M. en C. Sandra Ivette Bautista Rosales 2
Web Application Development
¿Qué es un servlet?
• Es un programa que se ejecuta en el contenedor
web de un servidor de aplicaciones. Los clientes
pueden invocarlo utilizando el protocolo HTTP.
• Un servlet es cargado y ejecutado por un
contenedor web.
Petición
HTTP
Explorador Servlet
Respuesta
HTTP
Equipo Cliente Servidor de aplicaciones
M. en C. Sandra Ivette Bautista Rosales 3
Web Application Development
¿Qué hace un servlet?
• Un Servlet acepta peticiones de un cliente, procesa
la información relativa a la petición realizada por el
cliente y le devuelve a este los resultados que
podrán ser mostrados mediante paginas HTML.
• También puede comunicarse con otro servlet para
ayudarle en su trabajo, o bien facilitar el acceso a
bases de datos.
M. en C. Sandra Ivette Bautista Rosales 4
Web Application Development
Características de un servlet
• Al estar escritos en Java, son independientes de la
plataforma.
• Consumen menos recursos porque solo son
cargados la primera vez que se solicitan sus
servicios. Las siguientes peticiones crearán hilos de
ejecución.
• No requieren soporte para Java en el explorador del
cliente, ya que operan en el dominio del servidor y
envían los resultados en HTML. No obstante se
pueden utilizar otras interfaces de cliente como
otras aplicaiones Java.
M. en C. Sandra Ivette Bautista Rosales 5
Web Application Development
Características de un servlet
• Son seguros y portables debido:
• A que se ejecutan bajo la maquina vitual de Java.
• Al mecanismo de excepciones de Java
• Al uso del administrador de seguridad de Java (Java
Security Manager).
Java proporciona el soporte necesario para escribir
servlets a través de los paquetes:
• javax. Servlet
• [Link]
M. en C. Sandra Ivette Bautista Rosales 6
Web Application Development
Estructura de un servlet
• Desde el punto de vista de Java, un servlet no es
más que un objeto de alguna de las clases de la API
Java Servlet que implemente la interfaz Servlet,
como son GenericServlet y HttpServlet. Cuando se
implementa un servicio genérico, normalmente su
utiliza la clase GenericServlet. En cambio, la clase
HttpServlet es la idónea para servicios específicos
HTTP.
M. en C. Sandra Ivette Bautista Rosales 7
Web Application Development
Estructura de un servlet
• Comenzaremos con los objetos de una clase
derivada de HttpServlet los cuales son servlets que
responden a peticiones realizadas desde un cliente
HTML (son los más comunes).
Object
[Link]
[Link]
MiServlet
M. en C. Sandra Ivette Bautista Rosales 8
Web Application Development
Ciclo de vida de un servlet
• Un servlet es un objeto Java que recibe peticiones
de un cliente web y responde enviando datos de
vuelta al mismo. Este proceso puede
descomponerse en las siguientes acciones:
1. El cliente web (el usuario) realiza una petición
utilizando un explorador web.
2. La petición es trasladada al servidor web o
servidor de aplicaciones del que forma parte un
contenedor web especificado por la dirección
URL que escribimos en el explorador.
M. en C. Sandra Ivette Bautista Rosales 9
Web Application Development
Ciclo de vida de un servlet
3. El servidor recibe la petición, la analiza, se da
cuenta de que hay que ejecutar un servlet y
delega esta acción en el contenedor web.
4. El contenedor web ejecuta el servlet.
5. Los datos producidos que haya que enviar al
cliente como resultado de la petición se trasladan
en gorma de página web al servidor.
6. El servidor, envía la respuesta al cliente que
realizó la petición.
7. El cliente recoge la página web enviada por el
servidor y la muestra al usuario.
M. en C. Sandra Ivette Bautista Rosales 10
Web Application Development
¿Cómo se ejecuta el servlet?
Cliente
• Todo servlet debe
implementar la
interfaz Servlet ya que
es esta quien declara
los métodos que
definen el ciclo de vida
del mismo:
• init
• service
• destroy
Ciclo de vida de un servlet
M. en C. Sandra Ivette Bautista Rosales 11
Web Application Development
El método init
• Es invocado por el contenedor web para iniciar la
ejecución del servlet. Este método se ejecuta una
sola vez y tienen como misión iniciar las cariables y
recursos necesarios para la ejecución del servlet
(por ejemplo, conectar con la base de datos).
M. en C. Sandra Ivette Bautista Rosales 12
Web Application Development
El método service
• Se llama cada vez que el servidor recibe una
petición para el servlet. Este método puede recibir
varias llamadas simultaneas. Por cada una de ellas,
crea un nuevo hilo y examina el tipo de petición
HTTP (GET, POST, PUT, DELETE, TRACE, OPTIONS o
HEAD) con el fin de llamar al método adecuado
para atenderla; por ejemplo, doGet, doPost, doPut,
etc. El tipo de petición por omisión es GET.
M. en C. Sandra Ivette Bautista Rosales 13
Web Application Development
El método service
• Tiene dos parámetros de tipos HttpServletRequest
y HttpServletResponse, que son pasados al método
invocado. Por ejemplo, si el formulario HTML
ejecutado por el cliente realiza una petición de tipo
POST, se ejecutará el método doPost, y si la realiza
de tipo GET, se ejecutara el método doGet. Si la
ejecución no se desarrolla con éxito, se lanzara una
excepción de la clase ServletException o
IOException.
M. en C. Sandra Ivette Bautista Rosales 14
Web Application Development
El parámetro HttpServletRequest
• El objeto de la clase HttpServletRequest encapsula
los datos enviados por el cliente al servidor.
• El objeto de la clase HttpServletResponse
encapsula los datos que el servidor enviará al
cliente. Este objeto proporciona dos formas para
retornar los datos:
• Un objeto PrintWriter el cual permite devolver texto
(cadenas de caracteres).
• Un objeto ServletOutputStream el cual permite devolver
datos binarios (cadenas de bytes).
M. en C. Sandra Ivette Bautista Rosales 15
Web Application Development
El método destroy
• Es el ultimo método invocado justo antes de destruir el
servlet. Normalmente se utiliza para liberar los recursos
adquiridos; por ejemplo, borrar ficheros temporales.
• Finalmente, hay que recordar que un servlet http
puede responder a múltiples clientes simultáneamente.
Quiero esto decir que los métodos que hacen el trabajo
en el servlet para los clientes pueden requerir ser
sincronizados dependiendo de los recursos que tengan
que ser compartidos. Esto puede hacerse a través de
los métodos clásicos de sincronización de hilos.
M. en C. Sandra Ivette Bautista Rosales 16
Web Application Development
Ejemplo de servlet básico
• El servlet del ejemplo solo muestra el mensaje
“Hola mundo” en el explorador desde el que es
invocado. (revisar el código en el archivo
[Link] anexado a esta presentación).
M. en C. Sandra Ivette Bautista Rosales 17
Web Application Development
Ejecutando el servlet
“HolaMundo”
• Cuando el servlet recibe una petición de un cliente,
el servidor lo carga para su ejecución , instante en
el que se ejecuta el método init que lo inicia (por
omisión, el método init invocado es el de su
superclase). Cuando el método init finaliza, el
servlet está en condiciones de atender a las
peticiones de los clientes; para cada una de las
peticiones se ejecuta el método procesarPeticion,
que es invocado por los métodos doGet o doPost.
El servlet permanecerá cargado hasta que el
servidor decida destruirlo, instante en el que se
ejecutara el método destroy si fue implementado.
M. en C. Sandra Ivette Bautista Rosales 18
Web Application Development
Ejecutando el servlet
“HolaMundo”
• Este método almacena en el objeto out de la clase
PrintWriter los datos que el servlet “HolaMundo”
enviara al cliente que realizó la petición (el
explorador). Este objeto forma parte del objeto
response y es obtenido a través de su método
getWriter. Los fatos de almacenan en out utilizando
su método println.
• Los datos almacenados se corresponden con una
página HTML, la que será enviada al explorador
para su correcta visualización.
M. en C. Sandra Ivette Bautista Rosales 19
Web Application Development
Ejecutando el servlet
“HolaMundo”
• Cabe destacar que se necesita enviar otra
información del protocolo HTTP, como las
cabeceras de respuesta generadas por el servidor
(lo mismo en la petición; el cliente envía datos más
las cabeceras de petición generadas por él).
• Las cabeceras de respuesta incluyen una línea
como la siguiente:
Content-type: text/html
M. en C. Sandra Ivette Bautista Rosales 20
Web Application Development
Ejecutando el servlet
“HolaMundo”
Content-type: text/html
• Esta línea identifica el tipo del documento; en este
caso se trata de un documento HTML. Cuando el
cliente reciba esta información sabrá cómo
interpretar el tipo de documento que tiene que
visualizar. Para establecer este valor, el método
procesarPeticion utiliza el método setContentType
del objeto response.
[Link]("text/html");
M. en C. Sandra Ivette Bautista Rosales 21
Web Application Development
Ejecutando el servlet
“HolaMundo”
• Una vez escrito el servlet, los pasos a seguir para
ver el resultado que produce serían los siguientes:
• Compilarlo
• Instanciarlo en un servidor
• Invocarlo para su ejecución desde un explorador
• Para ejecutar un servlet necesitamos los paquetes
Java SE y ya sea Apache Tomcat, GlassFish o Payara
instalados (Para este ejemplo usaremos Apache
Tomcat).
M. en C. Sandra Ivette Bautista Rosales 22
Web Application Development
Ejecutando el servlet
“HolaMundo”
1. Abrimos una ventana del sistema para poder
ejecutar órdenes en línea (en Windows cmd).
2. Cambiamos al directorio donde se encuentra
nuestro archivo “[Link]”:
cd C:\java\web\Ejemplo1
3. Compilamos el servlet para obtener el fichero
“[Link]”:
javac [Link]
M. en C. Sandra Ivette Bautista Rosales 23
Web Application Development
Ejecutando el servlet
“HolaMundo”
4. Para instalar la aplicación en el servidor hay que
crear una carpeta en:
“<TOMCAT_HOME>\webapps\”
• Añadimos el fichero .class resultante de compilar
nuestro servlet a la carpeta de nuestro servidor de
aplicaciones:
“<TOMCAT_HOME>\webapps\carpetaAp\WEB-INF\classes”
• Donde “carpetaAp” corresponde a la carpeta que hemos
creado para almacenar la aplicación web; por ejemplo,
“holamundo”.
M. en C. Sandra Ivette Bautista Rosales 24
Web Application Development
Ejecutando el servlet
“HolaMundo”
5. Describimos el servlet en un archivo “[Link]”.
Este archivo recibe el nombre de descriptor de
despliegue e incluirá la descripción del servlet: el
nombre, la clase y otra información necesaria
para su ejecución. Una vez creado el archivo
“[Link]” lo agregaremos en la dirección
siguiente:
“<TOMCAT_HOME>\webapps\carpetaAp\WEB-INF\[Link]”
M. en C. Sandra Ivette Bautista Rosales 25
Web Application Development
Archivo [Link] para nuestro
servlet “HolaMundo”
M. en C. Sandra Ivette Bautista Rosales 26
Web Application Development
Ejecutando el servlet
“HolaMundo”
• La raíz de la aplicación web de la que forma parte
[Link] viene dada por :
[Link]
• Por lo tanto tenemos lo siguiente:
[Link]
[Link]
C:\Tomcat 9.0\webapps\holamundo\WEB-INF\classes
M. en C. Sandra Ivette Bautista Rosales 27
Web Application Development
Ejecutando el servlet
“HolaMundo”
6. Iniciamos el servidor; Podemos comprobar que el
servidor esta iniciado entrando al navegador e
insertando la dirección “[Link]
(donde PORT es el puerto en el cual se configuro
en un inicio) y nos debe mostrar la página de
inicio de Tomcat.
7. Ejecutamos el servlet escribiendo el URL
siguiente:
[Link]
[Link]
M. en C. Sandra Ivette Bautista Rosales 28
Web Application Development
Ejecutando el servlet
“HolaMundo”
• Los servlets, además de generar páginas HTML,
pueden utilizar toda la potencia del lenguaje Java
para realizar cualquier proceso que se requiera.
M. en C. Sandra Ivette Bautista Rosales 29
Web Application Development
Invocar el servlet desde una
página HTML
• Para ejecutar un servlet desde una pagina web
vamos a basarnos en la estructura siguiente:
“<TOMCAT_HOME>\webapps\holamundo\WEB-INF\classes"
[Link]
[Link]
[Link]
• Crearemos un archivo “[Link]”
M. en C. Sandra Ivette Bautista Rosales 30
Web Application Development
Invocar el servlet desde una
página HTML
• El código HTML almacenado en [Link] deberá
incluir una de las dos líneas siguientes:
<a href=“[Link]
Ejecutar servlet
</a>
<a href=“HolaMundo”>
Ejecutar servlet
</a>
M. en C. Sandra Ivette Bautista Rosales 31
Web Application Development
Archivo [Link] para nuestro
servlet “HolaMundo”
M. en C. Sandra Ivette Bautista Rosales 32
Web Application Development
Invocar el servlet desde una
página HTML
• Nótese que la segunda opción no depende de la
dirección del servidor (siempre que el servlet este
declarado correctamente en el [Link]).
<a href=“HolaMundo”>
Ejecutar servlet
</a>
M. en C. Sandra Ivette Bautista Rosales 33
Web Application Development
Invocar el servlet desde una
página HTML
• Para ejecutar el servlet a través del archivo
[Link] basta con escribir uno de los URL
siguientes:
[Link]
[Link]
• Cuando no se especifica el nombre de la página
HTML a la que se desea acceder, el servidor de
aplicaciones busca una de las predeterminadas; las
más comunes son [Link], [Link] e [Link]
(esto esta especificado en los archivos de
configuración del servidor)
M. en C. Sandra Ivette Bautista Rosales 34
Web Application Development
Invocar el servlet desde una
página HTML
M. en C. Sandra Ivette Bautista Rosales 35
Web Application Development
Procesamiento de Formularios
• Los clientes web pueden mostrar formularios que
permitan solicitar datos a los usuarios, que serán
enviados al servidor para, por ejemplo ser
almacenados en una base de datos para
posteriores peticiones, para otros procesos, o bien
para dar al usuario una respuesta ajustada a la
petición.
M. en C. Sandra Ivette Bautista Rosales 36
Web Application Development
Procesamiento de Formularios
M. en C. Sandra Ivette Bautista Rosales 37
Web Application Development
Procesamiento de Formularios
• El atributo method de la etiqueta form indica la
forma en la que los datos del formulario serán
enviados; los valores posibles son get y post. Su
otro atributo action especifica la acción a realizar
por el servidor especificado.
• Cuando intentamos ejecutar el servlet escribiendo
su dirección URL en el explorador la petición se
realiza empleando, por omisión, el método HTTP
GET. No obstante, no tiene mucho sentido invocar
directamente al servlet desde el explorador porque
los datos a enviar tienen que ser introducidos a
través del formulario.
M. en C. Sandra Ivette Bautista Rosales 38
Web Application Development
Tipos de peticiones
• El método service de HttpServlet se llama cada vez
que el servidor recibe una petición para el servlet;
este método examina el tipo de petición HTTP (GET,
POST, PUT, DELETE, TRACE, OPTIONS o HEAD) con el
fin de llamar al método adecuado para atenderla.
• Comúnmente se utilizan los métodos doGet y
doPost.
M. en C. Sandra Ivette Bautista Rosales 39
Web Application Development
Petición HTTP GET
• Se utiliza un
formulario HTML
para recopilar la
entrada del usuario.
La entrada del
usuario se envía con
mayor frecuencia a
un servidor para su
procesamiento.
M. en C. Sandra Ivette Bautista Rosales 40
Web Application Development
Formulario “[Link]”
M. en C. Sandra Ivette Bautista Rosales 41
Web Application Development
Petición HTTP GET
• Cuando el usuario envié los datos del formulario, el
navegador abrirá una conexión HTTP al puerto
establecido del servidor (en este ejemplo seria el
puerto 8080 de la maquina localhost).
• Cuando el tipo de petición HTTP es GET, los datos
del formulario son enviados al servidor a
continuación de la dirección URL especificada por
el atributo action de form.
M. en C. Sandra Ivette Bautista Rosales 42
Web Application Development
Petición HTTP GET
• En la URL generada los parámetros y sus calores
están compuesto por caracteres ASCII y son
colocados después del símbolo “?” y separados por
el símbolo “&”.
[Link]
mbre=Sandra&ap1=Bautista&boleta=b1234
56&carrera=4&direccion=Av.+Juan+de+Dios
+B%C3%A1tiz+S%2FN%2C+Nueva+Industrial
+Vallejo%2C+Gustavo+A.+Madero
M. en C. Sandra Ivette Bautista Rosales 43
Web Application Development
Petición HTTP GET
[Link]
1=Bautista&boleta=b123456&carrera=4&direccion=Av.+Juan
+de+Dios+B%C3%A1tiz+S%2FN%2C+Nueva+Industrial+Vallej
o%2C+Gustavo+A.+Madero
M. en C. Sandra Ivette Bautista Rosales 44
Web Application Development
Petición HTTP GET
• Con el tipo de petición HTTP GET, la información del
formulario se envía añadiéndola al URL indicado
por action. Al estar en ASCII es totalmente legible,
esto no es un modo seguro ya que puede ser
utilizada malintencionadamente como destino de
un enlace.
• El servlet usado para el ejemplo anterior es el de la
diapositiva siguiente.
M. en C. Sandra Ivette Bautista Rosales 45
Web Application Development
Servlet “[Link]”
M. en C. Sandra Ivette Bautista Rosales 46
Web Application Development
Servlet “[Link]”
M. en C. Sandra Ivette Bautista Rosales 47
Web Application Development
Petición HTTP POST
• Cuando el tipo de petición HTTP es POST, los datos
son enviados al servidor en el cuerpo de la petición.
Es el método usual de enviar los datos de un
formulario.
• Con el tipo de petición HTTP POST, la información
del formulario se envía después del URL indicado
por action en el cuerpo de la petición, y el tamaño
de la información enviada no esta limitado.
M. en C. Sandra Ivette Bautista Rosales 48
Web Application Development
Leer datos enviados por un cliente
• Un servlet lee los datos enviados en la petición
realizada por un cliente mediante el método
getParameter del objeto HttpServletRequest que
los métodos doGet y doPost reciben como
parámetro.
• El método getParameter devuelve en un objeto de
tipo String el valor del parámetro especificado
como argumento. Los nombres de los parámetros
son sensibles a minúsculas y mayúsculas.
M. en C. Sandra Ivette Bautista Rosales 49
Web Application Development
Leer datos enviados por un cliente
• Cuando el usuario envía los datos del formulario al
servidor, con la ayuda del método getParameter
podemos obtener los valores de los parámetros del
formulario.
• En el ejemplo anterior “Registrar alumno” la
sentencia para devolver el nombre del alumno seria
la siguiente:
String valor = [Link](“profesor”);
• Si el cliente envía el parámetro sin asignarle un
valor, entonces getParameter devuelve una cadena
vacía; y si no envió el parámetro, devuelve null.
M. en C. Sandra Ivette Bautista Rosales 50
Web Application Development
Leer datos enviados por un cliente
• Para leer el conjunto de valores asignados a un
parámetro, se utiliza el método getParameterValues,
que devuelve una matriz de tipo String con todos los
valores del parámetro especificado como argumento;
si este no existe, devuelve null.
String[] valor = [Link](“parametro”);
for(int i = 0; i < [Link]; ++i)
[Link](valor[i]);
M. en C. Sandra Ivette Bautista Rosales 51
Web Application Development
Leer datos enviados por un cliente
• Para obtener los nombres de todos los parámetros,
disponemos del método getParameterNames, que
retorna una enumeración (objeto Enumeration) de
objetos String con los nombres de los parámetros.
• El siguiente segmento de código muestra los
nombres de los parámetros que han sido pasados
al servidor junto con sus valores:
M. en C. Sandra Ivette Bautista Rosales 52
Web Application Development
Leer datos enviados por un cliente
Enumeration nombresParams = [Link]();
while ([Link]())
{
String param = (String)[Link]();
String valor = [Link](param);
[Link](param + “: ” + valor);
}
• El método hasMoreElements de Enumeration
permite iterar mientras haya más elementos en la
enumeración. Llamadas sucesivas al método
nextElement de la misma clase van devolviendo el
siguiente elemento de la serie de datos.
M. en C. Sandra Ivette Bautista Rosales 53
Web Application Development
Descriptor de despliegue
• El descriptor de despliegue es un archivo de texto
en XML cuyo elementos describen cómo utilizar y
montar los componentes en un entorno específico.
También incluye información respecto a los
componentes que pueden especificar opciones no
contenidas en su propio código, tales como
parámetros de iniciación y opciones de seguridad.
• Para aplicaciones Java que se ejecutan en un
servidor de aplicaciones, este archivo recibe el
nombre de “[Link]” y se localiza en la carpeta
WEB-INF de la aplicación.
M. en C. Sandra Ivette Bautista Rosales 54
Web Application Development
Ejemplo archivo “[Link]”
M. en C. Sandra Ivette Bautista Rosales 55
Web Application Development
Descriptor de despliegue
• La etiqueta <display-name> especifica la
información que mostrará un gestor de aplicaciones
web para identificar esa aplicación.
• Las etiquetas <servlet> y </servlet> delimitan los
datos relativos al servlet.
• La etiqueta <servlet-name> especifica el nombre
que se utiliza para llamar al servlet y <servlet-class>
el nombre de la clase que define el servlet.
M. en C. Sandra Ivette Bautista Rosales 56
Web Application Development
Descriptor de despliegue
• Si la clase estuviera definida en un paquete, el
nombre de la clase debe incluir el paquete. Por
ejemplo:
<servlet-class>[Link]</servlet-class>
• La línea indica que la clase “Registro” está incluida
en la carpeta “registro” que es una sub carpeta de
“web” y esta a su vez de la carpeta “com”.
M. en C. Sandra Ivette Bautista Rosales 57
Web Application Development
Descriptor de despliegue
• Las etiquetas <url-pattern> especifica el patrón
utilizado para resolver los URL. La porción de URL
después de “[Link] es
comparada con el <url-pattern>, si coinciden el
servlet será invocado. Por ejemplo, si url-pattern es
“/ruta/*”, el servlet Registro podría ser invocado a
través de un URL como los siguientes:
<form action=“[Link]
<form action=“[Link]
<form action=“[Link]
M. en C. Sandra Ivette Bautista Rosales 58
Web Application Development
Descriptor de despliegue
• La etiqueta <welcome-file> especifica el archivo
HTML o JSP que se utilizará por omisión para
arrancar el servlet. Por lo tanto para mostrar el
formulario bastara con escribir en el explorador el
URL siguiente:
[Link]
M. en C. Sandra Ivette Bautista Rosales 59
Web Application Development