В чем разница между методом setAttribute()
класса HttpServletRequest
и setAttribute()
класса HttpSession
?
При каких обстоятельствах они используются?
В чем разница между методом setAttribute()
класса HttpServletRequest
и setAttribute()
класса HttpSession
?
При каких обстоятельствах они используются?
Атрибут задает атрибут в области запроса, а другой устанавливает атрибут в области сеанса. Основное различие заключается в сроке службы. Область запроса заканчивается, когда соответствующий ответ завершен. Сфера действия сеанса заканчивается, когда сеанс был отключен клиентом или сервером. Когда область действия заканчивается, все ее атрибуты будут разбиты, и они не будут доступны в другом запросе или сеансе.
Вы используете область запроса для хранения данных, которые должны быть конкретными для HTTP-запроса (например, результаты базы данных на основе конкретного запроса, сообщения об успешности/ошибках и т.д.). Вы используете область сеанса для хранения данных, которые должны быть специфичными для сеанса HTTP (например, пользователь в системе, пользовательские настройки и т.д.). Все запросы одного и того же клиента используют один и тот же сеанс (таким образом, все разные вкладки/окна браузера в одном сеансе клиента будут совместно использовать один и тот же сеанс сервера).
если вы используете httpServletRequest.setAttribute(); то атрибут будет привязан к этому объекту запроса,
а в httpServletSession.setAttribute();
будет привязано attr. в сеансе.
поэтому, если вы хотите, чтобы область данных этих данных использовалась в сеансе session
, или если вам нужна область этих данных только для запроса, используйте request
Пример:
Имя пользователя вошедшего в систему пользователя должно быть общим для сеанса, поэтому сохраните его в session
while, сообщение об ошибке, которое вы даете пользователю, при рассмотрении дела об ошибке аутентификации, его необходимо для этого запроса, только после этого нам не нужно, так что держите его в request
Когда вы устанавливаете атрибут объекта Request, переменная доступна только в области запроса. К этой переменной можно обращаться другие jsp/resources, которые вы отправляете в рамках этого запроса.
При установке атрибута в области сеанса будет доступно все запросы в сеансе пользователя (если вы не удалите его из сеанса).
Таким образом, основное различие, которое он сжимает, - это область действия/срок действия атрибута.
Всегда пытайтесь использовать переменные области запроса, если вам не нужно использовать его во время сеанса пользователя ex: как роли пользователя. Сохранение большего количества данных в сеансе с более параллельными пользователями может привести к проблемам с памятью. Также, если вы используете общий доступ к сеансу, поддерживаемый базой данных (например, вы можете делать в websphere), это приведет к проблемам с производительностью.