Cursos subvencionados para trabajadores
Realiza el curso gratis a través de tu empresa.
Cursos SubvencionadosTu portal de
formación online
United States
En esta sección del tema se analizan los problemas asociados al acceso concurrente a variables de instancia definidas en servlets. La conclusión a la que se llegará será que no debe trabajarse con variables de instancia que almacenen datos que puedan ser modificados por las peticiones de los clientes
Se recuerda brevemente el esquema de funcionamiento de un servidor web que integra contenedor web cuando un cliente realiza una petición a un servlet:
El contenedor web crea un objeto de la clase del servlet y, mediante ese "único" objeto se gestionan todas las peticiones de los clientes usando para cada una de ellas un hilo distinto. Las variables de instancia definidas en la clase son compartidas por todos los hilos asociados a cada petición y podría darse el caso de que varios hilos accedieran a la misma simultáneamente provocando resultados no esperados.
Posibles soluciones:
Ejemplos: drivers de bases de datos, rutas de otros servlets que formen parte de la aplicación; en resumidas cuentas, datos fijos que comparten todas las peticiones.
Por ejemplo, drivers de BDs comunes a todas las peticiones.
Se va a realizar un ejemplo que ilustra el problema.
Se partirá del siguiente formulario:

Para ejecutar el servlet, http://www.myjavaserver.com/servlet/trilcejf.Color
El usuario escribirá su nombre y seleccionará un color. A continuación, pulsará Enviar y los datos serán capturados por un servlet de nombre trilcejf.ServletColor. El servlet, en base a esos datos, mostrará un página html con el color de fondo introducido cuyo contenido será el nombre y dicho color. Para provocar un funcionamiento incorrecto (muestra del html respuesta con un nombre no tecleado por el usuario y un color de fondo no seleccionado), sería necesario que varios usuarios realizaran accesos simultáneos al servlet.
Se creará una aplicación web con un directorio raíz asociado de nombre Color.
Estructura de directorios:

Descriptor de despliegue web.xml:

Código del servlet trilcejf.ServletColor:

| NOTA: el problema de acceso concurrente a las variables color y nombre por parte de los hilos asociados a las peticiones de clientes y los correspondientes resultados inesperados se soluciona sin más que declararlas locales en el método doGet(..) |
Copyright 2012© ADR Infor S.L. | Tel.: +34 941 250 116 · Fax: +34 941 236 805 · skype: adrformacion.com
Email |
Política de Privacidad |
Aviso Legal |
Área Privada