Рубрики
Без рубрики

Разница между request.getSession() и request.getSession(true)

Поймите разницу между вызовом HttpServletRequest#getSession() и HttpServletRequest#getSession(логическое значение)

Автор оригинала: baeldung.

1. Обзор

В этом кратком руководстве мы увидим разницу между вызовом HttpServletRequest# getSession() и HttpServletRequest# getSession(логическое значение) .

2. В чем разница?

Методы getSession() и getSession(boolean) очень похожи. Хотя есть небольшая разница. Разница в том, следует ли создавать сеанс, если он еще не существует.

Вызов getSession() и getSession(true) функционально одинаковы : извлеките текущий сеанс и, если он еще не существует, создайте его.

Вызов getSession(false) , однако, извлекает текущий сеанс, а если он еще не существует, возвращает null . Среди прочего, это удобно, когда мы хотим спросить, существует ли сеанс.

3. Пример

В этом примере мы рассматриваем этот сценарий:

  • пользователь вводит идентификатор пользователя и входит в приложение
  • затем пользователь вводит имя пользователя и возраст и хочет обновить эти данные для вошедшего в систему пользователя

Мы сохраним пользовательские значения в сеансе, чтобы понять использование HttpServletRequest#getSession() и HttpServletRequest#getSession(логическое значение).

Во-первых, давайте создадим сервлет, в котором мы используем HttpServletRequest#getSession() в своем doGet() методе:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    HttpSession session = request.getSession();
    session.setAttribute("userId", request.getParameter("userId"));
}

На этом этапе сервлет извлекает существующий сеанс или создает новый для вошедшего в систему пользователя, если он не существует.

Затем мы установим атрибут userName в сеансе.

Поскольку мы хотим обновить сведения о пользователе для соответствующего идентификатора пользователя, мы хотим использовать тот же сеанс и не хотим создавать новый сеанс для хранения имени пользователя.

Итак, теперь мы будем использовать HttpServletRequest#getSession(логическое значение) с false значением :

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    HttpSession session = request.getSession(false);
    if (session != null) {
        session.setAttribute("userName", request.getParameter("userName"));
    }
}

Это приведет к установке атрибута userName в том же сеансе, в котором ранее был установлен userId .

4. Заключение

В этом уроке мы объяснили разницу между HttpServletRequest#getSession() и HttpServletRequest#getSession(логические) методы.

Полный пример доступен на GitHub .