Сохранение сеанса в 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() метод.

Другие вопросы по тегам