Как вы храните объекты Java в HttpSession?
Итак, я пытаюсь получить сервлет, чтобы добавить объект Java в сеанс пользователя, когда запрашивается этот сервлет. Но после того, как сервлет перенаправляется на следующую страницу, и я пытаюсь восстановить объект, я получаю вместо него объект null
.
Вот что я делаю, чтобы добавить объект к HttpSession (в сервлет):
request.setAttribute("object", obj);
Затем я пытаюсь восстановить его (в JSP):
Object obj = request.getAttribute("object");
Итак, как бы получить obj, чтобы он не был нулевым?
Обновление:
Я также пробовал это ни с чем:
HttpSession session = request.getSession();
session.setAttribute("object", obj);
со следующим в JSP:
Object obj = request.getSession().getAttribute("object");
Оба способа все равно возвращают null.
Ответы
Ответ 1
Вы не добавляете объект в сеанс, вместо этого вы добавляете его в запрос.
Что вам нужно:
HttpSession session = request.getSession();
session.setAttribute("MySessionVariable", param);
В Servlets у вас есть 4 области, где вы можете хранить данные.
- Применение
- Session
- Запрос
- Страница
Убедитесь, что вы их понимаете. Подробнее смотрите здесь
Ответ 2
Добавьте его в сеанс, а не в запрос.
HttpSession session = request.getSession();
session.setAttribute("object", object);
Кроме того, не используйте сценарии в JSP. Вместо этого используйте EL; для доступа к object
вам понадобится ${object}
.
Основной особенностью технологии JSP версии 2.0 является поддержка языка выражений (EL). Язык выражения позволяет легко получить доступ к данным приложения, хранящимся в компонентах JavaBeans. Например, язык выражения JSP позволяет автору страницы обращаться к bean с использованием простого синтаксиса, такого как ${name}
для простой переменной или ${name.foo.bar}
для вложенного свойства.
Ответ 3
Здесь вы можете сделать это, используя HttpRequest
или HttpSession
. И подумайте, что ваша проблема находится в JSP.
Если вы собираетесь использовать внутренний сервлет, выполните следующие действия:
Object obj = new Object();
session.setAttribute("object", obj);
или
HttpSession session = request.getSession();
Object obj = new Object();
session.setAttribute("object", obj);
и после установки вашего атрибута с помощью запроса или сеанса используйте следующие для доступа к нему в JSP,
<%= request.getAttribute("object")%>
или
<%= session.getAttribute("object")%>
Так кажется, ваша проблема в JSP.
Если вы хотите использовать скриптлеты, это должно быть следующим образом:
<%
Object obj = request.getSession().getAttribute("object");
out.print(obj);
%>
Или можно использовать выражения следующим образом:
<%= session.getAttribute("object")%>
или может использовать EL следующим образом:
${object}
или ${sessionScope.object}
Ответ 4
Объект запроса не является сеансом.
Вы хотите использовать объект сеанса для хранения. Сеанс добавлен в запрос и был ли вы хотите сохранить данные по запросам. Сессию можно получить из
HttpSession session = request.getSession(true);
Затем вы можете использовать setAttribute или getAttribute в сеансе.
Более подробное руководство по сессиям jsp: http://courses.coreservlets.com/Course-Materials/pdf/csajsp2/08-Session-Tracking.pdf