Как сохранить session.attribute от jsp до сервлета - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть сервлет входа в систему, где я устанавливаю атрибут зарегистрированного пользователя:

protected void doPost(HttpServletRequest request, HttpServletResponse response)
                    throws ServletException, IOException 
                              ... OMITTED
    request.getSession().setAttribute("user", user_name);
    request.getRequestDispatcher("index.jsp").forward(request, response);
                              ... OMITTED
    }

Из index.jsp я захожу в свой quit.jsp, пока здесь я не могу получить доступ к пользователю, зарегистрированному через getAttribute().Но в моем quit.jsp я спрашиваю пользователя, зарегистрировавшегося только для своего пароля, и вызываю сервлет Quit.Проблема заключается в том, что в сервлете Quit, когда я пытаюсь получить доступ к текущему пользователю, зарегистрированному с getAttribute(), атрибут «пользователь» имеет значение null. Итак, мой вопрос: как я могу использовать постоянный атрибут, созданный в сервлете, который будет использоваться в jsp и сервлетах?

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Ваша проблема может быть не так легко решить.У меня была похожая ситуация, поэтому я могу дать вам несколько указаний на расследование:

Причина ваших нулевых данных заключается в том, что когда ваш сеанс (где хранится атрибут) умирает, время ожидания воссоздается, потому чтотот же пользователь выдает новый Login POST, затем ваши пользовательские данные сеанса умирают вместе с ним, если вы не сохраните их, на которые ссылаются как session_id, в постоянном хранилище, таком как Cookie в браузере пользователя или в базе данных для каждого пользователя: но это может быть довольно сложнымреализовать.

В качестве краткого описания:

Ознакомьтесь с документацией по этому методу в HttpServlet: getThreadLocalRequest (). getSession (false);

, а также это может решитьваша проблема:

request.getSession (). setMaxInactiveInterval (3600);// Максимальное количество интервалов в секундах между вызовами до отмены сеанса.Это означает, что через час вам нужно будет автоматически выйти из системы вашего пользователя (или заставить его повторно войти в систему), чтобы предотвратить возникновение нулевого значения.

Выход из системы вызовет:

сеанс.removeAttribute ( "атрибут");session.invalidate ();

Также обратите внимание, что вы упомянули наличие двух разных сервлетов (определенных в Tomcat web.xml ??).Один - Логин, другой - Выход, они оба отвечают на POST / GET.Я предполагаю, что у них есть две разные реализации, и я думаю, что они не используют один и тот же объект сеанса.Поэтому в этом случае вам, возможно, придется реализовать действия Login + Quit в том же сервлете с правильным интервалом времени аннулирования сеанса.

0 голосов
/ 20 ноября 2018

В файле JSP HttpServletRequest доступен с именем переменной request по умолчанию.Вы также можете использовать его в файле JSP.

Итак,

request.getSession().setAttribute("user", user_name);

также будет доступно в файле JSP.

<%
request.getSession().setAttribute("user", user_name);
%>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...