Подтвердить что ты не робот

Как вы храните объекты 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.

4b9b3361

Ответ 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