Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
web-programmirovanie_uchebnoe_posobie.pdf
Скачиваний:
95
Добавлен:
09.02.2015
Размер:
4.9 Mб
Скачать

Учебное пособие по web-программированию (2013)

Рисунок 9.4.

Дополнительную информацию можно найти по адресу: http://www.tutorialspoint.com/jsp/jsp_java_beans.htm

Тема 10. Выражения JSP Expression Language

Основы JSP Expression Language: язык, встроенные объекты, операторы, функции. Описание статических функций с использованием TagLibraryDescriptor.

Способы вывода информации на JSP-страницу:

1.<%= Expression %>

2.<% out.print(Expression); %>

3.<jsp:expression>Expression</jsp:expression>

Результат всегда выводится в формате строки.

Существует язык выражений (Expression Language или EL), специализированный для JSP-страниц.

Формат: ${ expression } Пример: ${ 4.0 >= 3 }

Встроенные объекты EL. pageContext

${ pageContext }

контекст страницы servletContext

${ pageContext.servletContext }

контекст сервлета session

${ pageContext.session }

сессия

-46-

Учебное пособие по web-программированию (2013)

request

${ pageContext.request }

запрос

param

${empty param.Name}

параметр страницы (здесь Name — название параметра) paramValues

${paramValues.Name[1]}

значения параметров (здесь Name[1] — обращение ко 2 параметру по имени Name)

header ${header["host"]}

заголовок

cookie

${cookie.Name.value}

значение Cookie по имени Name

Пример использования объектов EL (рисунок 10.1).

Рисунок 10.1.

Доступ к атрибутам страницы, запроса, сессии и приложения осуществляется классическим способом с использованием следующих объектов:

pageScope

requestScope

sessionScope

<% session.setAttribute("book", "BOOK_VALUE"); %>

${ sessionScope.book }

applicationScope

Операции EL арифметические и сравнения — классические:

-47-

Учебное пособие по web-программированию (2013)

арифметические

+, -, *, / или div, % или mod (деление на цело)

сравнения

==, !=, <, >, <=, >=

логические

and или &&, or или ||, ! или not

проверка на пустой оператор

empty

${empty ""}

Однако работать язык EL будет только в случае, если он включен в дескрипторе развёртывания web.xml либо явно на странице.

web.xml

<jsp-config> <jsp-property-group>

<url-pattern>*.jsp</url-pattern> <el-ignored>false</el-ignored>

</jsp-property-group> </jsp-config>

JSP-страница

<%@page isELIgnored="true|false"%>

В рамках EL можно вызывать статические Java-методы.

Реализация статических методов осуществляется в следующей последовательности:

Шаг 1. Создать статический метод (рисунок 10.2).

Рисунок 10.2.

Шаг 2. Создать tld-файл, в котором описать имя функции (в теге name), класс функции (в теге function-class), описание метода (в теге funcation-signature) (hbceyjr 10.3).

-48-

Учебное пособие по web-программированию (2013)

Рисунок 10.3.

Шаг 3. Подключить tld-файл к JSP-странице с использованием тега taglib (рисунок 10.4). Формат использования taglib:

<%@taglib prefix="имя_префикса" uri="путь_к_tld-файлу" %>

Формат обращения к функции: ${ имя_префикса : имя_функции }

Рисунок 10.4.

Дополнительную информацию можно найти по адресу: http://www.tutorialspoint.com/jsp/jsp_expression_language.htm

Тема 11. JSP Standard Tag Library

Основы JSP Standard Tag Library (JSTL), работа с библиотекой базовых элементов и SQL. Построение одного и того же приложения с использованием скриплетов и JSTL.

SUN разработала набор готовых тегов, которыми может пользоваться

-49-

Учебное пособие по web-программированию (2013)

разработчик. Наиболее распространёнными являются:

Итераторы и теги условий

<c:forEach>, <c:forTokens>, <c:if>, <c:choose>

Использование нескольких языков

I18N

Теги SQL

setDataSource, query, update, transaction, param

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

Готовые теги размещены по библиотекам: Базовая библиотека

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

Теги форматирования i10n и i18n

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

Библиотека SQL

<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>

Библиотека XML

<%@ taglib prefix="xml" uri="http://java.sun.com/jsp/jstl/xml" %>

Дальнейшие примеры тегов будут приводиться с учётом приведённых в данных примерах префиксов.

Теги общего назначения: Установка значений переменных

<c:set var="имя" value="Строковое_значение" scope="page|request|session|application">Вычислимое_значение</c:set>

Удаление переменных

<c:remove var="имя" scope="page|request|session|application"/>

Вывод результатов на страницу

<c:out value="значение" escapeXml="true|false" default="значение по умолчанию"/>

Обработа исключительных ситуаций

<c:catch [var="имя"]> … </c:catch>

Пример использования тегов общего назначения приведён на рисунке 11.1. В примере с помощью тега c:set задаётся зачение переменной с одним и тем же именем, но находящимся в контексте страницы, запроса, сессии и т. п. Затем с помощью c:out забирается одно из значений.

Важно! При разработке программы, использующей JSTL не забудьте подключить библиотеку jstl.jar в проект.

-50-

Учебное пособие по web-программированию (2013)

Рисунок 11.1.

Теги условий: Формат:

<c:if test="условие" [var="имя результата" scope="область видимости"]> Пример:

<c:if test="${user.visitCount > 1}">

С возвращением

</c:if>

Формат:

<c:choose>

<c:when test="условие"> … </c:when> <c:otherwise> … </c:otherwise>

</c:choose>

Пример: <c:choose>

<c:when test="${count == 0}">

Нет попыток

</c:when>

<c:otherwise>

<c:out value="${count}"> попыток </c:otherwise>

</c:choose>

Тег циклов — forEach: Формат:

-51-

Учебное пособие по web-программированию (2013)

<c:forEach var="имя_переменной" items="имя_коллекции"> … </c:forEach>

Пример:

<c:forEach items="${friends}" var="friend"> <h2>

<c:out value="${friend}"/>

</h2>

</c:forEach>

Формат:

<c:forEach var="имя_переменной" begin="начало" end="конец" step="шаг"> … </c:forEach>

Пример:

<c:forEach var="index" begin="0" end="2" step="1"> <h2>

<c:out value="${index}"/> = <c:out value="${friends[index]}"/>

</h2>

</c:forEach>

Тег циклов — forTokens:

Формат:

<c:forTokens items="Строка" delims="разделители" var="имя_переменной" begin="начало" step="шаг"> … </c:forTokens>

Пример:

<c:set var="str" value="Гравитон,Фотон.Бозон Мюон" />

<c:forTokens items="${str}" delims=" ,." var="token" begin="0" step="1"> <h4>

<c:out value="${token}"/>

</h4>

</c:forTokens>

Работа с базой данных осуществляется с использованием следующих ключевых действий:

Настройка соединения

<sql:setDataSource>

Отправка запроса к БД

Получение данных из БД

<sql:query>

Обновление данных в БД

<sql:update>

Работа с БД.

Настройка соединения

<sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/TEST" user="root" password="pass123"/>

В данном примере соединение с БД MySQL, соответственно, можно заменить на другой драйвер. В строке соединения обязательно указываются имя пользователя и пароль. В переменную «snapshot» записывается информация о соединении.

Выполнение запроса

<sql:query dataSource="${snapshot}" var="result"> SELECT * from Employees;

-52-

Учебное пособие по web-программированию (2013)

</sql:query>

С использованием переменной «snapshot» выполняется SQL запрос к БД, результат выполнения записывается в переменную «result».

Чтение данных

<c:forEach var="row" items="${result.rows}"> <tr><td>

<c:out value="${row.name}"/> </td></tr>

</c:forEach>

Используя цикл c:forEach осуществляется проход по всем результатам исполнения запроса на чтение «result», значения одной строки записываются в переменную «row». В данном примере обращение осуществляется к одному полю по имени «name».

Запись данных в БД

<sql:transaction dataSource="${snapshot}"> <sql:update var="countI">

INSERT INTO Students VALUES (104,'Serge', 'Belyaev'); </sql:update>

<sql:update var="countU">

UPDATE Students SET last = 'Chex' WHERE Id = ? <sql:param value="${studId}" />

</sql:update>

</sql:transaction>

Запись в БД осуществляется с использованием транзакций для соединения с БД «snapshot». Выполняются два запроса: на добавление строчки и на обновление строчки. В обоих случаях количество изменённых строк записывается в переменные countI и countU соответственно. В случае запроса на обновление используется тот же формат, что и при использовании PreparedStatement в стандартных JDBC, т. е. вместо знаков вопроса в SQL будут подставляться соответствующие значения, заданные в виде параметров.

В результате одну и ту же программу можно написать как с использованием скриплетов, так и с использованием стандартных тегов. В данной теме на занятиях мы будем писать программу «Угадай число от 1 до 100» с использованием стандартных тегов, в качестве образца логики предлагается использовать такую же программу, написанную с использованием скриплетов (рисунки 11.2 и 11.3).

-53-

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]