Сервлеты: setAttribute в HttpServletRequest против setAttribute в HttpSession - PullRequest
10 голосов
/ 09 января 2011

В чем разница между методом setAttribute() класса HttpServletRequest и setAttribute() класса HttpSession?

При каких обстоятельствах они используются?

Ответы [ 3 ]

19 голосов
/ 09 января 2011

Один устанавливает атрибут в области запроса, а другой - в области сеанса.Основное различие заключается в сроке службы прицела.Область запроса заканчивается, когда соответствующий ответ завершается.Область действия сеанса заканчивается, когда время ожидания сеанса клиентом или сервером истекло.Когда область действия заканчивается, все ее атрибуты будут уничтожены, и они не будут доступны в другом запросе или сеансе.

Область запроса используется для хранения данных, которые должны быть специфичны для запроса HTTP (дляНапример, результаты базы данных на основе конкретного запроса, сообщения об успехе / ошибке и т. д.).Область действия сеанса используется для хранения данных, которые должны быть специфичны для сеанса HTTP (например, вошедший в систему пользователь, настройки пользователя и т. Д.).Все запросы одного и того же клиента совместно используют один и тот же сеанс (таким образом, все вкладки / окна браузера в одном и том же сеансе клиента будут использовать один и тот же сеанс сервера).

См. Также:

2 голосов
/ 09 января 2011

Когда вы устанавливаете атрибут в объекте Request, переменная доступна только в области запроса. Эта переменная может быть доступна другим jsp / ресурсам, которые вы отправляете как часть этого запроса.

При настройке атрибута в области сеанса будут доступны все запросы в сеансе пользователя (если только вы не удалите его из сеанса).

Таким образом, основное различие сводится к объему / сроку службы атрибута.

Всегда старайтесь использовать переменные области запроса, если только вам не нужно использовать их в сеансе пользователя, например, в роли пользователя. Хранение большего количества данных в сеансе с большим количеством одновременно работающих пользователей может привести к проблемам с нехваткой памяти. Кроме того, если вы используете общий доступ к сеансам, поддерживаемый базой данных (как в веб-сфере), это приведет к проблемам с производительностью.

2 голосов
/ 09 января 2011

если вы используете httpServletRequest.setAttribute (); тогда атрибут будет привязан к этому объекту запроса,

в то время как в httpServletSession.setAttribute(); свяжет attr. в сессии.

поэтому, если вы хотите, чтобы область этих данных использовалась для сеанса, используйте session или если вам нужна область этих данных для простого запроса использования request

Например:

Имя пользователя вошедшего в систему пользователя должно быть общим для сеанса, поэтому оставьте его в session

while, сообщение об ошибке, которое вы даете пользователю при рассмотрении случая сбоя аутентификации, необходимо для этого запроса только после того, как нам не нужно, поэтому оставьте его в request

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