Sunteți pe pagina 1din 41

Servlets

Servlets, I
• Objetos java, componentes web contenidas
en un servidor (contenedor de servlets) que
los reutiliza, que reciben peticiones
mediante una URL y generan respuestas
• Mantienen información mediante cookies
HTTP, objetos de sesión y de aplicación y
reescritura de la URL
• Normalmente generan código HTML
Servlets, II
• Los servlets no son aplicaciones, sino
partes de aplicaciones que gestionan
información que puede tener un contexto
más amplio que el del código escrito por el
desarrollador (contexto de sesión o de
aplicación).
• Los servlets proporcionan medios para
almacenar información válida en los
contextos de sesión y de aplicación y para
acceder a ella.
Contenedores: Optimizaciones
• Los contenedores no crean y destruyen
objetos constantemente, sino que los
reaprovechan mediante pools o caches.
– Los contenedores se pueden configurar
especificando el número de items en caches
y pools de objetos almacenados para su
reutilización
• Tecnologías previas, como CGI, crean un
proceso por cada solicitud
Procesamiento de una petición http
• URL de la petición:
http://serverId/applId/servletPath?params
• Servidor: (crea objetos si hace falta)
– Asocia applId/servletPath a objeto Servlet
– Prepara objetos request y response
– Llama al método doGet(req, resp) o
doPost(req, resp) del Servlet
• resp escribe en su Writer
• Envía el texto acumulado en el Writer
Procesamiento de la información
en una petición http
• Las cuestiones marcadas en rojo tienen que
ser programadas (en Java o mediante
fichero de configuración)
• Los parámetros de la petición están
disponibles en el objeto HttpServletRequest.
• Otros datos como la dirección del cliente
(remoteAddr) y la URL de la petición
(requestURL) también.
Servlets, III
• Corresponden a una subclase de
HttpServlet
• Su fichero compilado se guarda en un
subdirectorio WEB-INF/class
• Métodos esenciales:
– doGet(request, response)
– doPost(request, response)
– PrintWriter response.getWriter()
– String request.getParameter(String)
Servlets, IV
• Los atributos no estáticos de una subclase
de HttpServlet no tienen utilidad en
general.
• Puede ser útil definir métodos específicos
de la subclase, llamados por doGet o
doPost.
Servlets, IV

HttpServlet

request response

(parámetros) remoteAddr
requestURL writer
Ejemplo: SimpleServlet.zip, I
public class SimpleServlet extends HttpServlet {
protected void doGet (HttpServletRequest request,
HttpServletResponse response) throws Exception {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html> <head><title>Simple</title></head>");
out.println("<body><h1>Hello, “ +
request.getRemoteAddr () +
“.</h1> </body> </html>”);
out.close();
}
}
Ejemplo: SimpleServlet, II
• Ejecución: http://localhost:8080/Simple/
– Hello, 127.0.0.1.
• Ficheros relevantes:
web.xml + SimpleServlet.java
• Configuración (web.xml):
– Entrada: SimpleServlet
Desarrollo y despliegue de
aplicaciones web
• Complejidad: árbol de directorios
• Fases:
– Compilación  .class
– Construcción  .war, .ear, …
– Despliegue  aplicación/módulo en servidor
Despliegue y pliegue de
aplicaciones web
• Despliegue: alternativas
– Copiar fichero .war en
<JEE_HOME>/domains/domain1/autodeploy
– Ejecución de un objetivo Ant (script, build.xml)
– Ejecutar deploy (o run)desde NetBeans
• Pliegue
– asadmin undeploy <nombre_contexto>
– http://localhost:4848/asadmin ->
Aplicaciones Web -> Anular implementación
ANT
• Script: build.xml
• Objetivos (Compilar, desplegar, …)
– Pueden estar satisfechos
– Pueden depender de otros objetivos
– Pueden utilizar variables
• ant deploy
NetBeans
• Proyecto (módulo)
– Categoría: Java Web, Web Application
– Nombre (context path)
– Servidor (GlassFish 3)
– Versión Java EE: 6
• Acciones: Build (compila y genera *.war), Deploy
(despliega), Run, Generate JavaDoc, … (usan
fichero Ant generado automáticamente)
• Crea fichero build.xml y directorio de
configuración nbproject
Configuración de módulos web
• Los Servlets se crean y destruyen por
iniciativa del contenedor web, que también
activa sus métodos.
• Un fichero de configuración permite
especificar estos procesos.
• El fichero web.xml contiene información
utilizada por el servidor de aplicaciones y
el contenedor web en su funcionamiento.
Información de configuración de
módulos web
• Inicialización de parámetros de la
aplicación
• Lista de servlets y otras componentes
• Inicialización de parámetros de las
componentes
• Asociación de URLs a componentes
Estructura básica de fichero de
configuración Web.xml
// <web-app …>
• Título // <display-name>
• Servlets: // <servlet>
– Nombre // <servlet-name>
– Clase // <servlet-class>
– URLs (plantillas) // <servlet-mapping>
// <servlet-name>
// <url-pattern>
Ejemplo de fichero de
configuración web.xml
<?xml version=… ?>
<web-app version=…>
<servlet>
<servlet-name>Simple</servlet-name>
<servlet-class>servlets.Simple</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Simple</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
Ejercicios
• [NombreYClub] Desarrollar una aplicación
web que incluya la página HTML del
ejercicio STATIC así como un servlet que
conteste a la URL
UUU:8080/NombreYClub?nombre=XXX&club=YYY
con una página que diga
“Hola XXX, Viva el YYY!”
Ejercicios, II
• [SERV1] Escribir una aplicación web que
complete el ejemplo visto como sigue:
– El servlet SimpleServlet saluda al usuario
utilizando su IP y utiliza un formulario para
pedirle el nombre
– El servlet adicional NameServlet saluda al
usuario utilizando su nombre
• [SERV2] Aplicación web con un servlet que
evalúa operaciones numéricas (sumas,
restas, productos y divisiones)
Ejercicios, III
• [SERV3] Aplicación web con un servlet
que pide un número y se llama a sí mismo
de nuevo. Además, el servlet muestra la
suma de las cantidades introducidas hasta
el momento por todos los usuarios.
Recordatorio
• Los servlets no son aplicaciones, sino
partes de aplicaciones con información
que puede tener un contexto más amplio
que el del código escrito por el
desarrollador (contexto de sesión o de
aplicación).
• Los servlets proporcionan medios para
almacenar información válida en los
contextos de sesión y de aplicación y para
acceder a ella.
Contextos
• Aplicación: javax.servlet.ServletContext
HttpServlet.getServletContext()
• Sesión: javax.servlet.http.HttpSession
HttpServletRequest.getSession()
HttpServletRequest.getSession(t)
• Petición: javax.servlet.HttpServletRequest
Contextos, II
• Los contextos son objetos que pueden guardar
información en atributos (un mapa de
asociación) mediante los métodos
Object getAttribute(String)
void setAttribute(String, Object)
• El contexto de aplicación se pierde si el servidor
se apaga. Hay mecanismos para guardarlos y
cargarlos automáticamente, basados en
eventos. Se pueden definir para eventos más
generales.
Ejercicios
• [SERVCONT1] Aplicación web que pide una
lista de números y muestra la suma de ellos
pidiendo a la vez otra lista, así como la suma de
todos los que se han introducido en la misma
sesión y de los que se han introducido desde
que se arrancó la aplicación.
• [SERVCONT2] (Voluntario) Aplicación web que
permite guardar dos listas de objetos: una que
se mantiene y se puede modificar durante una
sesión y otra común que se mantiene y se
puede modificar en cualquier momento y por
cualquier usuario.
Ejercicios, II
• [SERVEMAILS] (Voluntario) Aplicación web
con tres funcionalidades accesibles a
través de URLs diferentes: añadir
personas y direcciones de correo
electrónico a una lista común, ver la lista
de personas y correos electrónicos y pedir
la dirección de correo electrónico
correspondiente a un nombre.
Servlets, III

Servlet

Request Response ServletContext

(atributos)
(parámetros) RemoteAddr (atributos) (parámetros)
Session
RequestURL PrintWriter RequestDispatcher
EncodeURL
(atributos) forward(…) include(…)
Invocación de otros recursos
• ServletContext.getRequestDispatcher(String url)
[Prepara un recurso de la aplicación para su
utilización subsiguiente en la sesión]
• RequestDispatcher.forward(request, response)
[Reenvía la solicitud. Antes de escribir en el
PrintWriter de la respuesta]
• RequestDispatcher.include(request, response)
[Solicita la respuesta y la añade a la propia]
• HttpServletResponse.sendRedirect(“String url”)
[Reenvia la solicitud a un recurso externo]
Ejercicios
• [SERVRED] Aplicación web que pide una
URL y si es de la UAM la muestra y si no,
no.
• [SERVFILTER] (Voluntario) Aplicación web
que permite gestionar un filtro de acceso a
dominios de Internet.
Eventos en el ciclo de vida de
Servlets
• Cada vez que se crea o se destruye un contexto
(ServletContext, HttpSession o ServletRequest)
o se modifica uno de sus atributos, se emite un
evento que reciben los objetos (listeners)
registrados para ello, ejecutando acciones
especificadas en el programa.
• Por ejemplo, un listener puede hacer que al
crearse una sesión se cree una conexión a una
base de datos y que todo cambio en un atributo
se traslade a ella.
• Los mecanismos anteriores se configuran
mediante el fichero web.xml.
Eventos en el ciclo de vida de
Servlets, II

ServletContext Session Request


Iniciación, destrucción: Creación, invalidación, Comienzo de
ServletContextListener activación, pasivación: procesamiento:
ServletContextEvent HttpSessionListener ServletRequestListener
HttpSessionEvent ServletRequestEvent
HttpSessionActivationListener
Creación, borrado o Creación, borrado o Creación, borrado o
cambio de atributo: cambio de atributo: cambio de atributo:
ServiceContextAttributeListener HttpSessionAttributeListener ServletRequestAttributeListener
ServiceContextAttributeEvent HttpSessionAttributeBindingEvent ServletRequestAttributeEvent
Eventos en el ciclo de vida de
Servlets, III
<listener>
<description>MyKewlListener</description>
<display-name>MyKewlListener</display-name>
<listener-class>
com.examscam.web.listener.MyKewlListener
</listener-class>
</listener>
.
Filtros
• Permiten hacer acciones sobre la petición
(Request) y la respuesta previas al tratamiento
de la petición.
• Ejemplo: Mantenimiento de un contador de
usuarios e inserción de su valor como atributo
de la respuesta.
• Pueden servir para varios servlets
simultáneamente.
• Los ficheros se configuran mediante el fichero
web.xml.
Configuración de filtros
<filter>
<filter-name>Timer</filter-name>
<filter-class>kief.FD.TimerF</filter-class>
<description> Servlet timing. </description>
</filter>
<filter-mapping>
<filter-name>Timer</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Otros aspectos configurables en
aplicaciones web (web.xml)
• Escuchas (Listeners)
• Filtros (Filters)
• Duración de la sesión
• Parámetros de contexto
• Páginas de inicio y error
• Páginas JSP
• Lista de páginas JSP especiales
• Propiedades de grupos de páginas JSP
• Recursos (bases de datos, enlaces, …)
• Seguridad
Ejercicios opcionales
• [BLINDAEMAIL] Blindar la aplicación de
gestión de contactos comunes por correo
electrónico contra fallos en el servidor.
• [ SERVUTILS] Extraer clases útiles para
otros programas.
Concurrencia: Precauciones
• Si un servidor recibe varias peticiones
dirigidas a la misma URL que corresponde
a un servlet, el contenedor de servlets
ejecuta en hilos diferentes el método
doGet o doPost sobre el mismo objeto de
la clase correspondiente en vez de crear
una instancia para cada petición.
• Como consecuencia de lo anterior, los
atributos de la clase del servlet son
compartidos por todas las peticiones.
Concurrencia: Precauciones, II
• Cualquier variable o recurso cuyo estado
tenga un ámbito más amplio para la
aplicación que la ejecución del método
doGet o doPost tiene que ser sincronizada
explícitamente
• Ejemplo: Saldo de una cuenta corriente
(independientemente de que se guarde en
el servlet o en una base de datos)
• No es recomendable usar atributos de
servlets para información actualizable
Control de la sincronización en
Java
• Todo objeto tiene un candado. Si un bloque de
código se declara como sincronizado con x, se
ejecuta cuando x deja de estar bloqueado y lo
bloquea durante su ejecución.
• Ejemplo:
f();
synchronized(x) {
g();
}
h();
Ejercicios
• [SERVCONC1] Reescribir la aplicación web
del ejercicio [SERVCONT1] para evitar
problemas de concurrencia.
• [SERVCONC2] (Voluntario) Reescribir la
aplicación web del ejercicio [SERVCONT2]
para evitar problemas de concurrencia.
• [SERVCONC3] (Voluntario) Reescribir la
aplicación web del ejercicio [SERVEMAILS]
para evitar problemas de concurrencia.

S-ar putea să vă placă și