Работа с Cookies в Java-cервлетах

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

Браузер клиента возвращает эти данные обратно на сервер когда клиент делает запрос из того же веб-ресурса.

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

Example

Раскроем этот пример получше:

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

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

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

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.Cookie; import javax.servlet.annotation.*; @WebServlet(“/cookieservlet”) public class MyServlet extends HttpServlet{ int i = 0; protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { PrintWriter pw = resp.getWriter(); //Также можем создать куки передав имя и значение //кука как параметры конструктора класса Cookie. Cookie cookie=new Cookie(“someCookieName”,”someCookieValue”); //Довольно важный метод setPath, который следует упомянуть. //Делает так чтобы этот куки был доступен только //указанной аргументом странице нашего веб ресурса. //То есть получить данный куки другой сервлет не сможет. cookie.setPath(“/cookieservlet”); //и отправить его клиенту в браузер resp.addCookie(cookie); //с помощью метода getCookies можем получить все куки, //которые отправляем на клиент при запросах //к нашему веб ресурсу. Cookie[] allcookies = req.getCookies(); for(Cookie somecookie : allcookies){ //с помощью методов getName(), getValue() //можем получить имя и значение куков веб-ресурса. //Отправляем клиенту его куки для вывода. pw.println(somecookie.getName()+” = ” +somecookie.getValue()); } } }

Проверка работы программы с Cookies

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

Как видим, куки клиента были успешно отправлены сервером клиенту для вывода.

Search Icon

Можно также увидеть кук JSESSIONID. Что это за кук разберем в следующем уроке.

Также справа можно увидеть, что отправленный кук someCookieName храниться у клиента в браузере. Чтобы посмотреть хранящиеся куки в браузере Chrome нужно нажать на кнопку F12.    

Эти куки клиент теперь может всегда посмотреть в браузере когда заходит на страницу данного сервлета и он будет там существовать пока клиент не очистит куки браузера.

Работа с сессиями (Session) в Java

Session в Java: как использовать сессии для хранения данных клиента. Пример работы с HttpSession, атрибутами и их применением в корзине интернет-магазина. Уникальный SESSIONID для каждого пользователя.
Time to read: 14

Интерфейс ServletContext

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

Интерфейс ServletConfig

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