web-programmirovanie_metodicheskie_ukazania
.pdfМетодические указания по выполнению лабораторных работ по разработке web-приложений (2014)
2.2.Основные конструкции JSP
2.2.1.JSP-выражения
Формат: <%= Java-выражение %>
Пример: <%=Math.PI%>
2.2.2. Скриплеты
Формат: <% Фрагмент java-кода %>
Пример:
<%
int x = 1; while(x < 100)
x *= x + 1; out.println("x! = " + x); %>
2.2.3. Определения
Формат: <%! Java-определение !%>
Пример:
<%! int x = 5, y = 0; !%>
<%! private String value = "serge"; !%>
2.2.4. Комментарии
Формат:
<%-- Комментарии --%> <!-- Комментарии -->
Пример:
<%-- JSP-комментарии, которые не копируются в сервлет или в поток вывода --%>
<!-- HTML-комментарии, которые видны на клиентской стороне –>
2.2.5. Директивы page
<%@ page import="java.io.*,java.util.*" %>
include
<%@ include file="login.jsp" %>
taglib
<%@ taglib uri="http://mytags.ru/tags" prefix="public" %>
определяет библиотеку тегов
- 11 -
Методические указания по выполнению лабораторных работ по разработке web-приложений (2014)
2.2.6. Действия (стандартные теги jsp)
Перенаправление — forward
<jsp:forward page="local url"> <jsp:forward page="/servlet/login">
Включение — include
<jsp:include page="local url"> <jsp:include page="/login.jsp">
2.2.7. Использование JavaBean
JavaBean — сериализуемый java-класс, реализующий для всех своих свойств методы get() и set().
public class Item implements Serializable { private String title;
public void setTitle(String title) { this.title = title;
}
public String getTitle() { return this.title;
}
}
<jsp:useBean> позволяет создать экземпляр JavaBean. Этот экземпляр может быть доступен как на текущей странице, так и в рамках сессии, приложения в целом или запроса.
Формат:
<jsp:useBean id="beanName" class="BeanClass" scope="page|session|application|request"/>
Пример:
<head>
<jsp:useBean id="BeanID" class="MyBean" scope="page"/> </head>
<jsp:getProperty> позволяет получить значения свойства JavaBean. Формат:
<jsp:getProperty name="BeanID" property="propertyName"/>
Пример:
<body>
<jsp:getProperty name="BeanID" property="name"/> </body>
Важно! JavaBean д.б. определён в <head> jsp-страницы. Свойство должно быть не индексированным. Результат будет приведён в строке.
- 12 -
Методические указания по выполнению лабораторных работ по разработке web-приложений (2014)
<jsp:setProperty> позволяет устанавливать значения свойства JavaBean. Формат:
<jsp:setProperty name="BeanID" property="propertyName" value="propertyValue" param="RequestParameterName"/>
Пример:
<body>
<jsp:setProperty name="BeanID" property="name" value="serge"/>
</body>
Важно! JavaBean д.б. определён в <head> jsp-страницы.
Пример страницы, использующей JavaBean.
<%@page contentType="text/html" pageEncoding="UTF-8"%> <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JavaBeans</title>
<jsp:useBean id="testBean" class="edu.etu.web.TestBean" scope="request" />
</head>
<body>
Свойство: <br>
<jsp:getProperty name="testBean" property="name" /> <br>
Новое значение: <br>
<jsp:setProperty name="testBean" property="name" value="Значение" />
<jsp:getProperty name="testBean" property="name" /> <br>
Значение из строки параметров '?testparam=': <br>
<jsp:setProperty name="testBean" property="name" param="testparam" />
<jsp:getProperty name="testBean" property="name" /> <br> </body>
</html>
2.2.8. Передача параметров на страницу
Передача параметров на страницу может осуществляться несколькими способами: 1. С использованием параметров в методе GET
При этом в URL добавляется знак вопроса, после которого идут пары «имя=значение» через знак «&».
Пример: http://localhost/list.jsp?parameter1=value¶meter2=value
- 13 -
Методические указания по выполнению лабораторных работ по разработке web-приложений (2014)
2. С использованием стандартных тегов jsp:
<jsp:forward page="WEB-INF/include/item-list-line.jsp"> <jsp:param name="parameter1" value="value" /> <jsp:param name="parameter2" value="value" />
</jsp:forward>
3.С использованием атрибутов запроса.
4.С использованием JavaBean, которые хранятся в запросе или сессии.
2.2.9. Создание и использование Cookie
Создание Cookie и передача его на клиента.
javax.servlet.http.Cookie cookie = new Cookie(name, value); response.addCookie(cookie);
Получение списка Cookie для текущей страницы.
Cookie[] cookies = request.getCookies();
2.3. Решение задач лабораторной работы
2.3.1. Получение параметров URL-запроса
В HTML-странице используем директивы для включения скриплетов. Внутри тела скриплета используем обычную java с учётом зарезервированных имён.
request — объект, содержащий информацию о запросе. out — объект, содержащий информацию об ответе.
<%
// получение параметра запроса
String itemId = request.getParameter("item"); if(itemId == null) {
%>
параметр не передан
<%
}
%>
Обратите внимание, что скриплет можно разрывать.
- 14 -
Методические указания по выполнению лабораторных работ по разработке web-приложений (2014)
<%
// получение параметра запроса
String filterId = request.getParameter("filterby"); if(filterId == null) {
out.println("параметр не передан");
}
%>
2.3.2. Создание выпадающего списка в HTML
Выпадающий список в HTML создаётся с использованием тега SELECT и вложенного тега OPTION.
<select name='selectName'>
<option value='one'>first</option> <option value='two'>second</option> <option value='three'>third</option>
</select>
Возможна комбинация с JavaScript и скриплетом для заполнения опций и контроля изменения выбранного значения.
<select name="brand" onchange="itemsChanged();"> <option value="0">-- все --</option>
<%
for (Brand brand : itemList.getBrands()) {
// проход по списку объектов для фильтра
String selected = "";
if (id == itemList.getBrandID()) {
//сравнение с выбранным id selected = "selected";
}
%>
<option value="<%=brand.getId()%>" <%=selected%>> <%=brand.getName()%>
</option>
<%
}
%>
</select>
ВJavaScript необходимо создать метод itemsChanged():
-15 -
Методические указания по выполнению лабораторных работ по разработке web-приложений (2014)
<script>
function itemsChanged(){
var value = document.getElementsByTagName('select')[0].value; window.location='test.html?value=' + value;
}
</script>
2.4. Задание
Необходимо создать JSP-страницу, реализующую страницу списка продуктов интернет-магазина. Основные требования:
1.Список продуктов реализован с использованием JSP.
2.Список обеспечивает фильтрацию продуктов с использованием JavaScript и метода
GET.
3.Из списка есть возможность перехода к карточке продукта (лабораторная №1).
4.Элементы списка формируются в виде JavaBean.
5.Элементы списка отображаются с помощью вложенных (include) страниц. При этом для каждого элемента отображается рисунок, название, краткие характеристики и кнопка «Купить» (реализация появится после создания «Корзины»).
6.На списке есть и реализована кнопка локализации для трёх языков (обязательные: русский, английский).
7.Оформление списка выполнено с использованием CSS.
8.В «шапке» списка находится вложенная (include) страница, содержащая информацию о пользователе со следующими кнопками: «Вход», «Корзина», «История покупок» и кнопка локализации (реализация будет после выполнения соответствующих лабораторных работ).
9.Последние значения фильтра сохраняются в Cookie. При первой загрузке страницы автоматически применяются значения фильтров, сохранённые в Cookie.
Лабораторная работа №3. JSP Standard Tag Library, JSP Expression
Language
Цель: научить студентов использовать JSP Standard Tag Library, JSP Expression Language.
3.1.Понятие JSP Standard Tag Library, JSP Expression Language
JSP Standard Tag Library (JSTL) — стандартная библиотека тегов JSP, обеспечивающая программиста дополнительными возможностями.
JSP Expression Language (EL) — язык выражений, активно используемый в JSTL.
- 16 -
Методические указания по выполнению лабораторных работ по разработке web-приложений (2014)
3.2.Основные элементы JSTL и JSP EL
3.2.1.JSP Expression Language
Существует язык выражений, специализированный для JSP-страниц.
Формат: ${ expression } Пример: ${ 4.0 >= 3 }
Встроенные объекты EL pageContext
${ pageContext }
контекст страницы servletContext
${ pageContext.servletContext }
контекст сервлета
session
${ pageContext.session }
сессия
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
Для корректной работы на странице должна быть директива:
<%@page isELIgnored="true|false"%>
3.2.2. Использование статических методов в EL
1. Необходимо создать класс со статическим методом. Например, класс edu.etu.web.Utils и метод getCurrentDate(), возвращающий текущую дату в виде строки.
- 17 -
Методические указания по выполнению лабораторных работ по разработке web-приложений (2014)
2.Создать tld-файл, в котором описать имя функции (в теге name), класс функции (в
теге function-class), описание метода (в теге funcation-signature).
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.1" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd">
<tlib-version>1.0</tlib-version> <short-name>etuweb</short-name> <uri>/WEB-INF/tlds/etuweb</uri> <function>
<name>getCurrentDate</name> <function-class>edu.etu.web.Utils</function-class> <function-signature>String getCurrentDate()</function-
signature>
</function>
</taglib>
3.В jsp-странице подключить tld-файл.
<%@taglib prefix="имя_префикса" uri="путь_к_tld-файлу" %>
После всех выполненных действий формат обращения к функции: ${ имя_префикса : имя_функции }
В результате работа с таким статическим методом сведётся к вызову созданного метода в EL.
<%@page contentType="text/html" pageEncoding="UTF-8" isELIgnored="false"%>
<%@taglib prefix="f" uri="/WEB-INF/tlds/etuweb.tld"%> <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
Отображение даты с использованием
Tag Library: ${f:getCurrentDate()}
</body>
</html>
- 18 -
Методические указания по выполнению лабораторных работ по разработке web-приложений (2014)
3.2.3. Использование JSP Standard Tag Library (JSTL)
SUN разработала набор готовых тегов, которыми может пользоваться разработчик. Готовые теги размещены по библиотекам:
Базовая библиотека
<%@ 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:se t>
Удаление переменных
<c:remove var="имя" scope="page|request|session|application"/>
Вывод результатов на страницу
<c:out value="значение" escapeXml="true|false" default="значение по умолчанию"/>
Обработа исключительных ситуаций
<c:catch [var="имя"]> … </c:catch>
Теги условий: Формат:
<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}">
- 19 -
Методические указания по выполнению лабораторных работ по разработке web-приложений (2014)
Нет попыток
</c:when>
<c:otherwise>
<c:out value="${count}"> попыток
</c:otherwise>
</c:choose>
Тег циклов — forEach: Формат:
<c:forEach var="имя_переменной" items="имя_коллекции"> …
</c:forEach>
Пример:
<c:forEach items="${friends}" var="friend"> <h2>
<c:out value="${friend}"/> </h2>
</c:forEach>
3.2.4. Локализация с использованием JSTL
В JSTL локализация осуществляется с использованием
<%@ taglib uri='http://java.sun.com/jsp/jstl/fmt' prefix='fmt'%>
Ключевые теги:
formatDate
<c:set var="now" value="<%=new Date()%>" /> <fmt:formatDate value="${now}" />
formatNumber
<c:set var="balance" value="120000.2309" /> <fmt:formatNumber value="${balance}" type="currency"/>
message
<c:set var="now" value="<%=new Date()%>" /> <fmt:formatDate value="${now}" />
3.3. Решение задач лабораторной работы
3.3.1. Проверка переменной, хранящей информацию о локализации в сессии
Для корректной работы должны быть подключены стандартные библиотеки тегов.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt"%>
Если в переменной sessionScope.locale не хранится никакое значение, то можно
- 20 -