Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции 2025. Java. Белая / Ответы на билеты. Java

.pdf
Скачиваний:
4
Добавлен:
02.01.2026
Размер:
4.52 Mб
Скачать

Примеры (генерируются с помощью JSP-элементов):

Результаты выполнения Java-кода:

Вывод из JSP-выражений: (выведет текущую дату и время).

Вывод, сгенерированный внутри JSP-скриптлетов:

.

Данные из JavaBeans:

Вывод свойств бина:

.

Результаты работы JSP-действий:

Содержимое, включенное с помощью .

Данные, полученные с помощью Expression Language (EL):

(где - это бин в одной из областей видимости).

.

Вывод, сгенерированный тегами из библиотек тегов (например, JSTL):

Циклы:

.

Условные блоки:

.

Форматирование данных:

 

.

 

Обработка:

Во время фазы трансляции JSP-элементы, генерирующие динамический контент, преобразуются в соответствующий Java-код в сгенерированном сервлете.

Во время выполнения запроса этот Java-код выполняется. Он может обращаться к базам данных, вызывать бизнес-логику, читать параметры запроса, работать с атрибутами сессии и т.д., и на основе этого генерировать HTML или другой текст, который затем смешивается со статическим содержимым и отправляется клиенту.

Характеристики:

Может меняться от запроса к запросу.

Зависит от входных данных, состояния приложения, времени и т.д. Требует вычислений и обработки на сервере.

Как они сочетаются в JSP:

JSP-страница обычно представляет собой комбинацию статического и динамического содержимого. Статический HTML-код формирует структуру и основной макет страницы, а JSP-элементы вставляют в этот макет динамически изменяемые данные или генерируют части контента на лету.

Пример:

В этом примере:

Теги , , , , , , — это статическое содержимое.

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

Блок и его содержимое (если условие истинно) — динамическое содержимое, контролируемое JSTL.

Выражение динамическое содержимое, вычисляемое Java-кодом.

Разделение на статическое и динамическое содержимое является основой того, как JSP позволяет создавать гибкие и интерактивные веб-страницы.

122. Взаимодействие JSP - сервлет - JSP.

Взаимодействие между JSP-страницами и сервлетами является основой многих Java веб-приложений, особенно тех, которые следуют архитектурному паттерну Model- View-Controller (MVC) или его вариациям (например, Model 2 MVC).

Типичный сценарий взаимодействия (MVC Model 2):

1. Клиентский запрос (Client Request):

Пользователь инициирует действие, отправляя HTTP-запрос на сервер (например, нажимая кнопку, переходя по ссылке). Этот запрос обычно направляется на сервлет-контроллер.

URL запроса маппится на сервлет (через или ).

2. Обработка запроса сервлетом-контроллером (Servlet - Controller):

Получение и валидация данных: Сервлет получает параметры запроса (), данные из тела запроса, заголовки и т.д. Он может выполнять валидацию этих данных.

Взаимодействие с бизнес-логикой (Model): Сервлет вызывает соответствующие классы бизнес-логики (сервисные классы, EJB, DAO - Data Access Objects) для выполнения необходимых операций (например, получение данных из базы, обновление данных, выполнение вычислений). Результаты этих операций (данные модели) возвращаются сервлету.

Подготовка данных для представления: Сервлет берет данные, полученные от бизнес-логики (модели), и упаковывает их в объекты (часто JavaBeans или

POJO).

Сохранение данных в области видимости запроса (или сессии): Сервлет помещает эти объекты данных в атрибуты объекта (или

, если данные нужны для нескольких запросов).

Выбор представления (View): На основе результата обработки запроса или параметров, сервлет решает, какую JSP-страницу (или другой ресурс представления) использовать для отображения ответа.

Передача управления на JSP (Forwarding): Сервлет использует

для передачи (forward) запроса (вместе с объектами и , содержащими атрибуты) на выбранную JSP-страницу.

3. Отображение данных JSP-страницей (JSP - View):

JSP-страница получает управление.

Она извлекает данные (модель) из атрибутов запроса (или сессии, или приложения), которые были установлены сервлетом. Это обычно делается с использованием Expression Language (EL) или, реже, скриптлетами

().

Генерация HTML: JSP использует эти данные для динамической генерации HTML-разметки. JSTL (JSP Standard Tag Library) часто используется для условного отображения, итерации по коллекциям и форматирования данных без использования Java-кода в скриптлетах.

JSP-страница не содержит сложной бизнес-логики; ее основная задача — отображение.

4. Отправка ответа клиенту:

После того как JSP-страница сгенерировала HTML (или другой контент), этот контент (как часть объекта ) отправляется контейнером сервлетов обратно клиенту (браузеру).

Пример цикла "JSP -> Сервлет -> JSP":

Это может произойти, например, при отправке HTML-формы:

1. Начальная JSP-страница (например, ):

Содержит HTML-форму, которая отправляет данные на URL сервлета методом

POST.

2. Сервлет-контроллер (например, ):

Получает данные из формы ().

Выполняет валидацию и бизнес-логику (например, сохраняет данные в БД).

Подготавливает данные для ответа (например, сообщение об успехе или ошибке, обновленные данные).

Сохраняет эти данные в атрибутах запроса.

Передает управление на другую JSP-страницу (например, ) для отображения результата.

3. Результирующая JSP-страница (например, ):

Отображает сообщение об успехе или ошибке, полученное из атрибутов запроса.

Преимущества такого взаимодействия:

Разделение ответственностей: Четкое разделение между логикой обработки (сервлет) и логикой представления (JSP).

Поддерживаемость: Легче изменять внешний вид (JSP) без затрагивания бизнеслогики (сервлет), и наоборот.

Тестируемость: Бизнес-логику в сервлетах и сервисных классах легче тестировать изолированно.

Повторное использование: JSP-страницы могут использоваться для отображения данных, подготовленных разными сервлетами. Сервлеты могут перенаправлять на разные JSP в зависимости от ситуации.

Это взаимодействие является основой для большинства традиционных Java вебприложений.

123. Какие области видимости переменных существуют в JSP?

В JSP существуют четыре стандартные области видимости (scopes), в которых могут храниться атрибуты (объекты, доступные по имени). Эти области видимости определяют, как долго атрибут существует и откуда он доступен. Доступ к атрибутам в этих областях обычно осуществляется с помощью Expression Language (EL) или через соответствующие Java-объекты (неявные объекты JSP или объекты, полученные программно).

1. (Страница):

Описание: Атрибуты, хранящиеся в этой области, доступны только в пределах текущей JSP-страницы, включая любые файлы, статически включенные в нее с помощью директивы .

Время жизни: Атрибуты существуют только во время обработки текущего запроса к данной JSP-странице. Они уничтожаются после того, как страница сгенерировала ответ.

Доступ через Java: Используется неявный объект .

Доступ через EL:

Когда использовать: Для временных переменных, которые нужны только для логики отображения на одной конкретной странице и не должны передаваться дальше. Используется реже, чем другие области, так как локальные переменные в скриптлетах или EL-выражения часто покрывают эти нужды.

2. (Запрос):

Описание: Атрибуты доступны в рамках одного HTTP-запроса. Они видны на исходной JSP-странице, а также на любой другой странице или сервлете, на который запрос был передан (forwarded) с помощью . Они также видны ресурсам, включенным с помощью или .

Время жизни: Атрибуты существуют с момента их установки до тех пор, пока не будет отправлен ответ клиенту на данный запрос.

Доступ через Java: Используется неявный объект (экземпляр

).

Доступ через EL: (или просто

, так как EL ищет по областям в определенном порядке, начиная с , затем , , ).

Когда использовать: Наиболее частая область для передачи данных от сервлета-контроллера к JSP-представлению в паттерне MVC. Для данных, которые релевантны только для текущего запроса.

3. (Сессия):

Описание: Атрибуты доступны в рамках одной пользовательской сессии.

Они видны всем страницам и сервлетам, которые обрабатывают запросы от одного и того же клиента (браузера) на протяжении всей его сессии.

Время жизни: Атрибуты существуют до тех пор, пока сессия не будет инвалидирована (например, по таймауту, явным вызовом , или при закрытии браузера, если используются сессионные cookies).

Доступ через Java: Используется неявный объект (экземпляр ). Необходимо убедиться, что сессия существует (например,

- это значение по умолчанию).

Доступ через EL:

Когда использовать: Для хранения информации, специфичной для пользователя, которая должна сохраняться между несколькими запросами от этого пользователя (например, информация о залогиненном пользователе, содержимое корзины покупок, пользовательские настройки).

4. (Приложение):

Описание: Атрибуты доступны всем пользователям и всем компонентам (сервлетам, JSP, фильтрам, слушателям) всего веб-приложения.

Время жизни: Атрибуты существуют с момента запуска веб-приложения (или с момента их установки) до тех пор, пока веб-приложение не будет остановлено или выгружено.

Доступ через Java: Используется неявный объект (экземпляр

).

Доступ через EL:

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

Порядок поиска атрибутов в EL (если область не указана явно):

Когда вы используете EL без явного указания области (например, ), JSP-контейнер ищет атрибут в следующем порядке:

1.

2.

3.

4.

Первый найденный атрибут с таким именем будет использован. Если атрибут не найден ни в одной из областей, EL вернет (или пустую строку в некоторых контекстах вывода, если используется без и значение null).

Пример использования разных областей в JSP:

Правильный выбор области видимости для атрибутов важен для управления состоянием веб-приложения, эффективного использования памяти и обеспечения корректного обмена данными между его компонентами.

124. Почему не нужно конфигурировать стандартные JSP теги в web.xml?

Стандартные JSP теги, о которых обычно идет речь в этом контексте, это:

1.Стандартные действия JSP (JSP Standard Actions): Теги с префиксом ,

такие как , , , , , , , , , , , , , .

2.JSTL (JSP Standard Tag Library): Набор библиотек тегов (core, fmt, sql, xml,

functions) для общих задач. Обычно используется с префиксами (core), (formatting) и т.д.

Причины, по которым их НЕ нужно конфигурировать в (в смысле объявления для них, как для пользовательских библиотек тегов):

Встроенная поддержка контейнером:

Стандартные действия JSP () являются неотъемлемой частью

спецификации JSP. Контейнер сервлетов (JSP-контейнер) знает о них по умолчанию и умеет их обрабатывать без какой-либо дополнительной конфигурации. Их префикс зарезервирован и понятен контейнеру.

Автоматическое распознавание JSTL (при правильном подключении):

Для использования JSTL вам необходимо:

1.Добавить JAR-файлы JSTL в ваше приложение (обычно в каталог или как зависимость в Maven/Gradle). Основные JAR-файлы:

и (или один в старых версиях, или

и для

Jakarta EE).

2.Объявить использование библиотеки тегов на JSP-странице с

помощью директивы , указав URI библиотеки.

Контейнер сервлетов, поддерживающий JSTL (а большинство современных контейнеров его поддерживают), автоматически распознает эти стандартные URI ( и т.д.) и связывает их с реализациями тегов из JAR-файлов JSTL, находящихся в . Нет необходимости прописывать для JSTL элемент в , указывая путь к TLD-файлу, как это делается для пользовательских библиотек тегов. Стандартные URI JSTL обрабатываются контейнером особым образом.

Когда используется для конфигурации тегов: