La Web del Programador: Comunidad de Programadores
 
    Pregunta:  15640 - PERDIDA DE SESION EN JSP
Autor:  Juan Jiménez - Arellano
Hola grupo, os planteo mi problema:

Mi entorno es Tomcat 3.2.1, IIS 4.0 sobre Nt 4.0 y navegador IE 5.0 ó superior.

A ver si alguien tiene un entorno parecido y me puede echar un cable.

Cada vez que llamo a un objeto bean ya creado (scope=session) dentro de un jsp se crea una sesion nueva, con lo que se pierde el objeto ya creado y se crea uno nuevo, con lo que pierdo todas sus variables.

Con navegador Netscape Communicator 4.7 sin problemas, la sesion se mantiene (como debe ser). Si uso cualquier otro servidor (IPlanet, JWSDK) tambien funciona sin problemas tanto en Netscape como en Explorer.

Por fuerza (cliente) tengo que usar el entorno descrito.

No sé si es problema de configuración del tomcat o del IIS

Gracias de antemano.

  Respuesta:  yo mismo
Hola:

Seguramente te crees la session asi:

HttpSession sesion=request.getSession();

¿Que pasa? Pues que al hacerlo asi, te crea una sesion nueva sin importarle si tenias una ya creada y, perdiendo asi todo lo que hubieses metido en la sesion (incluido tu bean).
Hazlo asi:

HttpSession sesion=request.getSession(true);

De esta forma, si comprueba si hay o no una sesion creada y no la machaca.

Para meter objetos en la sesion usa el metodo sesion.setAttribute(String key, Object objeto) y luego podras recuperar el objeto en tu jsp, Action o donde quieras con simple sesion.getAttibute(String key)
Si usas Struts y has definido bien tu bean en el struts-config, podras usar tu bean en el jsp poniendo esto:
<%@ page session="true"%>
para indicar que vas a usar la sesion y lo que tenga almacenado.
Puedes recuperar las cosas de la sesion como te he explicado antes, pero para un bean, es mas comodo con:
<jsp:useBean id="nombreBean" type="paqueteBean" scope="session"/>
y para mostrar el valor de una propiedad del bean:
<bean:write name="nombreBean" property="nombrePropiedad"/>

Un saludo

  Respuesta:  MeRLiN
El problema es general en Tomcat y si utilzas la vercion 5, no podras ni hacer tu objeto, para verciones anteriores lo que deves hacer es utilizar el objeto \"request\" (con ese nombre, es de tipo HttpServletRequest) y le pides la secion con el metodo getSession(), que te devuelve un objeto HttpSession del paquete Servlet.http