1. Обзор
В этом кратком руководстве мы увидим разницу между вызовами HttpServletRequest#
getSession()
и HttpServletRequest#
getSession(boolean)
.
2. В чем разница?
Методы getSession()
и getSession(boolean)
очень похожи. Хотя есть небольшая разница. Разница заключается в том, следует ли создавать сеанс, если он еще не существует.
Вызовы getSession()
и getSession(true)
функционально одинаковы : получить текущий сеанс и, если он еще не существует, создать его.
Однако вызов getSession(false)
извлекает текущий сеанс и, если он еще не существует, возвращает null
. Среди прочего, это удобно, когда мы хотим узнать, существует ли сессия.
3. Пример
В этом примере мы рассматриваем такой сценарий:
- пользователь вводит
идентификатор пользователя
и входит в приложение - затем пользователь вводит
имя пользователя
ивозраст
и хочет обновить эти данные для вошедшего в систему пользователя
Мы сохраним пользовательские значения в сеансе, чтобы понять использование HttpServletRequest#getSession()
и HttpServletRequest#getSession(boolean).
Во-первых, давайте создадим сервлет, в котором мы используем 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(boolean)
со значением 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(boolean)
.
Полный пример доступен на GitHub .