Encodera

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

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

Оглавление

Проект и первый сервер

У Javalin нет генератора проектов: это одна библиотека, и проект — обычный Maven-проект с несколькими зависимостями. Мы создадим его вручную: папки, файл pom.xml и класс Main. Это займёт пару минут, зато в проекте не будет ничего лишнего.

Папки проекта

Создайте папку blog с такой структурой:

blog/
├── pom.xml
└── src/
    └── main/
        └── java/com/example/blog/
            └── Main.java

Позже добавятся src/main/resources для файлов и src/test/java для тестов.

pom.xml

Файл pom.xml лежит в корне папки blog:

<!-- pom.xml -->
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
 
    <groupId>com.example</groupId>
    <artifactId>blog</artifactId>
    <version>1.0.0</version>
 
    <properties>
        <maven.compiler.release>25</maven.compiler.release>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <javalin.version>7.2.3</javalin.version>
    </properties>
 
    <dependencies>
        <dependency>
            <groupId>io.javalin</groupId>
            <artifactId>javalin</artifactId>
            <version>${javalin.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>2.0.18</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.22.1</version>
        </dependency>
    </dependencies>
 
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.14.1</version>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>3.6.4</version>
                <configuration>
                    <mainClass>com.example.blog.Main</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
ЗависимостьЗачем
javalinСам фреймворк и встроенный Jetty
slf4j-simpleВывод логов в консоль
jackson-databindПревращение объектов в JSON и обратно

Плагин exec-maven-plugin запускает класс Main командой Maven.

Первый сервер

Создайте файл Main.java:

// src/main/java/com/example/blog/Main.java
package com.example.blog;
 
import io.javalin.Javalin;
 
public class Main {
    public static void main(String[] args) {
        Javalin app = Javalin.create(config -> {
            config.routes.get("/", ctx -> ctx.result("Привет, Javalin!"));
        });
        app.start(8080);
    }
}

Javalin.create принимает лямбду с настройками. В ней config.routes.get объявляет маршрут: на GET / ответить строкой. Метод start(8080) запускает сервер на порту 8080.

Запуск

В папке blog выполните:

mvn compile exec:java

Maven скачает зависимости, скомпилирует код и запустит сервер. В конце лога (сокращён):

[com.example.blog.Main.main()] INFO io.javalin.Javalin - Starting Javalin ...
[com.example.blog.Main.main()] INFO org.eclipse.jetty.server.Server - jetty-12.1.12; ...
[com.example.blog.Main.main()] INFO io.javalin.Javalin - Javalin started in 573ms \o/
[com.example.blog.Main.main()] INFO io.javalin.Javalin - Listening on http://localhost:8080/
[com.example.blog.Main.main()] INFO io.javalin.Javalin - You are running Javalin 7.2.3 (released August 11, 2026).

Откройте http://localhost:8080 в браузере или вызовите сервер из второго терминала:

curl http://localhost:8080
Привет, Javalin!

Сервер работает, пока вы не нажмёте Ctrl+C. После каждого изменения кода остановите его и запустите команду снова.

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

Если забыть зависимость slf4j-simple, сервер запускается, но логов нет, а в начале вывода Javalin печатает подсказку:

#########################################################################
Javalin: It looks like you don't have a logger in your project.
The easiest way to fix this is to add 'slf4j-simple':
...
#########################################################################
SLF4J(W): No SLF4J providers were found.
SLF4J(W): Defaulting to no-operation (NOP) logger implementation

Без логов вы не увидите ни адрес сервера, ни ошибки в обработчиках. Добавьте зависимость из таблицы выше.

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

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