Рубрики
Без рубрики

Пример файлов Cookie Сервлета Java

Файлы cookie в веб-приложении Java. Файлы cookie в сервлете. Пример Java-файлов cookie, getCookies, addCookie, максимальный возраст файлов cookie, срок действия, доменное имя, примеры пути.

Автор оригинала: Pankaj Kumar.

Добро пожаловать в пример файлов cookie сервлета Java. Файлы cookie часто используются в связи веб-клиент-сервер, это не что-то специфичное для java.

Некоторые из распространенных способов использования файлов cookie являются:

  1. Аутентификация сеанса с использованием файлов cookie Мы узнали из руководства по сеансу сервлета, что HttpSession использует файл cookie “JSESSIONID” для отслеживания сеанса пользователя.
  2. Персонализированный ответ клиенту на основе его предпочтений, например, мы можем установить цвет фона в качестве файла cookie в браузере клиента, а затем использовать его для настройки цвета фона ответа, изображения и т.д.

Файлы cookie в сервлете Java

Файлы cookie – это текстовые данные, отправляемые сервером клиенту и сохраняемые на локальном компьютере клиента. Когда клиент отправляет запрос на сервер, он передает файлы cookie, сохраненные сервером в заголовке запроса, как показано ниже:

Cookie	Test="Test Cookie5"

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

Set-Cookie	Counter=7;
Version=1;
Comment="SetCookie Counter";
Domain="localhost";
Max-Age=86400;
Expires=Thu, 15-Aug-2013 20:19:19 GMT;
Path=/cookie/SetCookie

Set-Cookie	Test="Test Cookie7";
Version=1;
Comment="Test Cookie"

Обратите внимание, что сервер отправляет некоторую дополнительную информацию для файлов cookie, такую как комментарий, домен, максимальное время до истечения срока действия файлов cookie и путь, по которому браузер должен отправить файл cookie обратно в запросе. Но когда клиент отправляет файл cookie в браузер, он отправляет только имя и значение файла cookie.

API сервлета обеспечивает поддержку файлов cookie через javax.servlet.http.Файл cookie класс, реализующий сериализуемые и клонируемые интерфейсы.

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

Аналогично HttpServletResponse addCookie(файл cookie c) предусмотрен метод прикрепления файла cookie в заголовке ответа, для файлов cookie нет методов получения.

Класс cookie имеет один конструктор, который принимает имя и значение, поскольку они являются обязательными параметрами для файла cookie, все остальные параметры являются необязательными.

Некоторые важные методы класса Cookie являются:

  1. getComment() – Возвращает комментарий, описывающий назначение этого файла cookie, используемого на стороне клиента. Обратите внимание, что сервер не получает эту информацию, когда клиент отправляет файл cookie в заголовке запроса. Мы можем использовать метод setComment() для задания описания файлов cookie на стороне сервера.
  2. getDomain() – возвращает доменное имя для файла cookie. Мы можем использовать метод setDomain() для установки доменного имени для файлов cookie, если задано доменное имя, то файлы cookie будут отправляться только на запросы этого конкретного домена.
  3. getMaxAge() – возвращает максимальный возраст в секундах. Мы можем использовать setMaxAge() для установки времени истечения срока действия файлов cookie.
  4. getName() – возвращает имя файла cookie, может использоваться как на стороне браузера, так и на стороне сервера. Для имени нет задатчика, мы можем задать имя только один раз с помощью конструктора.
  5. getPath() – Возвращает путь на сервере, на который браузер возвращает этот файл cookie. Мы увидим пример, в котором файл cookie будет отправлен только на определенный ресурс. Мы можем использовать set Path () , чтобы указать браузеру отправлять файлы cookie только на определенный ресурс.
  6. getSecure() – Возвращает значение true, если браузер отправляет файлы cookie только по защищенному протоколу, или значение false, если браузер может отправлять файлы cookie по любому протоколу. Мы можем использовать метод set Secure () , чтобы указать браузеру отправлять файлы cookie только по защищенному протоколу.
  7. GetValue() – возвращает значение файла cookie в виде строки. Существует также setValue() метод для изменения значения файла cookie.
  8. GetVersion() – Возвращает версию протокола, которой соответствует этот файл cookie. Существует также метод настройки версии.
  9. isHttpOnly() – Проверяет, был ли этот файл cookie помечен как HttpOnly. Существует также метод настройки, который мы можем использовать, чтобы указать клиенту использовать его только для HTTP.

Пример файла Cookie Сервлета Javax

Мы создадим два простых сервлета для печати файлов cookie от клиента, в одном из сервлетов мы установим файл cookie для каждого домена и файл cookie с настройками пути, чтобы другой сервлет не получал это от клиента.

Наша окончательная структура проекта для файлов cookie в сервлете java будет выглядеть следующим образом.

Сеткуки.java : Этот сервлет установит некоторые файлы cookie и отправит их в браузер. Он также распечатает информацию о файлах cookie и отправит ее в виде HTML-ответа.

package com.journaldev.servlet.cookie;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/cookie/SetCookie")
public class SetCookie extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private static int count = 0;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		PrintWriter out = response.getWriter();
		Cookie[] requestCookies = request.getCookies();
		
		out.write("");
		out.write("

Hello Browser!!

"); if(requestCookies != null){ out.write("

Request Cookies:

"); for(Cookie c : requestCookies){ out.write("Name="+c.getName()+", Value="+c.getValue()+", Comment="+c.getComment() +", Domain="+c.getDomain()+", MaxAge="+c.getMaxAge()+", Path="+c.getPath() +", Version="+c.getVersion()); out.write("
"); } } //Set cookies for counter, accessible to only this servlet count++; Cookie counterCookie = new Cookie("Counter", String.valueOf(count)); //add some description to be viewed in browser cookie viewer counterCookie.setComment("SetCookie Counter"); //setting max age to be 1 day counterCookie.setMaxAge(24*60*60); //set path to make it accessible to only this servlet counterCookie.setPath("/ServletCookie/cookie/SetCookie"); //adding cookie to the response response.addCookie(counterCookie); //set a domain specific cookie Cookie domainCookie = new Cookie("Test", "Test Cookie"+String.valueOf(count)); domainCookie.setComment("Test Cookie"); response.addCookie(domainCookie); out.write(""); } }

Позови Куки.java : Простой сервлет, который продемонстрирует, что файл cookie, установленный в SetCookie с определенным путем, не будет отправлен браузером этому сервлету.

package com.journaldev.servlet.cookie;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/cookie/GetCookie")
public class GetCookie extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		PrintWriter out = response.getWriter();
		Cookie[] requestCookies = request.getCookies();
		
		out.write("");
		out.write("

Hello Browser!!

"); if(requestCookies != null){ out.write("

Request Cookies:

"); for(Cookie c : requestCookies){ out.write("Name="+c.getName()+", Value="+c.getValue()+", Comment="+c.getComment() +", Domain="+c.getDomain()+", MaxAge="+c.getMaxAge()+", Path="+c.getPath() +", Version="+c.getVersion()); out.write("
"); //delete cookie if(c.getName().equals("Test")){ c.setMaxAge(0); response.addCookie(c); } } } out.write(""); } }

Когда вы запустите программу, вы заметите несколько вещей:

  • Файл cookie “Счетчик” отправляется только SetCookie, getCookie никогда не получит этот файл cookie.
  • Кроме имени и значения, все остальные переменные печатаются по умолчанию. Максимальное значение по умолчанию для возраста -1, а значение по умолчанию для версии-0.
  • getCookie устанавливает максимальный возраст “Тестового” файла cookie равным 0, чтобы срок его действия истек и он был удален браузером клиента.

Это все для файлов cookie в java и их использования в API сервлетов, вы также можете ознакомиться с другими учебными пособиями по сервлетам.

  1. Веб-приложение Java
  2. Учебник по JSP сервлета
  3. Управление сеансами на Java
  4. Фильтр Сервлетов Javax
  5. Прослушиватель Сервлетов

Ознакомьтесь со следующими статьями серии об обработке исключений сервлетов и Примере загрузки файлов сервлетов .