Está en la página 1de 33

Desarrollo servlets java

(6)

Manfran Llorach Cornelles: ManuelF.Llorach@tecnocom.es

(Mayo 2011)
Calendario del curso

MAYO 2011

2 3 4 5 6 7 8

9 10 11 12 13 14 15

16 17 18 19 20 21 22

23 24 25 26 27 28 29

30 31

D1: 04/05/2011 Introducción a los servlets


D2: 09/05/2011 JSPs
D3: 11/05/2011 JSPs
D4: 16/05/2011 JSPs
D5: 18/05/2011 Contexto / Eventos / Parámetros / Atributos
D6: 23/05/2011 Sesiones / Redirecciones / Filtros
D7: 25/05/2011 Inicialización / Errores / Ficheros de bienvenida
D8: 30/05/2011 Seguridad

23/05/2011 - Tecnocom: Servlets Java 2


D6
Índice

1. Sesiones
1. Cookies.
2. Seguimientos de sesiones (Session tracking).
3. Reescritura de URLs.
2. Ejercicio sesiones.
3. Redirecciones
1. sendRedirect
2. getRequestDispatch
3. Servlet Mapping
4. Ejercicio redirecciones.
5. Filtros.
6. Ejercicio filtros.

23/05/2011 - Tecnocom: Servlets Java 3


D6
(I)
1.- Sesiones

Una característica de los servlets:

Permiten la utilización de cookies y sesiones, de forma que se puede guardar


información específica acerca de un usuario determinado, personalizando de esta forma la
interacción cliente-servidor.

HTTP es un protocolo sin estado (no guarda ninguna información sobre conexiones anteriores).
Soluciones:
1. Cookies.
2. Seguimientos de sesiones (Session tracking).
3. Reescritura de URLs.

23/05/2011 - Tecnocom: Servlets Java 4


D6
(II)
1.- Sesiones

1.1.- Cookies:

Las cookies son pequeñas porciones datos que son almacenados localmente por el navegador en
forma de pequeños ficheros de texto.

Las cookies almacenan información sobre tí, como nombre de usuario o información de registro, o
preferencias de usuario, pero no espían.

Si tienes una cookie de un sitio web al que vas a menudo, la cookie recuerda cosas que harán tu
próxima visita a esa página un poco más fácil, e incluso hace que las páginas se carguen un poco
más rápido.

Los navegadores deben soportar:


 Un mínimo de 300 cookies de 4 kbytes cada una.
 Al menos 20 cookies por servidor o dominio.

Cada vez que el cliente envía información al servidor, incluye


en la petición HTTP las cookies que previamente haya guardado
provenientes de ese servidor.

http://es.wikipedia.org/wiki/Cookie

23/05/2011 - Tecnocom: Servlets Java 5


D6
(III)
1.- Sesiones

1.1.- Cookies:

https://addons.mozilla.org/

firecookie

cookie manager

23/05/2011 - Tecnocom: Servlets Java 6


D6
(IV)
1.- Sesiones

1.1.- Cookies:
Sintaxis:

nombre=valor; [expires=fecha; path=directorio; domain=nombreDeDominio; secure]

Descripción de los atributos:



Un par nombre = valor. Por ejemplo: usuari = 4288.

expires: Hasta cuándo será válida la cookie.

Debe ir en este formato: Wdy, DD-Mon-YYYY HH:MM:SS GMT.

Si no se dice nada, la cookie será eliminada al terminar la sesión (al cerrar la ventana actual del navegador).


path: El conjunto de directorios del servidor para los que es válida esta cookie (por omisión,
será el raíz “/”, es decir, todos)

domain: El servidor o nombre de dominio para el que es válida la cookie.

Una cookie sólo puede ser leída y modificada desde el servidor y directorio especificados en la cookie cuando
ésta fue creada.


Secure: Es booleano; si está definido (si aparece el atributo) deberá haber una segura (https)
para que la cookie sea enviada.

Lo único obligatorio es que tenga un nombre y un valor asociado; el resto de atributos son opcionales. Aunque también se
utiliza bastante el atributo expires.

23/05/2011 - Tecnocom: Servlets Java 7


D6
(V)
1.- Sesiones

1.1.- Cookies (servlets):

Las cookies son enviadas al servidor HTTP y no al servlet.

La forma de implementar todo esto es relativamente simple gracias a la clase Cookie incluida
en el Servlet API.

Para enviar una cookie es preciso:


1. Crear un objeto Cookie.
2. Establecer sus atributos.
3. Enviar la cookie.

Por otra parte, para obtener información de una cookie, es necesario:


1. Recoger todas las cookies de la petición del cliente.
2. Encontrar la cookie precisa.
3. Obtener el valor recogido en la misma.

http://download.oracle.com/javaee/5/api/index.html?javax/servlet/http/Cookie.html

23/05/2011 - Tecnocom: Servlets Java 8


D6
(VI)
1.- Sesiones

1.1.- Cookies (servlets):

Crear un objeto cookie


Establecer sus atributos

Enviar cookie

Recoger cookies

Encontrar cookie

Obtener valor

Exemple5.java

23/05/2011 - Tecnocom: Servlets Java 9


D6
(VII)
1.- Sesiones

1.2.- Seguimientos de sesiones (Session tracking):

Una sesión es una conexión continuada de un mismo browser a un servidor durante un tiempo
prefijado de tiempo. Este tiempo depende habitualmente del servidor.

A partir de la versión 2.1 del Servlet API puede establecerse mediante el método
setMaxInactiveInterval(int) de la interface HttpSession. Esta interface es la que proporciona
los métodos necesarios para mantener Sesiones.

Al igual que las cookies, las sesiones son compartidas por todos los servlets de un mismo
servidor. Por defecto se utilizan cookies de una forma implícita en el mantenimiento de sesiones.

Si el navegador no acepta cookies, habrá que emplearse las sesiones en conjunción con la
reescritura de URLs.

La forma de obtener una sesión es mediante el método getSession(boolean) de un objeto


HttpServletRequest. Si devuelve true se crea una sesión nueva si es necesario; si es false el
método devolverá la sesión actual.

23/05/2011 - Tecnocom: Servlets Java 10


D6
(VIII)
1.- Sesiones

1.2.- Seguimientos de sesiones (Session tracking):

<<interface>> HttpSession

getAttribute(String)
getCreationTime()
getId()
getLastAccessedTime()
getMaxInactiveInterval()
getServletContext()
invalidate()
isNew()
removeAttribute()
setAtribute(String, Object)
setMaxInactiveInterval()

23/05/2011 - Tecnocom: Servlets Java 11


D6
(IX)
1.- Sesiones

1.2.- Seguimientos de sesiones (Session tracking):

void setMaxInactiveInterval(int interval) : Establece el tiempo de validez de la sesión.

void invalidate() : Invalida la sesión, eliminando todos los atributos.

boolean isNew() : Devuelve true si el cliente no tenía abierta una sesión.

getAttribute(...) HttpSession sesion = request.getSession();


sesion.setAttribute("contador",new Integer(0))
setAttribute(...) sesion.getAttribute("contador")

Para crear sesiones:


(clase HttpSession) getSession()
(clase HttpSession) getSession(boolean create)

http://download.oracle.com/javaee/5/api/index.html?javax/servlet/http/HttpSession.html

23/05/2011 - Tecnocom: Servlets Java 12


D6
(X)
1.- Sesiones

1.2.- Seguimientos de sesiones (Session tracking):

Tiempo de vida de una sesión:

Manejado via API:

setMaxInactiveInterval(int interval): Establece el tiempo de validez de la sesión en segundos.

Configurado en web.xml:

23/05/2011 - Tecnocom: Servlets Java 13


D6
(XI)
1.- Sesiones

1.2.- Seguimientos de sesiones (Session tracking):

Recupera/crea sesión

Leer atributo de sesión

Escribir atributo de sesión

Establecer tiempo vida


sesión

Exemple6.java

23/05/2011 - Tecnocom: Servlets Java 14


D6
(XII)
1.- Sesiones

1.3.- Reescritura de URLs:

¿Si el cliente NO ACEPTA cookies?

Solución: URLrewriting (reescritura de URLs)

Añadir el session ID al final de las URL:

response.encodeURL(request.getContextPath()+"/Exemple7")

El identificador de sesión se envía de nuevo con la petición como información extra al final de la URL
de la petición:

http://localhost:8080/projecteServlets/Exemple7;jsessionid=4FACA988599B9DC3BF8037FEF3E004B7

También funciona con sendRedirect:

response.encodeRedirectURL(request.getContextPath()+"/Exemple7")

23/05/2011 - Tecnocom: Servlets Java 15


D6
(XIII)
1.- Sesiones

1.3.- Reescritura de URLs:

Exemple7.java
23/05/2011 - Tecnocom: Servlets Java 16
D6
2.- Ejercicio (sesiones)

Ejercicio1:

Indicar si es la primera visita desde un determinado PC/terminal.

Sino, mostrar:
Cuantas visitas lleva (haciendo uso de una cookie del cliente)
La fecha de su último acceso
La fecha de su primer acceso

23/05/2011 - Tecnocom: Servlets Java 17


D6
(I)
3.- Redirecciones

Tipos de redirecciones:

1.- SendRedirect.
2.- RequestDispatcher.
3.- Servlet Mapping.

3.1.- SendRedirect:

El cliente hace todo el trabajo de redirección:

1. El servlet redirecciona la petición y la incluye en su respuesta (código de estado 3xx y la


cabecera ‘Location’ con el valor de la URL).

2. El cliente hace otra petición usando la URL que era el valor de la cabecera ‘Location’ en la
respuesta que le llegó.

3. La URL en el navegador cambia.

El request se pierde.

23/05/2011 - Tecnocom: Servlets Java 18


D6
(II)
3.- Redirecciones

3.1.- SendRedirect:

http://localhost:8080/projecteServlets/Exemple8
http://localhost:8080/projecteServlets/Exemple8?numero=100

Exemple8.java
23/05/2011 - Tecnocom: Servlets Java 19
D6
(III)
3.- Redirecciones

3.2.- RequestDispatcher:

El servidor hace todo el trabajo de redirección.

El servlet delega la petición a otro recurso del servidor y él devuelve la respuesta al cliente.

La URL en el navegador no cambia.

Para ello hace uso de la interfaz RequestDispatcher.

<<interface>> RequestDispatcher

forward(ServletRequest, ServletResponse)
include(ServletRequest, ServletResponse)

forward: Redirecciona una petición desde un servlet a otro recurso (servlet, JSP, HTML …)
disponible en el servidor.

include: Incluye el contenido de un recurso (servlet, JSP,HTML …) en la respuesta.

23/05/2011 - Tecnocom: Servlets Java 20


D6
(IV)
3.- Redirecciones

3.2.- RequestDispatcher:

Exemple9.java
23/05/2011 - Tecnocom: Servlets Java 21
D6
(V)
3.- Redirecciones

3.3.- Servlet Mapping:

Otra forma de redirigir las peticiones es vía mapping del DD (web.xml).

La redirección se decide a partir del nombre de la url “entrante”:


<servlet>
<description></description>
<display-name>Exemple9</display-name>
<servlet-name>Exemple9</servlet-name>
<servlet-class>es.tecnocom.d6Exemples.Exemple9</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Exemple9</servlet-name>
<url-pattern>/Exemple9</url-pattern>
</servlet-mapping>

Tipos de patrones de url:

Exact Match
<url-pattern>/Prueba/EjemploPrueba</url-pattern>
Directory Match
<url-pattern>/Prueba/*</url-pattern>
Extension Match
<url-pattern>*.do</url-pattern>

23/05/2011 - Tecnocom: Servlets Java 22


D6
(VI)
3.- Redirecciones

3.3.- Servlet Mapping:

Reglas para la elección del mapeo:


1.- Exact Match
2.- Directory Match (Si hay múltiples matchings, se elige el mapeo más largo)
3.- Extension Match

<servlet-mapping> http://localhost:8080/MapTest/blue.do
<servlet-name>Servlet1</servlet-name> Servlet1
<url-pattern>*.do</url-pattern> http://localhost:8080/MapTest/fooStuff/bar
</servlet-mapping> Servlet2
http://localhost:8080/MapTest/fooStuff/bar/blue.do
<servlet-mapping> Servlet3
<servlet-name>Servlet2</servlet-name> http://localhost:8080/MapTest/fooStuff/blue.do
<url-pattern>/fooStuff/bar</url-pattern> Servlet3
</servlet-mapping> http://localhost:8080/MapTest/fred/blue.do
Servlet1
<servlet-mapping> http://localhost:8080/MapTest/fooStuff
<servlet-name>Servlet3</servlet-name> Servlet3
<url-pattern>/fooStuff/*</url-pattern> http://localhost:8080/MapTest/fooStuff/bar/foo.fo
</servlet-mapping> Servlet3
http://localhost:8080/MapTest/fred/blue.fo
404 NOT FOUND

23/05/2011 - Tecnocom: Servlets Java 23


D6
4.- Ejercicio (redirecciones)

Ejercicio2:

Adaptar el ejemplo 8 para que haga las redirecciones via RequestDispatcher.

Adaptar el ejemplo 9 para que haga las redirecciones via sendRedirect.

23/05/2011 - Tecnocom: Servlets Java 24


D6
(I)
5.- Filtros

Componentes Java similares a los servlets que se utilizan para interceptar y procesar
peticiones antes de que sean enviadas al servlet o procesar respuestas.

Cliente Servidor

Petición

Navegador Servlet

Respuesta

Filtros

Las principales tareas que un filtro puede realizar son las siguientes:

Autenticación.

Auditar acciones.

Conversión de caracteres, tipos MIME.

Conversión de imágenes.

Comprimir/descomprimir datos.

Criptografía.

Transformación de contenidos XML con XSLT.

Interactuar con recursos externos.

23/05/2011 - Tecnocom: Servlets Java 25


D6
(II)
5.- Filtros

Los filtros son similares a los servlets.

El contenedor conoce su API.

El contenedor gestiona su ciclo de vida:


init()
doFilter()
destroy()

Se declaran en el DD (web.xml).


Después del deployment de una aplicación web, el contenedor localiza los filtros en el DD.

Crea una instancia del filtro y llama al método init() pasándole un objeto FilterConfig.

El objeto FilterConfig proporciona la referencia al ServletContext y un conjunto de
parámetros de inicio.

Cuando el contenedor recibe una petición, obtiene la primera instancia del filtro y llama al
método doFilter(), pasándole los objetos ServletRequest y ServletResponse además del
objeto FilterChain.

El objeto FilterChain sabe lo que va a pasar a continuación: si va otro filtro, un servlet …

A través de los filtros que introducimos en el DD, el contenedor crea un FilterChain (que
contiene la cadena de filtros que se van a aplicar).

23/05/2011 - Tecnocom: Servlets Java 26


D6
(III)
5.- Filtros

API Filtros

<<interface>> Filter

init(FilterConfig)
doFilter(ServletRequest, ServletResponse, FilterChain)
destroy()

init() Permite la inicialización del filtro.

doFilter() Es llamado cada vez que el contenedor determina qué filtro debería aplicarse a la
petición actual.

destroy() Se llama cuando el contenedor decide eliminar la instancia de un filtro.

<<interface>> FilterConfig <<interface>> FilterChain

getFilterName() doFilter(ServletRequest, ServletResponse)


getInitParameter(String)
getInitParameterNames()
getServletContext()

http://download.oracle.com/javaee/5/api/index.html?javax/servlet/Filter.html

23/05/2011 - Tecnocom: Servlets Java 27


D6
(IV)
5.- Filtros

Declaración de un filtro

<filter> web.xml
<display-name>Exemple10Filtre</display-name>
<filter-name>Exemple10Filtre</filter-name>
<filter-class>es.tecnocom.d6Exemples.Exemple10Filtre</filter-class>
</filter>

<filter-mapping>
<filter-name>Exemple10Filtre</filter-name>
<url-pattern>/Exemple10Filtre</url-pattern>
</filter-mapping>

<filter-mapping>
<filter-name>Exemple10Filtre</filter-name>
<servlet-name>Exemple10</servlet-name>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>

23/05/2011 - Tecnocom: Servlets Java 28


D6
(V)
5.- Filtros

Reglas mapeo de filtros:

Cuando más de un filtro está mapeado a un determinado recurso, el contenedor emplea las
siguientes reglas:

1. Todos los filtros con la URL que hace match se localizan primero y se introducen en la cadena,
en el orden en el que fueron declarados en el DD.

2. Todos los filtros con el servlet que hace match se introducen a continuación en la cadena,
también en el orden en el que fueron declarados.

Declaración de un mapeo de un filtro para el request-dispatcher:

REQUEST (por defecto)


Sólo cuando la petición viene directamente desde el cliente
FORWARD
Sólo cuando la petición ha sido dirigida a un recurso
INCLUDE
Sólo cuando la petición esta siendo procesada por un recurso que ha sido incluido.
ERROR
Sólo cuando la petición esta siendo procesada por un manejador de error.

23/05/2011 - Tecnocom: Servlets Java 29


D6
(VI)
5.- Filtros

Reglas mapeo de filtros:

<filter-mapping> /Recipes/HopsReport.do
<filter-name>Filter1</filter-name>
Filter1, Filter5
<url-pattern>/Recipes/*</url-pattern>
</filter-mapping>
/Recipes/HopsList.do
<filter-mapping> Filter1, Filter5, Filter2
<filter-name>Filter2</filter-name>
<servlet-name>/Recipes/HopsList.do</servlet-name>
/Recipes/Modify/ModRecipes.do
</filter-mapping>
Filter1, Filter5, Filter4
<filter-mapping>
<filter-name>Filter3</filter-name> /HopsList.do
<url-pattern>/Recipes/Add/*</url-pattern> Filter5
</filter-mapping>

<filter-mapping> /Recipes/Add/AddRecipes.do
<filter-name>Filter4</filter-name> Filter1, Filter3, Filter5
<servlet-name>/Recipes/Modify/ModRecipes.do</servlet-name>
</filter-mapping>

<filter-mapping>
<filter-name>Filter5</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

23/05/2011 - Tecnocom: Servlets Java 30


D6
(VII)
5.- Filtros

Ejemplo: Crear un filtro que indique si el parámetro “EUR” del conversor es par o impar.

23/05/2011 - Tecnocom: Servlets Java 31


D6
(VIII)
5.- Filtros

Ejemplo:

Crear un filtro que indique si el parámetro “EUR” del conversor no indique si es par.

Exemple10Filtre.java

23/05/2011 - Tecnocom: Servlets Java 32


D6
6.- Ejercicio (filtros)

Ejercicio3:

Palíndromo o Capicua

La comprobación de palíndromo la hará un filtro de petición.

23/05/2011 - Tecnocom: Servlets Java 33

También podría gustarte