Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor...

41
Servlets Roberto Moriyón

Transcript of Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor...

Page 1: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

Servlets

Roberto Moriyón

Page 2: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

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

Page 3: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

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.

Page 4: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

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

Page 5: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

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

Page 6: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

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.

Page 7: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

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)

Page 8: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

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.

Page 9: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

Servlets, IV

HttpServlet

request response

writerrequestURL

remoteAddr(parámetros)

Page 10: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

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(); }}

Page 11: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

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

Page 12: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

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

Page 13: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

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

Page 14: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

ANT

• Script: build.xml

• Objetivos (Compilar, desplegar, …)– Pueden estar satisfechos– Pueden depender de otros objetivos– Pueden utilizar variables

• ant deploy

Page 15: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

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

Page 16: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

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.

Page 17: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

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

Page 18: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

Estructura básica de fichero de configuración Web.xml

• Título• Servlets:

– Nombre– Clase– URLs (plantillas)

// <web-app …>

// <display-name>

// <servlet>

// <servlet-name>

// <servlet-class>

// <servlet-mapping>

// <servlet-name>

// <url-pattern>

Page 19: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

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>

Page 20: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

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!”

Page 21: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

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)

Page 22: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

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.

Page 23: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

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.

Page 24: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

Contextos

• Aplicación: javax.servlet.ServletContext

HttpServlet.getServletContext()

• Sesión: javax.servlet.http.HttpSession

HttpServletRequest.getSession()

HttpServletRequest.getSession(t)

• Petición: javax.servlet.HttpServletRequest

Page 25: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

Contextos, II

• Los contextos son objetos que pueden guardar información en atributos (un mapa de asociación) mediante los métodosObject 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.

Page 26: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

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.

Page 27: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

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.

Page 28: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

Servlets, III

Servlet

Request Response

SessionPrintWriter

(atributos)

(parámetros)

EncodeURL

RequestURL

RemoteAddr

ServletContext

(atributos)

RequestDispatcher

include(…)forward(…)

(atributos)(parámetros)

Page 29: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

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]

Page 30: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

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.

Page 31: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

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.

Page 32: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

Eventos en el ciclo de vida de Servlets, II

ServletContext Session Request

Iniciación, destrucción:ServletContextListenerServletContextEvent

Creación, invalidación, activación, pasivación:HttpSessionListenerHttpSessionEventHttpSessionActivationListener

Comienzo de procesamiento:ServletRequestListenerServletRequestEvent

Creación, borrado o cambio de atributo:ServiceContextAttributeListenerServiceContextAttributeEvent

Creación, borrado o cambio de atributo:HttpSessionAttributeListenerHttpSessionAttributeBindingEvent

Creación, borrado o cambio de atributo:ServletRequestAttributeListenerServletRequestAttributeEvent

Page 33: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

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

Page 34: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

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.

Page 35: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

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>

Page 36: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

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

Page 37: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

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.

Page 38: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

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.

Page 39: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

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

Page 40: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

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();

Page 41: Servlets Roberto Moriyón. Servlets, I Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben.

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.