Java: Веб-технологии
Теория: HTTP-сессия
Каждая HTTP-сессия определяется двумя вещами:
- Запросом от клиента (браузера)
- Ответом от сервера
Во фреймворках запрос и ответ обычно представляются двумя объектами — request и response.
Javalin тут пошел немного другим путем и объединил все в объекте ctx, который передается каждому обработчику. Через этот объект можно получить любую информацию из HTTP-запроса или добавить данные в HTTP-ответ. В этом уроке вы узнаете, как работать с объектом ctx и разберетесь, как устроена HTTP-сессия в этом случае.
Response
Метод ctx.result() формирует тело ответа:
По умолчанию данные отдаются с заголовком Content-Type: text/plain. Даже если мы передадим в ответе HTML, тип контента все равно не поменяется. Дело в том, что Javalin не анализирует, что мы отдаем. Поэтому нам придется поменять тип:
Если данные нужно отдать в виде JSON, то можно использовать метод ctx.json(). Он формирует JSON и устанавливает Content-Type со значением, равным json:
Кроме тела ответа, можно еще установить заголовки и поменять код ответа:
Еще мы можем выполнить редирект:
Request
Данные запроса можно извлечь множеством методов. Обычно такие вещи смотрят по необходимости, поэтому заучивать их смысла нет. Рассмотрим несколько самых базовых методов:
Параметры запроса
Параметры запроса не считаются частью маршрута и не влияют на выбор обработчика.
Это связано с тем, что они используются для разных вспомогательных целей — например, параметр page обозначает страницу просматриваемого списка. В такой ситуации обработчик один и тот же, а вот данные — разные. Представим, что у нас есть вот такой код:
А теперь посмотрим, что он выводит в лог в ответ на разные запросы из браузера:
Во всех этих случаях фреймворк вызовет один и тот же обработчик, связанный с маршрутом /users. Фреймворк автоматически разбирает эти параметры и дает к ним удобный доступ через методы контекста:
Параметры запроса не связаны с методом HTTP. Они могут приходить как на GET-запросы, так и на все остальные:
Автоматическая конвертация
В примере ниже вы видите переменную page типа строка:
С точки зрения HTTP, все переданные через него данные — это строки. Но с точки зрения внутренней логики все работает по-другому. На самом деле, параметры, которые мы передаем через HTTP-протокол, в большинстве случаев строками не являются.
Поэтому их нужно преобразовывать в строки. Для удобства работы Javalin предоставляет механизм для автоматической конвертации в нужный тип данных:
Но даже этого бывает мало. Для примера представим, что страница не установлена. В таком случае мы должны задать значение по умолчанию, равное единице. Javalin позволяет это сделать:



