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 .