English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Различия между request.getSession(true, false, null) в java

Различия между request.getSession(true/false/null) в Java

Первая часть, причины

На практике мы часто сталкиваемся с следующими тремя способами использования:

HttpSession session = request.getSession();

HttpSession session = request.getSession(true);

HttpSession session = request.getSession(false);

Вторая часть, различия

1.      Официальная документация Servlet говорит:

public HttpSession getSession(boolean create)
Возвращает текущий HttpSession, связанный с этим запросом, или, если текущей сессии нет и значение create равно true, возвращает новую сессию.
Если значение create равно false и запрос не содержит действительного HttpSession, этот метод возвращает null.
Чтобы обеспечить правильное поддержание сеанса, необходимо вызвать этот метод до того, как будет отправлен ответ. Если Контейнер использует файлы cookie для поддержания целостности сеанса и запрашивает создание нового сеанса при отправке ответа, выбрасывается IllegalStateException.
Параметры: true - создать новый сеанс для этого запроса, если необходимо; false - возвращает null, если текущий сеанс отсутствует
Возвращает: HttpSession, связанный с этим запросом, или null, если create равен false и запрос не имеет действительного сеанса

2.      Переведенное значение означает:

getSession(boolean create) означает возвращение текущего HttpSession из reqeust, если текущий HttpSession в reqeust равен null, и когда create равен true, создается новый сеанс, в противном случае возвращает null;

Кратко говоря:

HttpServletRequest.getSession(true) эквивалентно HttpServletRequest.getSession(); 
HttpServletRequest.getSession(false) эквивалентно тому, если текущий сеанс отсутствует, то возвращает null; 

3.      Использование

Когда информация о входе сохраняется в сеанс, обычно рекомендуется: HttpSession session = request.getSession();

Когда извлекается информация о входе из сеанса, обычно рекомендуется: HttpSession session = request.getSession(false);

4.      Более краткий способ

Если в вашем проекте используется Spring, операции с сессией становятся значительно проще. Если нужно получить значение из сессии, можно использовать метод WebUtils.getSessionAttribute(HttpServletRequest request, String name) из инструмента WebUtils (org.springframework.web.util.WebUtils). Посмотрите на исходный код:

public static Object getSessionAttribute(HttpServletRequest request, String name){ 
  Assert.notNull(request, "Request must not be null"); 
  HttpSession session = request.getSession(false); 
  return (session != null ? session.getAttribute(name) : null); 
}

Примечание: Assert - это инструмент из пакета Spring, который используется для выполнения некоторых операций проверки, в данном примере используется для проверки того, не пуст ли reqeust, и если он пуст, то выбрасывается исключение

Если вы используете:

WebUtils.setSessionAttribute(request, "user", User);
User user = (User)WebUtils.getSessionAttribute(request, "user");

Спасибо за чтение, надеюсь, это поможет вам, спасибо за поддержку нашего сайта!

Основной учебник
Вам может понравиться