Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Что такое Javalin

Javalin — небольшой веб-фреймворк для Java и Kotlin. Он запускает HTTP-сервер прямо из метода main и позволяет в несколько строк сказать: «на запрос GET /posts ответь списком постов». Никаких аннотаций, сканирования классов и скрытой магии: вы видите весь путь запроса в своём коде. Поэтому Javalin хорошо подходит как первый шаг в серверную Java.

Как устроен Javalin

Внутри Javalin работает Jetty — проверенный веб-сервер на Java. Его не нужно устанавливать отдельно: он приходит как обычная зависимость Maven и запускается вместе с программой. Такой сервер называют встроенным (embedded).

Код приложения состоит из трёх видов частей:

ЧастьЧто делает
Маршрут (route)Связывает HTTP-метод и адрес, например GET /posts, с кодом
Обработчик (handler)Лямбда или метод, который получает запрос и формирует ответ
Контекст ctxОбъект с данными запроса и методами для ответа

Javalin и большие фреймворки

JavalinSpring Boot, Quarkus
РазмерОдна библиотекаПлатформа из многих модулей
НастройкаОбычный Java-кодАннотации и файлы настроек
Внедрение зависимостейНет, объекты создаёте самиВстроено
Порог входаНизкийВыше

Javalin не прячет устройство веб-сервера, поэтому на нём удобно понять, что такое маршрут, статус ответа или JSON. Потом эти знания переносятся в любой другой фреймворк.

Версия в курсе

Курс написан для Javalin 7.2 и Java 25. Javalin 7 требует Java 17 или новее и работает на Jetty 12. В седьмой версии изменился стиль: все маршруты объявляются внутри блока настроек Javalin.create(config -> ...). В старых статьях вы встретите вызовы вида app.get(...) после запуска — в Javalin 7 их нет.

Проверьте, что установлены Java и Maven:

java -version
mvn -version

Обе команды должны напечатать версии: Java 25 (подойдёт и 21) и Maven 3.9.

Что мы построим

Через весь курс мы будем делать REST API блога:

  1. Маршруты /posts для списка, просмотра, создания и удаления постов.
  2. JSON, проверку данных и понятные ошибки.
  3. Контроллеры, статические файлы, HTML-шаблоны, формы и загрузку файлов.
  4. Базу данных H2 через JDBC, вход по паролю с ролями, CORS, куки и сессии, документацию API в Swagger UI.
  5. Чат на WebSocket, уведомления через SSE, тесты, сборку в один jar-файл, настройки из окружения и журнал запросов.

Запросы к API мы будем отправлять утилитой curl. Команды в уроках написаны для bash: Linux, macOS или Git Bash в Windows.

Частая ошибка

Maven запускает компилятор из той Java, на которую указывает переменная JAVA_HOME. Если там осталась старая версия, сборка проекта из этого курса падает на первой же команде:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.14.1:compile
(default-compile) on project blog: Fatal error compiling: error: release version 25 not supported

Компилятор Java 16 не знает версию 25. Если понизить версию в проекте, ошибка просто переедет на запуск: UnsupportedClassVersionError ... (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 60.0 — классы Javalin собраны для Java 17. Установите JDK 25 и проверьте, что JAVA_HOME указывает на него.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.