Как вы храните объекты Java в HttpSession? - PullRequest
34 голосов
/ 23 апреля 2011

Поэтому я пытаюсь получить сервлет для добавления объекта Java в сеанс пользователя, когда запрашивается этот сервлет. Но после того, как сервлет перенаправляет на следующую страницу, и я пытаюсь получить объект, я получаю объект null.

Вот что я делаю, чтобы добавить объект в HttpSession (в сервлете):

request.setAttribute("object", obj);

Затем я пытаюсь получить его (в JSP):

 Object obj = request.getAttribute("object");

Итак, как бы мне получить объект не равным нулю?

Обновление: Я также попробовал это ни с чем:

HttpSession session = request.getSession();
session.setAttribute("object", obj);

со следующим в JSP:

 Object obj = request.getSession().getAttribute("object");

Оба способа по-прежнему возвращают ноль.

Ответы [ 4 ]

46 голосов
/ 23 апреля 2011

Вы не добавляете объект в сеанс, вместо этого вы добавляете его в запрос.
Что вам нужно:

HttpSession session = request.getSession();
session.setAttribute("MySessionVariable", param);

В сервлетах у вас есть 4 области действия, где вы можете хранить данные.

  1. Приложение
  2. Сессия
  3. Запрос
  4. Страница

Убедитесь, что вы это понимаете.Подробнее смотрите здесь 1018 *

12 голосов
/ 23 апреля 2011

Добавьте его в сеанс , а не в запрос .

HttpSession session = request.getSession();
session.setAttribute("object", object);

Кроме того, не используйте скриптлеты в JSP. Вместо этого используйте EL ; для доступа к object все, что вам нужно, это ${object}.

Основной особенностью технологии JSP версии 2.0 является поддержка языка выражений (EL). Язык выражений позволяет легко получить доступ к данным приложения, хранящимся в компонентах JavaBeans. Например, язык выражений JSP позволяет автору страницы обращаться к бину с использованием простого синтаксиса, такого как ${name} для простой переменной или ${name.foo.bar} для вложенного свойства.

5 голосов
/ 24 апреля 2011

Здесь вы можете сделать это, используя 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}

1 голос
/ 24 апреля 2011

Объект запроса не является сеансом.

Вы хотите использовать объект сеанса для хранения.Сеанс добавляется в запрос и вы хотите сохранить данные в запросах.Сеанс может быть получен из

HttpSession session = request.getSession(true);

Затем вы можете использовать setAttribute или getAttribute для сеанса.

Более свежее руководство по сеансам jsp: http://courses.coreservlets.com/Course-Materials/pdf/csajsp2/08-Session-Tracking.pdf

...