Что такое Javalin
Javalin — небольшой веб-фреймворк для Java и Kotlin. Он запускает HTTP-сервер прямо из метода main и позволяет в несколько строк сказать: «на запрос GET /posts ответь списком постов». Никаких аннотаций, сканирования классов и скрытой магии: вы видите весь путь запроса в своём коде. Поэтому Javalin хорошо подходит как первый шаг в серверную Java.
Как устроен Javalin
Внутри Javalin работает Jetty — проверенный веб-сервер на Java. Его не нужно устанавливать отдельно: он приходит как обычная зависимость Maven и запускается вместе с программой. Такой сервер называют встроенным (embedded).
Код приложения состоит из трёх видов частей:
| Часть | Что делает |
|---|---|
| Маршрут (route) | Связывает HTTP-метод и адрес, например GET /posts, с кодом |
| Обработчик (handler) | Лямбда или метод, который получает запрос и формирует ответ |
Контекст ctx | Объект с данными запроса и методами для ответа |
Javalin и большие фреймворки
| Javalin | Spring 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 блога:
- Маршруты
/postsдля списка, просмотра, создания и удаления постов. - JSON, проверку данных и понятные ошибки.
- Контроллеры, статические файлы, HTML-шаблоны, формы и загрузку файлов.
- Базу данных H2 через JDBC, вход по паролю с ролями, CORS, куки и сессии, документацию API в Swagger UI.
- Чат на 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 указывает на него.