объект сеанса, возвращающий ноль - PullRequest
0 голосов
/ 09 марта 2010

Я создал страницу входа в свой проект "Информационная система для студентов", которая содержит текстовые поля username, userid и password. Я пытался сохранить значения username и userid в объекте сеанса и использовать его на другой странице, но он возвращаетнулевое значение.

1 Ответ

0 голосов
/ 09 марта 2010

Несколько причин:

  1. Вы поставили это в сеансе неправильно (должно быть сделано session.setAttribute(key, value)).
  2. Другая страница находится в другом домене / контексте (и поэтому не использует тот же сеанс).
  3. Что-то сделало сеанс недействительным (например, session.invalidate()).
  4. Клиент не поддерживает файлы cookie, и вы не добавили поддержку перезаписи URL.
  5. Вы обращаетесь к нему в сеансе неправильно (должно быть сделано session.getAttribute(key) или ${key}).

Следующий login.jsp пример ..

<form action="login" method="post">
    Username: <input type="text" name="username"><br>
    Password: <input type="password" name="password"><br>
    <input type="submit" value="login">
    <span class="error">${error}</span>
</form>
<p>Debug info: your current session ID is ${pageContext.session.id}</p>

.. с сервлетом, отображенным на /login, который имеет в основном следующее в doPost() ..

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    User user = userDAO.find(username, password);
    if (user != null) {
        request.getSession().setAttribute("user", user);
        response.sendRedirect(response.encodeRedirectURL("home.jsp"));
    } else {
        request.setAttribute("error", "Unknown login, try again");
        request.getRequestDispatcher("login.jsp").forward(request, response);
    }
}

.. и home.jsp, которые выглядят так ..

<p>Welcome, ${user.name}!</p>
<p>Debug info: your current session ID is ${pageContext.session.id}</p>

.. должно просто работать.

Убедитесь, что идентификатор сеанса является одинаковым на обеих страницах. В целях отладки вы можете просмотреть его с помощью ${pageContext.session.id}, как показано в приведенных выше фрагментах кода JSP. Если он такой же, а объект User по-прежнему отсутствует, то проблема заключается в другом месте.

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