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

Обработчики запросов Java: Веб-технологии

В этом уроке мы познакомимся с обработчиками и выясним, как ими пользоваться.

Что такое обработчик

Главная содержательная часть в файле HelloWorld.java — это обработчик запроса ctx -> ctx.result("Hello World"):

package org.example.hexlet;

import io.javalin.Javalin;

public class HelloWorld {
    public static void main(String[] args) {
        var app = Javalin.create(config -> {
            config.bundledPlugins.enableDevLogging();
        });
        // Передаем обработчик запроса
        app.get("/", ctx -> ctx.result("Hello World"));
        app.start(7070);
    }
}

На каждый адрес задается обработчик — это функция, которая подготавливает ответ по заданному адресу и возвращает его. Затем веб-сервер превращает этот ответ в HTTP-ответ и отправляет клиенту. В примере выше, обработчик отдает строку Hello World на запрос GET /.

В Javalin все приложение представлено объектом класса Javalin. Этот объект содержит методы, аналогичные методам HTTP:

  • get
  • post
  • put и так далее

Эти методы принимают на вход два параметра:

  • Сам обработчик
  • Маршрут, для которого он вызовется

В простейшем случае обработчик — это лямбда, которая принимает на вход объект ctx (context). Через этот объект идет чтение данных HTTP-запроса и формирование HTTP-ответа. В нашем примере мы установили тело ответа через метод ctx.result(). Остальные параметры фреймворк установил по умолчанию — например, код ответа 200.

Во фреймворках принято считать, что маршрут — это комбинация метода HTTP и адреса. Другими словами, с точки зрения большинства фреймворков GET /users и POST /users — это разные маршруты со своими обработчиками.

Посмотрим, как это работает на практике. Определим соответствующие маршруты и выполним запросы к ним с помощью curl:

package org.example.hexlet;

import io.javalin.Javalin;

public class HelloWorld {
    public static void main(String[] args) {
        var app = Javalin.create(config -> {
            config.bundledPlugins.enableDevLogging();
        });
        app.get("/users", ctx -> ctx.result("GET /users"));
        app.post("/users", ctx -> ctx.result("POST /users"));
        app.start(7070);
    }
}
# После старта приложения
curl localhost:7070/users

GET /users

curl -X POST localhost:7070/users

POST /users

Таким способом можно добавлять любое количество обработчиков на любые адреса.

Что такое диспетчеризация

Когда приложение получает запрос, как оно понимает, какой обработчик нужно запускать? Эту задачу решает диспетчеризация запроса, реализованная внутри фреймворка. Упрощенно этот процесс выглядит так:

  1. Фреймворк анализирует параметры запроса и пытается сопоставить два маршрута — добавленный в объект app и полученный в запросе. Другими словами, он сравнивает комбинацию метода запроса и сам адрес. Этот процесс называется роутингом или маршрутизацией
  2. Если во время роутинга фреймворк нашел соответствующий маршрут, тогда вызывается его обработчик. Далее ответ от обработчика отправляется обратно клиенту
  3. Если фреймворк не нашел нужный обработчик, то запускается обработчик по умолчанию, который возвращает ошибку 404

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

  1. Выполните все шаги из этого урока на своем компьютере
  2. Запустите приложение и откройте в браузере страницу /users
  3. Убедитесь, что на экране вывелся текст, переданный в метод result()

Дополнительные материалы

  1. Front Controller

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Задавайте вопросы, если хотите обсудить теорию или упражнения. Команда поддержки Хекслета и опытные участники сообщества помогут найти ответы и решить задачу