Лекции 2025. Java. Белая / Ответы на билеты. Java
.pdf
ресурса или созданию нового ресурса. Например:
Создание новой записи в базе данных (новый пользователь, новый заказ).
Отправка формы, которая инициирует какое-либо действие (например, отправка электронного письма, обработка платежа).
Обновление части ресурса (хотя для этого также может использоваться
). Поскольку
предназначен для изменения состояния, он не является безопасным.
2.Неидемпотентный: Повторное выполнение одного и того же
-запроса может привести к многократным изменениям состояния или созданию нескольких ресурсов.
Например, если вы дважды отправите
-запрос для создания нового заказа, это может привести к созданию двух одинаковых заказов.
Если
-запрос обновляет счетчик, каждый повторный запрос увеличит счетчик.
Другие методы:
: Безопасный и идемпотентный. Предназначен для получения представления ресурса. Не должен изменять состояние.
: Безопасный и идемпотентный. Аналогичен
, но сервер возвращает только заголовки, без тела ответа.
: Небезопасный, но идемпотентный. Предназначен для полного обновления существующего ресурса или создания нового ресурса по указанному URI. Если вы отправляете один и тот же
-запрос несколько раз с теми же данными на тот же URI, результат будет таким же, как после первого запроса (ресурс будет создан или обновлен до этого состояния).

: Небезопасный, но идемпотентный. Предназначен для удаления ресурса. Повторные
-запросы на тот же URI после первого успешного удаления не будут иметь дополнительного эффекта (ресурс уже удален).
: Безопасный и идемпотентный. Используется для получения информации о коммуникационных опциях для целевого ресурса (например, какие HTTP-методы поддерживаются).
: Безопасный и идемпотентный. Используется для диагностики, возвращает клиенту полученный запрос.

: Небезопасный и обычно неидемпотентный. Предназначен для частичного обновления ресурса. Идемпотентность
зависит от семантики операции обновления. Например, операция "добавить элемент в список" не идемпотентна, а "установить значение поля" — идемпотентна. В общем случае
не считается идемпотентным.
: Используется для установления туннеля к серверу, идентифицированному целевым ресурсом. Его свойства безопасности/ идемпотентности специфичны для контекста туннелирования.
Ответ на вопрос:
Метод, который наиболее явно "не является неизменяемым" (в смысле небезопасный и неидемпотентный), это
.
Методы
,
,
также изменяют состояние (небезопасные), но
и
являются идемпотентными, а
— обычно нет.
Если под "неизменяемым" подразумевается только "безопасный", то все методы, кроме
,
,
,
, являются "изменяемыми".
115. Какие есть методы отправки данных с клиента на сервер?
Существует несколько HTTP-методов, которые используются для отправки данных с клиента на сервер. Выбор метода зависит от семантики операции и характера отправляемых данных.
Основные методы для отправки данных:
1.
(с ограничениями):
Основное назначение: Запрос представления ресурса.
Как данные могут быть отправлены: Данные могут быть переданы как параметры в строке запроса URL (query string).
Здесь
и
— это данные, отправляемые на сервер.
Ограничения и характеристики:
Длина URL ограничена: Разные браузеры и серверы имеют разные ограничения на максимальную длину URL (обычно около 2000 символов, но лучше ориентироваться на меньшие значения). Это ограничивает объем данных, которые можно передать.
Данные видны в URL: Параметры запроса отображаются в адресной строке браузера, логах сервера, истории браузера. Поэтому
не
подходит для передачи чувствительных данных (пароли, личная информация).
Идемпотентность и безопасность:
-запросы должны быть безопасными (не изменять состояние сервера) и идемпотентными. Они предназначены для получения данных.
Кеширование:
-запросы могут кешироваться браузерами и проксисерверами.
Закладки: URL с
-параметрами можно легко добавить в закладки.
Когда использовать: Для запросов, которые получают данные, например, поисковые запросы, запросы на получение определенной страницы с параметрами фильтрации или сортировки.
2.
:
Основное назначение: Отправка данных на сервер для обработки. Обычно это приводит к изменению состояния на сервере или созданию нового
ресурса.
Как данные отправляются: Данные передаются в теле HTTP-запроса
(request body).
Характеристики:
Нет ограничений на объем данных (теоретически, практические ограничения могут быть наложены сервером).
Данные не видны в URL: Более безопасен для передачи чувствительной информации по сравнению с
.
Небезопасный и неидемпотентный: Повторная отправка
-запроса может привести к повторным изменениям или созданию дубликатов. Браузеры обычно предупреждают пользователя при попытке повторно отправить
-запрос (например, при обновлении страницы).
Не кешируется по умолчанию (если нет специальных заголовков кеширования).
Нельзя добавить в закладки (по крайней мере, не так просто, как
).
Типы контента в теле запроса (
заголовок):
: Стандартный тип для отправки данных HTML-форм. Данные кодируются как пары ключ=значение, разделенные амперсандами (аналогично query string, но в теле).
: Используется для отправки форм, содержащих файлы, а также обычные текстовые данные.
: Для отправки данных в формате JSON (часто в AJAXзапросах и API).
: Для отправки данных в формате XML.
: Для отправки простого текста.
Когда использовать: Создание новых ресурсов, отправка форм с большим объемом данных или файлами, выполнение операций, изменяющих состояние сервера.
3.
:
Основное назначение: Полное обновление существующего ресурса по указанному URI или создание нового ресурса, если он по этому URI не существует.
Как данные отправляются: Данные (представление ресурса) передаются в
теле HTTP-запроса.
Характеристики:
Идемпотентный: Многократная отправка одного и того же
-запроса с теми же данными на тот же URI должна приводить к одному и тому же состоянию ресурса.
Небезопасный: Изменяет состояние ресурса.
Клиент указывает URI целевого ресурса.
Когда использовать: Обновление полного представления ресурса или создание ресурса по известному URI.
4.
:
Основное назначение: Частичное обновление существующего ресурса.
Как данные отправляются: Данные (инструкции по изменению ресурса) передаются в теле HTTP-запроса. Формат этих инструкций может быть разным
(например, JSON Patch, XML Patch).
Характеристики:
Обычно неидемпотентный (хотя некоторые операции
могут быть идемпотентными).
Небезопасный: Изменяет состояние ресурса.
Когда использовать: Когда нужно обновить только некоторые поля ресурса, не передавая все его представление целиком (что может быть более эффективно, чем
).
Сводная таблица методов отправки данных:
Метод |
Передача |
Безопасность |
Идемпотентность |
Типичное |
|
данных |
|
|
использование |
|
|
|
|
|
|
В URL |
Да |
Да |
Получение данных, |
|
(query |
|
|
поиск, фильтрация (не |
|
string) |
|
|
для чувствительных |
|
|
|
|
данных) |
|
|
|
|
|
|
В теле |
Нет |
Нет |
Создание ресурсов, |
|
запроса |
|
|
отправка форм, |
|
|
|
|
операции с побочными |
|
|
|
|
эффектами |
|
|
|
|
|
|
В теле |
Нет |
Да |
Полное обновление |
|
запроса |
|
|
или создание ресурса |
|
|
|
|
по URI |
|
|
|
|
|
|
В теле |
Нет |
Обычно нет |
Частичное обновление |
|
запроса |
|
|
ресурса |
|
|
|
|
|
Хотя
и
тоже являются HTTP-методами, они обычно не используются для "отправки данных" в том же смысле, что
или
(хотя
может иметь тело запроса, но это редко используется и часто игнорируется).
удаляет ресурс, а
запрашивает информацию о возможностях сервера.
Выбор правильного HTTP-метода важен для соответствия семантике HTTP и для правильной работы веб-приложений, кеширующих прокси и других компонентов вебинфраструктуры.
116. В чем разница между методами GET и POST?
и
— это два наиболее часто используемых HTTP-метода, но они предназначены для разных целей и имеют существенные различия в поведении и характеристиках.
Характеристика |
|
|
|
|
|
|
|
|
|||
Основное |
Запрос (получение) |
Отправка данных на сервер для |
|||
назначение |
представления ресурса с |
обработки, что обычно приводит |
|||
|
сервера. |
|
|
к изменению состояния или |
|
|
|
|
|
созданию нового ресурса. |
|
|
|
|
|||
Передача данных |
Данные передаются как |
Данные передаются в теле |
|||
|
часть URL (в строке |
(body) HTTP-запроса. |
|||
|
запроса, query string). |
|
|
||
|
|
|
|||
Видимость |
Данные видны в URL |
Данные не видны в URL. |
|||
данных |
(адресная строка, логи, |
|
|
||
|
история браузера). |
|
|
||
|
|
|
|
||
Ограничение на |
Да, ограничено |
|
Нет строгих ограничений на |
||
объем данных |
максимальной длиной |
объем данных (ограничения |
|||
|
URL (зависит от браузера/ |
накладываются конфигурацией |
|||
|
сервера, обычно ~2KB). |
сервера). |
|
||
|
|
|
|||
Безопасность |
Да (безопасный). Не |
Нет (небезопасный). Обычно |
|||
метода (Safe) |
должен изменять |
изменяет состояние ресурса на |
|||
|
состояние ресурса на |
сервере. |
|
||
|
сервере. |
|
|
|
|
|
|
|
|||
Идемпотентность |
Да (идемпотентный). |
Нет (неидемпотентный). |
|||
|
Повторные одинаковые |
Повторные одинаковые запросы |
|||
|
запросы дают тот же |
могут привести к многократным |
|||
|
результат и не имеют |
изменениям или созданию |
|||
|
дополнительных |
дубликатов. |
|
||
|
побочных эффектов. |
|
|
||
|
|
|
|
|
|
Кеширование |
Результаты |
-запросов |
Результаты |
-запросов не |
|
|
могут кешироваться |
кешируются по умолчанию |
|||
|
браузерами и прокси. |
(если нет специальных |
|||
|
|
|
|
заголовков). |
|
|
|
|
|
||
Закладки/История |
URL с |
-параметрами |
-запросы обычно нельзя |
||
|
можно легко добавить в |
напрямую добавить в закладки, |
|||
|
закладки и они |
|
и их параметры не так легко |
||
|
сохраняются в истории |
видны в истории. |
|||
|
браузера. |
|
|
|
|
|
|
|
|||
Повторная |
Безопасно для повторной |
Браузер обычно предупреждает |
|||
отправка |
отправки (например, при |
пользователя перед повторной |
|||
(браузером) |
обновлении страницы). |
отправкой |
-запроса |
||
|
|
|
|
|
|
Характеристика |
|
|
|
|
|
|
|
(например, при обновлении |
|
|
страницы после отправки |
|
|
формы), чтобы избежать |
|
|
дублирования операции. |
|
|
|
Типы данных |
Обычно используется для |
Может передавать любые типы |
|
передачи простых |
данных, включая бинарные |
|
текстовых данных |
(файлы), благодаря |
|
(строки, числа). |
заголовку (например, |
|
|
). |
|
|
|
Использование в |
- |
- данные |
HTML-формах |
данные формы |
формы отправляются в теле |
|
добавляются к URL. |
запроса. |
|
|
|
Когда использовать
:
Для получения данных с сервера (например, загрузка веб-страницы, получение списка продуктов, поиск информации).
Когда операция является безопасной и идемпотентной.
Когда параметры запроса не содержат чувствительной информации.
Когда вы хотите, чтобы URL можно было легко передать, добавить в закладки или чтобы результаты кешировались.
Для запросов, которые не изменяют состояние на сервере.
Когда использовать
:
Для создания новых ресурсов на сервере (например, регистрация пользователя, добавление товара).
Для обновления существующих ресурсов, если операция не идемпотентна или если передается большой объем данных.
Для отправки данных, которые изменяют состояние на сервере (например, выполнение заказа, отправка сообщения).
Когда передаются чувствительные данные (например, пароли, данные кредитных карт), так как они не отображаются в URL (хотя для настоящей безопасности всегда нужно использовать HTTPS).
Когда объем отправляемых данных велик (например, загрузка файлов, большие текстовые поля).
Когда операция не является идемпотентной.
Пример из жизни:
: Когда вы вводите адрес сайта в браузере или нажимаете на ссылку – это
-запрос на получение страницы. Когда вы ищете что-то в Google – это
-
запрос с вашим поисковым запросом в URL.
: Когда вы заполняете форму регистрации на сайте и нажимаете "Отправить"
– это обычно
-запрос, отправляющий ваши данные на сервер. Когда вы пишете комментарий и публикуете его – это
.
Важно:
Несмотря на то, что
не предназначен для изменения данных, некоторые плохо спроектированные веб-приложения могут использовать
для операций, изменяющих состояние (например, ссылка "удалить товар"). Это плохая практика, так как поисковые роботы или случайные переходы по таким ссылкам могут привести к нежелательным изменениям данных. Всегда используйте HTTP-методы в соответствии с их семантическим назначением.
117. Что такое Java Server Pages (JSP)?
JavaServer Pages (JSP) — это технология на стороне сервера, разработанная Sun Microsystems (теперь Oracle), которая позволяет веб-разработчикам создавать
динамический веб-контент (обычно HTML, XML или другие текстовые документы) с использованием Java-кода, встроенного непосредственно в статические шаблоны.
По сути, JSP — это текстовый документ (чаще всего HTML-файл с расширением
), который содержит:
1.Статический контент (шаблон): Обычный HTML, CSS, JavaScript, XML или любой другой текст, который будет отправлен клиенту как есть.
2.JSP-элементы (JSP Elements): Специальные теги и конструкции, которые позволяют встраивать Java-код, управлять потоком выполнения, использовать JavaBeans, вызывать собственные теги и т.д. Эти элементы обрабатываются на сервере.
Как работает JSP (упрощенно):
1.Клиент (браузер) запрашивает JSP-страницу (например,
).
2.Контейнер сервлетов (например, Tomcat) получает запрос.
3.Если это первый запрос к данной JSP-странице или если JSP-файл был изменен с момента последнего запроса:
Фаза трансляции (Translation Phase): JSP-контейнер транслирует (преобразует) JSP-файл в исходный код Java-сервлета (
файл).
Фаза компиляции (Compilation Phase): Сгенерированный
файл сервлета компилируется в байт-код (
файл).
4. Фаза выполнения (Execution Phase):
Контейнер загружает скомпилированный класс сервлета (если он еще не загружен) и создает его экземпляр (или использует существующий).
Для каждого запроса контейнер вызывает метод
этого сгенерированного сервлета (аналог
для обычных сервлетов). Код внутри
(который был сгенерирован из JSP-элементов и статического контента) выполняется. Java-код выполняется, а статический контент записывается напрямую в
объекта
. Результат (обычно HTML-страница) отправляется клиенту.
Ключевые характеристики и цели JSP:
1.Разделение представления и логики (Separation of Concerns): Хотя JSP
позволяет встраивать Java-код, его основная идея — отделить HTML-разметку (представление) от Java-кода (бизнес-логика). Идеально, когда Java-код в JSP используется минимально, в основном для вывода данных, подготовленных сервлетами или другими компонентами (например, с использованием Expression Language и JSTL).
2.Упрощение разработки веб-интерфейсов: Разработчикам, знакомым с HTML,
проще создавать динамические страницы, вставляя специальные теги, чем писать весь HTML-код с помощью
в сервлетах.
3.Повторное использование компонентов: JSP поддерживает использование:
JavaBeans: Для инкапсуляции данных и бизнес-логики. Пользовательских тегов (Custom Tags): Для создания переиспользуемых компонентов представления.
JSTL (JSP Standard Tag Library): Стандартный набор тегов для общих задач (циклы, условные операторы, форматирование, работа с XML, SQL и т.д.), который помогает уменьшить количество Java-кода (скриптлетов) в JSP.
4.Платформенная и серверная независимость: Как и сервлеты, JSP-страницы могут работать на любом сервере, поддерживающем спецификацию JSP.
5.Интеграция с сервлетами: JSP и сервлеты тесно интегрированы. Сервлет может подготовить данные и передать (forward) запрос на JSP для отображения.
Основные JSP-элементы:
Директивы (Directives): Управляют общей структурой JSP-страницы и тем, как она транслируется. Начинаются с
.
: Определяет атрибуты страницы (например, язык, импорт классов, тип контента, страница ошибок, управление сессией).
: Включает содержимое другого файла (статически, на этапе трансляции).
: Объявляет использование библиотеки пользовательских тегов (например, JSTL).
Скриптовые элементы (Scripting Elements): Позволяют вставлять Java-код.
Использование скриптлетов не рекомендуется в современном JSP-
программировании в пользу EL и JSTL.
Скриптлеты (Scriptlets):
(произвольный Java-код).
Выражения (Expressions):
(значение выражения преобразуется в строку и выводится в ответ).
Объявления (Declarations): 
(код помещается на уровень класса сгенерированного сервлета). Действия (Actions): XML-подобные теги, которые выполняют определенные действия во время обработки запроса. Начинаются с
.
: Находит или создает экземпляр JavaBean.
: Устанавливает свойство JavaBean.
: Получает значение свойства JavaBean и выводит его.
: Включает вывод другого ресурса (сервлета или JSP) динамически, во время выполнения запроса.
: Передает обработку запроса другому ресурсу.
: Передает параметр при
или
.
Комментарии:
(не попадает в итоговый HTML-ответ).
(попадает в итоговый HTML-ответ).
EL (Expression Language): Начиная с JSP 2.0, EL (
) предоставляет простой способ доступа к данным (атрибутам запроса, сессии, приложения, параметрам, свойствам JavaBeans) без написания Java-кода.
JSTL (JSP Standard Tag Library): Набор тегов для общих задач (условия, циклы, работа со строками, URL, форматирование и т.д.), который значительно уменьшает необходимость в скриптлетах.
Пример простой JSP-страницы:
