JSP Session.getAttribute () значение, возвращающее нуль - PullRequest
3 голосов
/ 22 июня 2011

Я понятия не имею, почему мой session.getAttribute ("пользователь") возвращает не ноль, а значение атрибута, возвращающееся в нуль через несколько минут, это может быть из-за истечения времени ожидания сеанса, но почему только значение атрибута возвращает ноль, а другой сеанс все еще существует session.getAttribute ("user") возвращает не нуль.

Это мой поток веб-страниц, Логин пользователя

LoginServlet

User s = new User();
s.retriveuser();
session.setAttribute("balance", s.getBalance());
session.setAttribute("username", s.getUsername());
session.setAttribute("user", s);

Мой профиль

        User user = new User();
        if (session.getAttribute("user") == null) {
            response.sendRedirect("login.jsp");
        } else {
            user = (model.User) session.getAttribute("user");
        }

 <tr>
         <th>Gender:</th>
              <td><%=user.getGender()%></td>
 </tr>
 <tr>
         <th>Name:</th>
         <td><%=user.getName()%></td>
 </tr>

Может отображаться после входа в систему, все работает нормально, через несколько минут имя пола ... будет отображаться как ноль вместо перенаправления на страницу входа. И мой баланс и сессия имени пользователя все еще там. Перед установкой else user = (User) session.getAttribute ("user"); Я использовал

<jsp:useBean id="user" class="model.User" scope="session" />

Ответы [ 3 ]

2 голосов
/ 24 июня 2013

Понятия не имею, почему мой session.getAttribute ("пользователь") возвращает не ноль, а значение атрибута, возвращающее нуль через несколько минут

Хорошо, атрибут «пользователь» становится нулевым.

это может произойти из-за истечения времени ожидания сеанса, но почему только значение атрибута возвращает нуль, а другой сеанс все еще там, даже session.getAttribute ("пользователь") возвращает не ноль.

Que ?? Таким образом, атрибут "пользователь" не является нулевым ??

Существует только две возможности для изменения атрибутов сеанса:

  1. Если время сеанса истекло: все атрибуты очищаются контейнером одновременно.
  2. Если время сеанса не истекло, и очищен только один из ваших атрибутов: ваша программа очистила один атрибут.

Дополнительное примечание A: из javadoc для HttpServletResponse.sendRedirect: После использования этого метода ответ должен считаться зафиксированным и не должен записываться. Ваш код выше нарушает это.

Дополнительное примечание B:

   User user = new User();

Вы только что заполнили его новым, пустым пользовательским объектом. Избегайте этого - это ошибка, ожидающая своего появления. Только установите переменные на полезные / действительные значения. :)

2 голосов
/ 18 июня 2013

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

if (session.getAttribute("user") == null) {
            response.sendRedirect("login.jsp");
            user=null;
} else {
    user = (model.User) session.getAttribute("user");
}

Должен решить вашу проблему.

Редактировать Кроме того, простая печать user.Gender() в этом случае вернет Null, поэтому лучше печатать ее прямо из переменной сеанса.

0 голосов
/ 21 июня 2013

Что вы использовали внутри кода компонента?Вы уверены, что сделали пустой конструктор, геттеры, сеттеры, чтобы класс java реализовал Serializable? Тогда на странице jsp лучше использовать <jsp:setProperty name="the_same_you_used_in_bean_id" property="*"/>.Если вам нужна дополнительная информация о структуре бобов, дайте мне знать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...