Сохранение сеанса в Java с помощью sendredirect
Я создаю приложение для входа в JAVA. Я делаю презентацию в JSP и всю логику (соединение с базой данных) в сервлете [это не правильный подход, я знаю это]. Я проверяю имя пользователя Пароль в Servlet, а затем создаю переменную сеанса. и добавить сессию, как это
sess.setAttribute("username",oName);
Затем я перенаправляю пользователя на его домашнюю страницу, скажем student.jsp
response.sendRedirect("student.jsp");
Он удаляет переменную сеанса. Мне нужен способ сохранить переменную сеанса и перейти к student.jsp. Я пытался использовать перенаправление, но это не сработало.
RequestDispatcher dispatcher =
getServletContext()
.getRequestDispatcher("/student.jsp");
if (dispatcher != null) {
dispatcher.forward(request, response);
}
Он пересылает запрос, но адрес страницы не меняется на student.jsp, что не очень хорошо. Любая помощь в этом отношении будет оценена Спасибо
3 ответа
Чтобы перенаправленный запрос мог вернуться и присоединиться к тому же сеансу, ему нужен идентификатор сеанса, обычно содержащийся в файле cookie JSESSIONID (или другого имени) или в URL-адресе в качестве параметра.
Этот файл cookie или параметр URL должен быть добавлен контейнером сервлета, и вам не нужно добавлять его самостоятельно.
Если вы не видите файл cookie в своем браузере и не присоединяете JSESSIONID к URL-адресу, он создает новый сеанс с каждым запросом, а не присоединяется к одному и тому же сеансу.
Попробуй отредактировать свой кот context.xml
подать и заменить <Context>
тег к <Context useHttpOnly="false">
, это помогло мне.
Некоторые браузеры, такие как Chromium, например, не разрешают файлы cookie с локального хоста или IP-адресов, поэтому сеанс не может быть сохранен и изменяется при каждом обновлении. Это можно легко проверить с помощью инструментов разработчика браузера, которые показывают все файлы cookie запроса.
Для разработки настройте свою рабочую станцию на преобразование более серьезного имени (например, host.kitty.com) в localhosts. В Linux просто добавьте запись в /etc/hosts.
Использовать RequestDispatcher
и установите свою переменную username, используя request.setAttribute()
, В этом случае диспетчер не будет создавать новый запрос, но тот же запрос будет перенаправлен с использованием forward()
метод.