Cursos subvencionados para trabajadores
Realiza el curso gratis a través de tu empresa.
Cursos SubvencionadosEn el esquema de trabajo típico de los servlets, un servlet recibe una petición http, ejecuta código ubicado en los métodos de servicio para generar la respuesta html y la envía al cliente.
En muchas ocasiones, los servlets no generan la respuesta sino que actúan como gestores de la petición mediante la ejecución de código de control con instrucciones if condicionales. En función del bloque condicional que se ejecute se delega la generación de respuesta a otros recursos tales como páginas html, páginas jsp u otros servlets.
La interface javax.servlet.RequestDispatcher contiene dos métodos que permiten delegar la generación de respuestas a otros recursos.
Explicación detallada de ambos métodos:
Para poder aplicar estos métodos es necesario obtener un objeto de la interface RequestDispatcher.
Se consigue de dos posibles formas:
Para poder aplicar estos métodos es necesario obtener un objeto de la interface RequestDispatcher.
Se consigue de dos posibles formas:
- RequestDispatcher getRequestDispatcher(String rutaRecursoAlQueSeDelega): se emplea, sobre todo, cuando se desea delegar en ficheros html o jsps. También sirve para servlets.
- RequestDispatcher getNamedDispatcher(String nombreServletAlQueSeDelegaEnDescriptor): habitualmente usado para delegar en otro servlet. Debe especificarse el nombre o alias que se le ha asignado al servlet en el descriptor de despliegue de la aplicación
Para poder aplicar estos métodos es necesario obtener un objeto de la interface ServletContext. Antes de explicar cómo se obtiene conviene explicar el significado de contexto en el ámbito de las aplicaciones web. Se explica en el siguiente apartado
- RequestDispatcher getRequestDispatcher(String rutaRecursoAlQueSeDelega): se emplea, sobre todo, cuando se desea delegar en ficheros html o jsps
Inscríbete ahora y accede a 3 unidades gratis
Evalua el curso de Java Servidor y accede a las 3 unidades gratis con acceso completo al aula virtual donde podrás disfrutar de la inestimable ayuda del tutor y una gran variedad de recursos como videotutoriales, ejercicios resueltos, foros, enlaces, bibliografía, etc....
Un contexto está asociado a un objeto ServletContext, que está contenido en un objeto ServletConfig. Es utilizado para compartir datos entre todos los servlets y jsps de una aplicación. Proporciona al programador:
¿Cómo se obtiene el contexto de una aplicación web?
Mediante el método ServletContext getServletContext() de la interface ServletConfig o mediante getServletContext () de GenericServlet. Se obtiene un contexto vacío, todavía no contiene elementos.
¿Cómo se agregan atributos al contexto de una aplicación web?
Mediante el método de la interface javax.servlet.ServletContext void setAttribute(String clave, Object valor). Se asigna una clave y un valor asociado a la misma. La clave debe ser una String y el valor un Object.
¿Cómo se obtienen atributos del contexto de una aplicación web?
Mediante el método de esta misma interface Object getAttribute(String clave).
|
NOTA: etiquetas típicas empleadas en el descriptor de despliegue y
relacionadas con el contexto son: <context-param> <param-name> y <param-value>
|
Ejemplo: se creará una aplicación web con un directorio raíz asociado de nombre RequestDispatcherEjemplo. Su estructura de directorios será

Descarga del war de la aplicación:
http://teleformacion.fer.es/general/prt/c/javaser/3/RequestDispatcherEjemplo.war
A continuación, ubicarlo en tomcat_home\webapps y levantar Tomcat.
Para ver el código de sus componentes, se recuerda el proceso a seguir:
Siendo JavaServidor el espacio de trabajo actual
Inicio de la aplicación:
http://localhost:8080/RequestDispatcherEjemplo/fecha
Ahora conviene realizar el ejercicio 2 del tema
|
NOTA IMPORTANTE:
Además de en el contexto de una aplicación web, existen otros objetos utilizados para compartir datos entre todos los servlets de una aplicación. Ordenados de menor a mayor alcance son los siguientes:
Los datos suelen ser específicos de cada petición y persistentes hasta que la sesión se mantenga activa (el tiempo de vida de una sesión la controla el programador mediante métodos adecuados de HttpSession. Se estudiarán más adelante).
Los datos suelen ser comunes a todas las peticiones y accesibles desde todos los servlets y JSPs de la aplicación. Se mantienen hasta que se elimine el contexto (ocurre cuando la aplicación queda fuera de servicio, por ejemplo, al tumbar el servidor, sobrepasar un tiempo límite de inactividad del servlet, o si el servidor está trabajando con insuficiente memoria. |
¿Qué criterios deben aplicarse para saber cúal usar?
Básicamente dos:
Por regla general, se empleará aquel objeto cuyo alcance sea menor (request).
Esquema de las características asociadas a los objetos empleados para compartir datos y recursos entre componentes de una aplicación web:

¿Qué significa que un objeto sea thread-safe o de hilo seguro?
Que sólo un hilo va a poder trabajar con dicho objeto. Si otro hilo intenta acceder al mismo, éste debe esperar a que finalice la ejecución del hilo que está trabajando en la actualidad con el objeto.
¿Qué debe hacerse para convertir un objeto de hilo no seguro en seguro?
Programarlo con bloques sincronizados.
Ejemplo:

De este modo se asegura que el atributo de contexto “saludo” es de hilo seguro y que la salida provocada por la ejecución de este bloque será Hola.
Si, desde otro servlet de la aplicación, un hilo asociado a otro cliente intentara ejecutar estas líneas
![]()
debería esperar a que finalizara la ejecución del hilo que actualmente está ejecutando el bloque sincronizado para poder machacar el atributo “saludo”.
Resumen:
Los atributos de tipo request y las variables locales de los métodos de servicio son thread-safe o de hilo seguro.
Las variables de instancia, los atributos de contexto y los atributos de sesión no son thread-safe. Para que los atributos sean, deben programarse dentro de un bloque sincronizado.
Eventos relacionados con los objetos contexto de aplicación, petición y sesión

Elemento a agregar en el descriptor de despliegue, colgando directamente de <web-app>:
<listener>
<listener-class>nombreClase</listener-class>
</listener>
Inscríbete ahora y accede a 3 unidades gratis
Evalua el curso de Java Servidor y accede a las 3 unidades gratis con acceso completo al aula virtual donde podrás disfrutar de la inestimable ayuda del tutor y una gran variedad de recursos como videotutoriales, ejercicios resueltos, foros, enlaces, bibliografía, etc....
Copyright 2008© ADRInfor S.L. Logroño | Tel: 941250116 Fax: 941236805 | Email | Politica de Privacidad