Я работаю над веб-приложением в WinXP, Eclipse Indigo и веб-плагине Google.
У меня есть простая форма, которая принимает значение от пользователя (например, по электронной почте), передает его сервлету с именем SignIn.java
который обрабатывает его и сохраняет значение электронной почты в сеансе.Код SignIn
очень прост, вот что его doGet
в основном делает:
String email = req.getParameter("email"); //getting the parameter from html form
...
...
HttpSession session = req.getSession(); //create a new session
session.setAttribute("email", email);
Пока все хорошо, я убедился, что значения не равны null
на данный момент.Теперь возникает проблема, я хочу перенаправить на другой сервлет (ShowOnline.java
), который должен сделать еще немного обработки.Когда я пишу
resp.sendRedirect(resp.encodeRedirectURL("/ShowOnlineServlet"));
ShowOnline
получает null
значения сеанса (тот же атрибут электронной почты, который я сохранил секунду назад, теперь null
)
Когда я пишу
getServletConfig().getServletContext().getRequestDispatcher("/ShowOnlineServlet");
все в порядке, атрибут электронной почты ранее не null
!
Что происходит?sendRedirect()
просто заставляет ваш браузер отправлять новый запрос, это не должно влиять на объем сеанса.Я проверил файлы cookie, и они в порядке (это точно тот же сеанс, что и раньше, поскольку это первый и единственный сеанс, который создает мое веб-приложение, и, кроме того, я даже потрудился и проверил идентификаторы sesison, и они одинаковы в обоих запросах).
Почему существует разница между sendRedirect()
и forward()
?Простым решением было бы использовать forward()
, но я хочу докопаться до этого, прежде чем просто отпустить, я думаю, что для меня важно понять, что произошло.Я не уверен, что мне нравится идея не знать, что происходит с такими базовыми понятиями (все мое веб-приложение очень простое и базовое на данный момент, так как я начинающий).
Любые мысли, идеи или предложениябудет тепло приветствоваться!