Уровень представления JSP, EL-expressions, JSTL
Страница 2 Что такое JSP JavaServer Pages (JSP) позволяют вам отделить динамическую часть ваших страниц от статического HTML. Вы, как обычно, пишете обычный код в HTML, используя для этого любую программу для создания Web страниц. Пример секции JSP страницы, результатом которой будет что-то вроде "Спасибо за покупку Core Web Programming" по запросу с URL: Спасибо за покупку
Страница 3 Как получить содержимое JSP Нужно просто отправить серверу запрос на получение ресурса с именем JSP страницы Пример: Пользователь отправляет запрос на получение содержимого JSP страницы:
Страница 4 JSP = Servlet 1.Контейнер транслирует JSP в исходный текст класса сервлета (.java) 2.Контейнер компилирует созданный код в класс сервлета. 3.Контейнер загружает созданный класс и направляет запрос для обработки созданному сервлету
Страница 5 Пример JSP
Страница 6 Текст шаблона: Статический HTML Как правило большую часть вашей JSP страницы составляет статический HTML, называемый текстом шаблона. Чтобы отобразить последовательность символов "
Страница 7 Элементы скриптов JSP: Выражения Выражения JSP применяются для того чтобы вставить значения Java непосредственно в вывод. Для этого используется следующая форма: Выражения Java вычисляются, конвертируются в строку и вставляются в страницу. Эти вычисления происходит во время выполнения (то есть при при запросе страницы), а потому существует полный доступ к информации о самом запросе Пример: Текущее время: Имя вашего хоста:
Страница 8 Элементы скриптов JSP: код java Если вы хотите сделать что-то большее чем вставка простых выражений, скриплеты JSP дадут вам возможность вставить любой код в метод сервлета, который будет создан при обработке данной страницы. Скриплеты имеют следующий вид: Пример: или Удачного Вам дня! Не удачного Вам дня!
Страница 9 Элементы скриптов JSP: Объявления Объявления JSP позволят вам задать методы или поля, для вставки в тело класса сервлета (вне метода service, обрабатывающего запрос). Они имеют следующую форму: Пример: Количество обращений к странице с момента загрузки сервера:
Страница 10 Директивы JSP Директивы JSP воздействуют на всю структуру класса сервлета. Обычно они имеют следующую форму: Вы также можете объединить установку нескольких атрибутов для одной директивы:
Страница 11 Директивы JSP: page import="пакет.class1[,...,пакет.classN]". Позволяет вам задать пакеты, которые должны быть импортированы. Например: Атрибут import - единственный атрибут, допускающий многократное применение. contentType="MIME-Тип; [charset=Кодировка-Символов]" Задает тип MIME для вывода. По умолчанию используется text/html. К примеру, директива приводит к тому же результату, что и использование скриплета errorPage="url". Задает JSP страницу, которая вызывается в случае возникновения каких-либо событий Throwables, которые не обрабатываются на данной странице.
Страница 12 Директивы JSP: include Эта директива позволяет вам включать файлы в процессе трансляции JSP страницы в сервлет. Использование директивы выглядит следующим образом: Пример: Руководство по сервлетам: JavaServer Pages (JSP) 1.0
Страница 13 Заранее определенные переменные[1] request Это объект HttpServletRequest, связанный с запросом, который позволяет вам обращаться к параметрам запроса (через метод getParameter), типу запроса (GET, POST, HEAD, и т.д..), и входящим HTTP заголовкам (cookies, Referer, и т.д..). response Это объект типа HttpServletResponse, связанный с ответом на запрос клиента. out то объект типа PrintWriter, используемый для отправки вывода клиенту.
Страница 14 session Это объект типа HttpSession, связанный с запросом. Сессии создаются автоматически, и эта переменная существует даже если нет ссылок на входящие сессии application Это объект типа ServletContext полученный через использование метода getServletConfig().getContext(). config Это объект типа ServletConfig для текущей страницы. Заранее определенные переменные[2]
Страница 15 Java Bean Java класс, созданный по определённым правилам Используется для объединения нескольких объектов в один для удобной передачи данных
Страница 16 Правила описания JavaBean Класс должен иметь public конструктор без параметров. Свойства класса должны быть доступны через get, set и другие методы (так называемые методы доступа), которые подчинятся стандартному соглашению об именах. Класс должен быть сереализуем Он не должен содержать никаких методов обработки событий.
Страница 17 Правила именования JavaBeans Необходимо объявлять публичные нестатические методы set и get для свойств JavaBean. Атрибуту типа boolean в классе Bean должны соответствовать методы is и set.
Страница 18 JavaBeans и POJO Т.к. требования в основном изложены в виде соглашения, а не интерфейса, разработчики рассматривают JavaBeans, как Plain Old Java Object, которые следуют определённым правилам именования POJO могут содержать любые методы Требования сериализации может быть игнорировано
Страница 19 Пример POJO
Страница 20 Вернемся а JSP: Действия Действия JSP используют конструкции с синтаксисом XML для управления работой ядра сервлета. Вы можете динамически подключать файл, многократно использовать компоненты JavaBeans, направить пользователя на другую страницу или сгенерировать HTML для Java plugin.
Страница 21 Действие jsp:include Это действие позволяет вам вставлять файлы в генерируемую страницу. Синтаксис действия: В отличие от директивы include, которая вставляет файл на этапе трансляции JSP страницы, это действие вставляет файл в процессе запроса
Страница 22 Действие jsp:useBean Это действие позволяет вам загружать JavaBean для последующего использования на JSP странице. Синтаксис для указания используемого bean: id - это идентификатор, используемый для ссылки на bean-компонент в других элементах JSP и скриптлетах
Страница 23 Действие jsp:useBean - Пример Рассмотрим данный bean-компонент, объявленный в области действия request: В service() методе эквивалентный код сервлета будет выглядеть следующим образом: PersonBean user = (PersonBean)request.getAttribute("user"); If(user==null) { user=new UserBean(); request.setAttribute("user",user); }
Страница 24 Действие jsp:setProperty Используется для присвоения значений свойствам ранее описанных beans. Использование:... или...
Страница 25 Действие jsp:setProperty Параметры: name – обязательный атрибут служит для задания bean, свойства которого будут устанавливаться property - обязательный атрибут устанавливает свойство, которое вы хотите установить value - необязательный атрибут устанавливает значение свойств (если не указан = NULL) param - Этот необязательный атрибут устанавливает параметр запроса, используемый для получения свойства
Страница 26 Действие jsp:getProperty Определяет значение свойства bean, конвертирует его в строку и направляет в поток вывода Пример:... Количество предметов: Цена за штуку:
Страница 27 Действие jsp:forward Позволяет вам передать запрос другой странице. Пример:
Страница 28 Язык выражений JSP (EL) Язык EL (Expression Language) был сделан для того, чтобы упростить манипулирование данными в JSP странице. EL появился в спецификации JSP начиная с версии JSP 2.0.
Страница 29 Директивы включения и выключения интерпретации EL выражений Уровень JSP страницы Уровень ДР приложения (web.xml) *.jsp true
Страница 30 Формат EL выражений EL выражение записывается в формате ${выражение}. В следующем примере пользователю выводится сообщение У вас достаточно денег: true, если цена товара меньше либо равна количеству денег пользователя. У вас достаточно денег: ${commodity.price
Страница 31 Еще пример EL Поприветствуем товарища ${user.name} из солнечного ${user.country}! Здесь user – объект JavaBeans, его можно создать на JSP странице, используя тег jsp:useBean: country – свойство объекта ru.zahodi- ka.examples.user
Страница 32 EL: доступ через []
Страница 33 Расширенные объекты EL Map атрибутов различных областей видимости pageScope requestScope sessionScope applicationScope Map request параметров param paramValues Map request header header headerValues Map init параметров initParam pageContext – ссылка на объект pageContext
Страница 34 Расширенные объекты EL: примеры Request param name is: ${param.name} Request param empID is: ${param[empID]} Host is: ${header[host]} Host is: ${header.host}
Страница 35 Операторы EL Арифметические: сложение (+), вычитание (-), умножение (*), деление (/ или div), остаток от деления (% или mod). Логические операторы: И (&& или and), ИЛИ (|| или or), НЕТ (! или not). Операторы сравнения: == (или eq), != (или ne), (или gt), = (или ge). Оператор empty можно использовать для того, чтобы проверить, определено ли значение или нет (равно null).
Страница 36 Скажем скриплетам НЕТ! Исходный текст JSP содержащий скриплеты труден для понимания! Поддерживать скриплеты в JSP неудобно и не эффективно! Команда дизайнеров не знает JAVA! Проблема решается использованием JSTL и пользовательских (Custom) тэгов.
Страница 37 JSTL начало Скачать и скопировать два файла jstl.jar и standard.jar в каталог WEB-INF/lib Чтобы использовать JSTL на странице используйте следующее объявление:
Страница 38 JSTL: цикл
Страница 39 Цикл - свойства атрибута varStatus СвойствоGetterОписание currentgetCurrent()Элемент (коллекции) для текущей итерации цикла indexgetIndex()Индекс итерации (начинается с 0) countgetCount()Индекс итерации (начинается с 1) firstisFirst()Индикатор что текущая итерация является первой lastisLast()Индикатор что текущая итерация является последней begingetBegin()Значение первого элемента EndgetEnd()Значение последнего элемента StepgetStep()Значение атрибута Step
Страница 40 JSTL:
Страница 41 JSTL: условие
Страница 42 JSTL преключатель
Страница 43 JSTL – работа с переменными Установка без использования тела тэга Установка с использованием тела тэга Sheriff, Bartender, Cowgirl Получение
Страница 44 Custom тэги Построение custom тэгов связано с написанием определенного программного кода. Технология JSP предусматривает размещение этого кода в отдельном программном модуле - библиотеке custom тэгов.
Страница 45 Подключение библиотеки тэгов Осуществляется с помощью директивы taglib. Пример: объявляет, что в JSP странице используется библиотека дополнительных тэгов, название каждого из которых начинается с префикса dscat. Например: All Customers
Страница 46 Вопросы?