HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>В этом уроке мы познакомимся с обработчиками и выясним, как ими пользоваться.</p>
1 <p>В этом уроке мы познакомимся с обработчиками и выясним, как ими пользоваться.</p>
2 <h2>Что такое обработчик</h2>
2 <h2>Что такое обработчик</h2>
3 <p>Главная содержательная часть в файле<em>HelloWorld.java</em>- это обработчик запроса ctx -&gt; ctx.result("Hello World"):</p>
3 <p>Главная содержательная часть в файле<em>HelloWorld.java</em>- это обработчик запроса ctx -&gt; ctx.result("Hello World"):</p>
4 <p>На каждый адрес задается<strong>обработчик</strong>- это функция, которая подготавливает ответ по заданному адресу и возвращает его. Затем веб-сервер превращает этот ответ в HTTP-ответ и отправляет клиенту. В примере выше, обработчик отдает строку<em>Hello World</em>на запрос GET /.</p>
4 <p>На каждый адрес задается<strong>обработчик</strong>- это функция, которая подготавливает ответ по заданному адресу и возвращает его. Затем веб-сервер превращает этот ответ в HTTP-ответ и отправляет клиенту. В примере выше, обработчик отдает строку<em>Hello World</em>на запрос GET /.</p>
5 <p>В Javalin все приложение представлено объектом класса Javalin. Этот объект содержит методы, аналогичные методам HTTP:</p>
5 <p>В Javalin все приложение представлено объектом класса Javalin. Этот объект содержит методы, аналогичные методам HTTP:</p>
6 <ul><li>get</li>
6 <ul><li>get</li>
7 <li>post</li>
7 <li>post</li>
8 <li>put и так далее</li>
8 <li>put и так далее</li>
9 </ul><p>Эти методы принимают на вход два параметра:</p>
9 </ul><p>Эти методы принимают на вход два параметра:</p>
10 <ul><li>Сам обработчик</li>
10 <ul><li>Сам обработчик</li>
11 <li>Маршрут, для которого он вызовется</li>
11 <li>Маршрут, для которого он вызовется</li>
12 </ul><p>В простейшем случае<strong>обработчик</strong>- это лямбда, которая принимает на вход объект ctx (<em>context</em>). Через этот объект идет чтение данных HTTP-запроса и формирование HTTP-ответа. В нашем примере мы установили тело ответа через метод ctx.result(). Остальные параметры фреймворк установил по умолчанию - например, код ответа<em>200</em>.</p>
12 </ul><p>В простейшем случае<strong>обработчик</strong>- это лямбда, которая принимает на вход объект ctx (<em>context</em>). Через этот объект идет чтение данных HTTP-запроса и формирование HTTP-ответа. В нашем примере мы установили тело ответа через метод ctx.result(). Остальные параметры фреймворк установил по умолчанию - например, код ответа<em>200</em>.</p>
13 <p>Во фреймворках принято считать, что<strong>маршрут</strong>- это комбинация метода HTTP и адреса. Другими словами, с точки зрения большинства фреймворков<em>GET /users</em>и<em>POST /users</em>- это разные маршруты со своими обработчиками.</p>
13 <p>Во фреймворках принято считать, что<strong>маршрут</strong>- это комбинация метода HTTP и адреса. Другими словами, с точки зрения большинства фреймворков<em>GET /users</em>и<em>POST /users</em>- это разные маршруты со своими обработчиками.</p>
14 <p>Посмотрим, как это работает на практике. Определим соответствующие маршруты и выполним запросы к ним с помощью curl:</p>
14 <p>Посмотрим, как это работает на практике. Определим соответствующие маршруты и выполним запросы к ним с помощью curl:</p>
15 <p>Таким способом можно добавлять любое количество обработчиков на любые адреса.</p>
15 <p>Таким способом можно добавлять любое количество обработчиков на любые адреса.</p>
16 <h2>Что такое диспетчеризация</h2>
16 <h2>Что такое диспетчеризация</h2>
17 <p>Когда приложение получает запрос, как оно понимает, какой обработчик нужно запускать? Эту задачу решает<strong>диспетчеризация запроса</strong>, реализованная внутри фреймворка. Упрощенно этот процесс выглядит так:</p>
17 <p>Когда приложение получает запрос, как оно понимает, какой обработчик нужно запускать? Эту задачу решает<strong>диспетчеризация запроса</strong>, реализованная внутри фреймворка. Упрощенно этот процесс выглядит так:</p>
18 <ol><li>Фреймворк анализирует параметры запроса и пытается сопоставить два маршрута - добавленный в объект app и полученный в запросе. Другими словами, он сравнивает комбинацию метода запроса и сам адрес. Этот процесс называется<strong>роутингом</strong>или<strong>маршрутизацией</strong></li>
18 <ol><li>Фреймворк анализирует параметры запроса и пытается сопоставить два маршрута - добавленный в объект app и полученный в запросе. Другими словами, он сравнивает комбинацию метода запроса и сам адрес. Этот процесс называется<strong>роутингом</strong>или<strong>маршрутизацией</strong></li>
19 <li>Если во время роутинга фреймворк нашел соответствующий маршрут, тогда вызывается его обработчик. Далее ответ от обработчика отправляется обратно клиенту</li>
19 <li>Если во время роутинга фреймворк нашел соответствующий маршрут, тогда вызывается его обработчик. Далее ответ от обработчика отправляется обратно клиенту</li>
20 <li>Если фреймворк не нашел нужный обработчик, то запускается обработчик по умолчанию, который возвращает ошибку 404</li>
20 <li>Если фреймворк не нашел нужный обработчик, то запускается обработчик по умолчанию, который возвращает ошибку 404</li>
21 </ol>
21 </ol>