Java куки.

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

Куки могут быть двух типов. Одни куки хранятся только в течении сеанса. То есть когда пользователь закрывает вкладку браузера и прекращает работать с приложением, то куки сеанса уничтожаются. Второй тип куков – постоянные куки – хранятся в течение продолжительного времени (до 3 лет).

Следует учитывать некоторые ограничения. Прежде всего куки нередко ограничены по размеру (обычно не более 4 килобайт). Кроме того, обычно браузеры принимают не более 20 кук с одного сайта. Более того, в некоторых браузерах может быть отключена поддержка кук.

Для работы с куками сервлеты могут используют класс javax.servlet.http.Cookie. Для создания куки надо создать объект этого класса с помощью констуктора Cookie(String name, String value), где name – ключ, а value – значение, которое сохраняется в куках. Стоит отметить, что мы можем сохранить в куках только строки.

Чтобы добавить куки в ответ клиенту у объекта HttpServletResponse применяется метод addCookie(Cookie c)

При создании куки мы можем использовать ряд методов объекта Cookie для установки и получения отдельных параметров:

  • setMaxAge(int maxAgeInSeconds): устанавливает время в секундах, в течение которого будут существовать куки. Специальное значение -1 указывает, что куки будут существовать только в течение сессии и после закрытия браузера будут удалены.
  • setValue(String value): устанавливает хранимое значение.
  • getMaxAge(): возвращает время хранения кук.
  • getName(): возвращает ключ кук.
  • getValue(): возвращает значение кук.

Например, установка куки с названием “user” и значением “Tom”:

12Cookie cookie = newCookie("user", "Tom");response.addCookie(cookie);

Чтобы получить куки, которые приходят в запросе от клиента, применяется метод getCookies() класса HttpServletRequest.

Например, получение куки по имени:

1234567891011Cookie[] cookies = request.getCookies();String cookieName = "user";Cookie cookie = null;if(cookies !=null) {    for(Cookie c: cookies) {        if(cookieName.equals(c.getName())) {            cookie = c;            break;        }    }}

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

Например, определим сервлет SetServlet, который будет устанавливать куки:

1234567891011121314151617181920212223242526importjava.io.IOException;importjava.io.PrintWriter;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.Cookie;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;@WebServlet("/set")publicclassSetServlet extendsHttpServlet {         protectedvoiddoGet(HttpServletRequest request, HttpServletResponse response)             throwsServletException, IOException {                PrintWriter out = response.getWriter();        try{            response.addCookie(newCookie("user", "Tom"));            out.println("Cookie is set");        }        finally{            out.close();        }    }}

В данном случае устанавливается куки user, которая хранит строку “Tom”.

Определим сервдет HelloServlet, который получает эту куку:

12345678910111213141516171819202122232425262728293031323334353637importjava.io.IOException;importjava.io.PrintWriter;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.Cookie;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse; @WebServlet("/hello")publicclassHelloServlet extendsHttpServlet {     protectedvoiddoGet(HttpServletRequest request, HttpServletResponse response)             throwsServletException, IOException {                        Cookie[] cookies = request.getCookies();        String cookieName = "user";        Cookie cookie = null;        if(cookies !=null) {            for(Cookie c: cookies) {                if(cookieName.equals(c.getName())) {                    cookie = c;                    break;                }            }        }        PrintWriter out = response.getWriter();        try{            out.println("Name: "+ cookie.getValue());        }        finally{            out.close();        }    }}

Таким образом, при обращении к сервлету SetServlet произойдет установка кук, а при обращении к сервлету HelloServlet мы получим установлены куки:

Куки в сервлетах в Java EE

https://t.me/javatg

Ответить