Documentos de Académico
Documentos de Profesional
Documentos de Cultura
(6)
(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
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.
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.
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.
http://es.wikipedia.org/wiki/Cookie
1.1.- Cookies:
https://addons.mozilla.org/
firecookie
cookie manager
1.1.- Cookies:
Sintaxis:
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.
La forma de implementar todo esto es relativamente simple gracias a la clase Cookie incluida
en el Servlet API.
http://download.oracle.com/javaee/5/api/index.html?javax/servlet/http/Cookie.html
Enviar cookie
Recoger cookies
Encontrar cookie
Obtener valor
Exemple5.java
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.
<<interface>> HttpSession
getAttribute(String)
getCreationTime()
getId()
getLastAccessedTime()
getMaxInactiveInterval()
getServletContext()
invalidate()
isNew()
removeAttribute()
setAtribute(String, Object)
setMaxInactiveInterval()
http://download.oracle.com/javaee/5/api/index.html?javax/servlet/http/HttpSession.html
Configurado en web.xml:
Recupera/crea sesión
Exemple6.java
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
response.encodeRedirectURL(request.getContextPath()+"/Exemple7")
Exemple7.java
23/05/2011 - Tecnocom: Servlets Java 16
D6
2.- Ejercicio (sesiones)
Ejercicio1:
Sino, mostrar:
Cuantas visitas lleva (haciendo uso de una cookie del cliente)
La fecha de su último acceso
La fecha de su primer acceso
Tipos de redirecciones:
1.- SendRedirect.
2.- RequestDispatcher.
3.- Servlet Mapping.
3.1.- SendRedirect:
2. El cliente hace otra petición usando la URL que era el valor de la cabecera ‘Location’ en la
respuesta que le llegó.
El request se pierde.
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 servlet delega la petición a otro recurso del servidor y él devuelve la respuesta al cliente.
<<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.
3.2.- RequestDispatcher:
Exemple9.java
23/05/2011 - Tecnocom: Servlets Java 21
D6
(V)
3.- Redirecciones
Exact Match
<url-pattern>/Prueba/EjemploPrueba</url-pattern>
Directory Match
<url-pattern>/Prueba/*</url-pattern>
Extension Match
<url-pattern>*.do</url-pattern>
<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
Ejercicio2:
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.
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).
API Filtros
<<interface>> Filter
init(FilterConfig)
doFilter(ServletRequest, ServletResponse, FilterChain)
destroy()
doFilter() Es llamado cada vez que el contenedor determina qué filtro debería aplicarse a la
petición actual.
http://download.oracle.com/javaee/5/api/index.html?javax/servlet/Filter.html
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>
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.
<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>
Ejemplo: Crear un filtro que indique si el parámetro “EUR” del conversor es par o impar.
Ejemplo:
Crear un filtro que indique si el parámetro “EUR” del conversor no indique si es par.
Exemple10Filtre.java
Ejercicio3:
Palíndromo o Capicua