Работа с сессиями (Session) в Java-cервлетах

Если выбрать все cookies нашего веб-ресурса, то там всегда будет кук с именем SESSIONID и значением идентификатором.

Этот идентификатор уникален для каждого клиента и он отправляется на сервер при запросах клиента и сервер ассоциирует этот уникльный ID с сессией конкретного клиента.

Благодаря этому на сервере мы можем ложить в сессию конкретного клиента различную информацию и эта информация, ясное дело, будет ассоциирована с конкретным клиентом.

Example

Например:

Когда клиент хочет что-то купить в интернет-магазине, он добавляет товар в корзину, при этом за кулисами товар добавляется в сессию клиента. Когда клиент захочет просмотреть корзину сервер выгребает товары из сессии и показывает клиенту.

Search Icon

Сессия обычно живет какой-то промежуток времени и его зачастую можно настроить.

Как простой пример давайте что-нибудь положим в сессию клиента и отправим ее содержимое на страницу клиента.

Пример программы:

import java.util.*; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import javax.servlet.annotation.*; @WebServlet(“/sessionsservlet”) public class MyServlet extends HttpServlet{ int i = 0; protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { PrintWriter pw = resp.getWriter(); //getSession – получаем сессию клиента HttpSession sess = req.getSession(); //допустим клиент положил какойто товар в корзину String someProductName = “Refrigerator”; //и можем положить его имя в сессию sess.setAttribute(“product”, someProductName); //getAttributeNames – получаем имена аттрибутов Enumeration attrNames = sess.getAttributeNames(); while(attrNames.hasMoreElements()) { String attrName = attrNames.nextElement(); //выводим имя аттрибута pw.println(attrName); //выводим значение аттрибута pw.println(sess.getAttribute(attrName)); pw.println(“-------------“); } } }

Проверим работу программы с Session

Скомпилируем файл сервлета и в адресной строке перейдем по адресу /sessionsservlet.

Видим содержимое сессии клиента.

Интерфейс ServletContext

ServletContext — общий контекст для всего приложения. Узнайте, как хранить и получать данные через setAttribute/getAttribute, обмениваться атрибутами между сервлетами и работать с параметрами из web.xml.
Time to read: 15

Интерфейс ServletConfig

Изучите ServletConfig в Java: работа с параметрами инициализации для отдельных сервлетов. Отличия от ServletContext и примеры настройки в web.xml.
Time to read: 15

encodeURL и encodeRedirectURL в Java сервлетах

Разберитесь, как поддерживать сессии в Java сервлетах при отключенных cookies. Используйте encodeURL и encodeRedirectURL для передачи JSESSIONID в URL.
Time to read: 16