Зарегистрируйтесь, чтобы продолжить обучение

Cookies Java: Веб-технологии

Куки (cookies) — это механизм протокола HTTP, который браузер использует для хранения данных браузером. Они позволяют отслеживать или идентифицировать возвращающихся посетителей. Например, с их помощью интернет-магазины запоминают, что добавлено в корзину. В этом уроке мы изучим эту тему подробнее и выясним, как происходит работа с куками в Java.

Методы работы с куками в Javalin

Вся работа с куками в Javalin состоит из нескольких методов. Рассмотрим два основных:

  • Метод ctx.cookie("name") читает данные куки по имени. Данные доступны, если кука была отправлена из браузера вместе с запросом
  • Метод ctx.cookie("name", "value") устанавливает куку с нужным именем и значением. Если кука существовала, она будет перезаписана — это стандартное поведение HTTP

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

Закрытие в таких случаях реализуется через JavaScript-код. Чтобы не усложнять, мы сделаем скрытие блока автоматически после обновления страницы. Другими словами, блок будет показывать только при первом заходе на сайт. Рассмотрим код дата-класса:

package org.example.hexlet.dto;

import lombok.AllArgsConstructor;
import lombok.Getter;

@AllArgsConstructor
@Getter
public class MainPage {
    private Boolean visited;

    public Boolean isVisited() {
        return visited;
    }
}

Также изучим код обработчика:

package org.example.hexlet;

import org.example.hexlet.dto.MainPage;
import io.javalin.Javalin;

public class HelloWorld {
    public static void main(String[] args) {
        var app = Javalin.create(config -> {
            config.bundledPlugins.enableDevLogging();
        });

        app.get("/", ctx -> {
            var visited = Boolean.valueOf(ctx.cookie("visited"));
            var page = new MainPage(visited);
            ctx.render("index.jte", model("page", page));
            ctx.cookie("visited", String.valueOf(true));
        });

        app.start(7070);
    }
}

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

В примере выше мы сначала читаем и только затем устанавливаем. При первом заходе на сайт чтение неустановленной куки вернет null. Это показывает, что пользователь зашел на сайт первый раз. Во второй раз результатом будет true, потому что установка куки произошла на первую загрузку. Осталось использовать эту информацию в шаблоне:

@import org.example.hexlet.dto.MainPage
@param MainPage page

<!DOCTYPE html>
<html lang="ru">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>Hello Hexlet!</title>
  </head>
  <body>
    <main>
      <h1>Привет, Хекслет!</h1>
      @if(!page.isVisited())
        Это сообщение показывается только один раз. Если вы хотите увидеть его снова, сотрите куки
      @endif
    </main>
  </body>
</html>

Самостоятельная работа

  1. Проделайте все шаги из урока на своем компьютере
  2. Запустите приложение и откройте панель разработчика в вашем браузере
  3. Откройте панель Application -> Cookies и проверьте, какие куки устанавливаются во время работы приложения
  4. Залейте изменения на GitHub

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

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

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
Программирование на Java, Разработка веб-приложений и микросервисов используя Spring Boot, проектирование REST API
10 месяцев
с нуля
Старт 26 декабря

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»