Estoy trabajando en una aplicación web en WinXP, Eclipse Indigo y Google web plugin.Servlet's sendRedirect() mata los atributos de mi sesión
Tengo un formulario simple que toma un valor del usuario (por ejemplo, correo electrónico), lo pasa a un servlet llamado SignIn.java
que lo procesa y guarda el valor del correo electrónico en la sesión. SignIn
El código es muy simple, esto es lo que hace la mayoría de su doGet
:
String email = req.getParameter("email"); //getting the parameter from html form
...
...
HttpSession session = req.getSession(); //create a new session
session.setAttribute("email", email);
Hasta aquí todo bien, He verificado que los valores no son null
en este punto. Ahora viene el problema, quiero redirigir a otro servlet (ShowOnline.java
) que necesita hacer un poco más de procesamiento. Cuando escribo
resp.sendRedirect(resp.encodeRedirectURL("/ShowOnlineServlet"));
ShowOnline
obtiene null
valores de sesión (el mismo correo electrónico atributo ahorré un segundo antes es ahora null
)
cuando escribo
getServletConfig().getServletContext().getRequestDispatcher("/ShowOnlineServlet");
todo está bien, el atributo de correo electrónico desde antes no es null
!
¿Qué está pasando? sendRedirect()
solo hace que su navegador envíe una nueva solicitud, no debería afectar el alcance de la sesión. He revisado las cookies y están bien (seguramente es la misma sesión de antes, ya que es la primera y única sesión que crea mi aplicación web y, además, incluso me molesté y verifiqué las ID de sesison y son las mismas en ambas solicitudes) .
¿Por qué habría una diferencia entre sendRedirect()
y forward()
? La solución más fácil sería usar forward()
, pero quiero llegar al fondo de esto antes de dejarlo ir, creo que es importante para mí entender lo que sucedió. No estoy seguro de que me guste la idea de no saber lo que está pasando en conceptos tan básicos (toda mi aplicación web es muy simple y básica en este punto, ya que soy un principiante).
¡Cualquier idea o sugerencia sería bienvenida!
supongo que podría ser posible en el momento de usar adelante en lugar de sendRedirect pero creo que más adelante me gustaría utilizar sendRedirect sin temor mis atributos de la sesión iría nula sin razón aparente. –
@home: OP confirmó que la ID de sesión es la misma antes y después. – BalusC
¿Qué sucede cuando no envía el redireccionamiento y va manualmente al/ShowOnlineServlet desde el navegador? –