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

web-programmirovanie_metodicheskie_ukazania

.pdf
Скачиваний:
68
Добавлен:
09.02.2015
Размер:
606.97 Кб
Скачать

Методические указания по выполнению лабораторных работ по разработке 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&parameter2=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 -

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