• Немедленное вычисление (JSP и JSF):
l ${выражение}
l Позволяет лишь получить значение выражения.
• Отложенное вычисление (JSF):
l #{ выражение}
l Выражение может использоваться различным образом в разные моменты жизненного цикла.
l Позволяет не только получать значения, но и записывать их (в т.ч. для свойств бинов).
Применение выражений с немедленным вычислением
• Выражения EL могут применяться:
l в статическом тексте
l в качестве значений атрибутов тегов
Пример 29.
<some:tag>
some text ${expr} some text
</some:tag>
<some:tag value="${expr}"/>
<some:tag value="some${expr}${expr}text${expr}"/>
Обращение к данным
• Компоненты JavaBeans
l ${beanName.propertyName}
l ${beanName["propertyName"]}
• Коллекции
l ${beanName.listName[i]}
l ${beanName.mapName["string key"]}
• Перечислимые типы JavaSE
l ${reference == "enumConstant"}
• Неявные объекты
l ${param["paramName"]}
• Вычисление выражений
l ${customer.age + 20}
Вызов методов
• Без параметров
l ${object.method}
l ${object["method"]}
• С параметрами
l ${object.method(param1, ..., paramN}
l ${object["method"](param1, ..., paramN)}
Литералы в выражениях
• Логические true, false
• Целочисленные 136
• С плавающей точкой 3.14, 1.0e10
• Строковые “string”
• Ссылочные null
Операторы в выражениях
• Доступ к элементам []
• Операторные скобки ()
• Унарные - not ! Empty (EmptyА возвращает true, если А – ноль)
• Арифметические * / div % mod + -
• Сравнение <><= >= lt gt le ge == != eq ne
• Логические && and || or ? :
Неявные объекты
• Объекты доступа к другим объектам
l pageScope
l requestScope
l sessionScope
l applicationScope
• Часто используемые объекты
l pageContext
l session
l request
l response
l param
l cookie
l ...
Примеры выражений EL
Таблица 6 – Примеры выражений EL
Выражение | Результат |
${(10*10) ne 100} | false |
${'a' < 'b'} | true |
${1.2E4 + 1.4} | 12001.4 |
${!empty param.Add} | true, если параметр Add не null и не пустая строка |
${pageContext.request.contextPath} | Путь контекста |
${param['mycom.productId']} | Значение параметра mycom.productId |
${departments[deptName]} | Значение элемента deptName в departments |
${header["host"]} | Имя хоста |
JSP- страница с применением EL
Пример 30. JSP -страница с применением EL
JSP-страница
${20 + 335}< br />
${! emptyparam . Add }< br />
Фрагментпримерногокодасервлета
out . write (( java . lang . String )
org.apache.jasper.runtime.PageContextImpl.evaluateExpression(
"${20 + 335}", java.lang.String.class,
(PageContext)_jspx_page_context, null));
out.write("<br/>\n");
out.write((java.lang.String)
org.apache.jasper.runtime.PageContextImpl.evaluateExpression(
"${!empty param.Add}", java.lang.String.class,
(PageContext)_jspx_page_context, null));
out.write("<br/>\n");
Custom tags
• Определяются пользователем и описывают часто используемые операции.
• Описываются и распространяются в виде библиотек тегов, определяющих семейства тегов и содержащих объекты, реализующие теги.
• Для использования тегов необходимо:
l Объявить библиотеку тегов
l Сделать ее доступной для web-приложения
<prefix:tag attr1="value" ... attrN="value" />
<prefix:tag attr1="value" ... attrN="value" >
body
</prefix:tag>
Библиотеки тегов
• Библиотеки тегов описываются в tld-файлах
• Библиотеки могут быть
l публичными и храниться в сети
l локальными и храниться в каталоге WEB-INF
• Для подключения библиотеки необходимо использовать директиву taglib
<%@ taglib prefix="tlt" uri="/WEB-INF/iterator.tld"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
Обработка custom tags
• В процессе компиляции jsp-страницы теги будут преобразовываться в java-код в соответствии с описанием в библиотеке тегов.
• Если соответствующая библиотека не была подключена, относящиеся к ней теги будут трактоваться как статическая часть jsp-страницы и просто выводиться в отклик.
Пример 31. JSP -страница с применением customtags
JSP-страница
<c:if test="${!empty param.name}" var="nameExists" scope="request">
<b>Hello, ${param.name}!</b><br/>
</ c : if >
Фрагмент примерного кода сервлета
org.apache.taglibs.standard.tag.rt.core.IfTag _jspx_th_c_if_0 =
(org.apache.taglibs.standard.tag.rt.core.IfTag)
_jspx_tagPool_c_if_var_test_scope.get(
org.apache.taglibs.standard.tag.rt.core.IfTag.class);
_jspx_th_c_if_0.setPageContext(_jspx_page_context);
_jspx_th_c_if_0.setParent(null);
_jspx_th_c_if_0.setTest(((java.lang.Boolean)
org.apache.jasper.runtime.PageContextImpl.evaluateExpression(
"${!empty param.name}", java.lang.Boolean.class,
(PageContext)_jspx_page_context, null)).booleanValue());
_jspx_th_c_if_0.setVar("nameExists");
_jspx_th_c_if_0.setScope("request");
int _jspx_eval_c_if_0 = _jspx_th_c_if_0.doStartTag();
if (_jspx_eval_c_if_0 != javax.servlet.jsp.tagext.Tag.SKIP_BODY) {
do {
out.write("<b>Hello, ");
out.write((java.lang.String)
org.apache.jasper.runtime.PageContextImpl.evaluateExpression(
"${param.name}", java.lang.String.class,
(PageContext)_jspx_page_context, null));
out.write("!</b><br/>\n");
int evalDoAfterBody = _jspx_th_c_if_0.doAfterBody();
if (evalDoAfterBody !=
javax.servlet.jsp.tagext.BodyTag.EVAL_BODY_AGAIN)
break;
} while (true);
}
JSP Standard Tag Library
• Библиотека включает в себя набор тегов, функциональность которых часто используется в web-приложениях.
• Эти теги должны обрабатываться единообразно в рамках всех контейнеров.
• Это позволяет:
l избежать использования различных библиотек.
l единообразно организовывать JSP-страницы .
Библиотеки JSTL
• JSTL поставляется в виде набора библиотек:
l Различные направления функциональности
l Различные пространства имен
• Библиотеки и соответствующие пути
l Core http://java.sun.com/jsp/jstl/core
l XML http://java.sun.com/jsp/jstl/xml
l Internationalization http://java.sun.com/jsp/jstl/fmt
l Database http://java.sun.com/jsp/jstl/sql
l Functions http://java.sun.com/jsp/jstl/functions
Таблица 7 – Библиотеки JSTL
Библиотека | Функциональность | Префикс |
Core | Работа с переменными | c |
Управление ходом выполнения | ||
Работа с URL | ||
Разное | ||
XML | Базовые | x |
Управление выполнением | ||
Преобразования | ||
I18n | Локализация |
Fmt
Functions
fn
Таблица 8 – Библиотека Core
Функциональность | Тэги |
Работа с переменными | remove set |
Управление ходом выполнения | choose (when, otherwise) forEach forTokens if |
Работа с URL | import (param) redirect (param) url (param) |
Разное | catch out |
Таблица 9 – Библиотека XML
Функциональность | Тэги |
Базовая | out parse set |
Управление ходом выполнения | choose (when, otherwise) forEach if |
Преобразования | transform (param) |
Пример 32. Пример использования
<c:if test="${!empty param.Add}">
<c:set var="bid" value="${param.Add}"/>
<jsp:useBean id="bid" type="java.lang.String" />
<sql:query var="books"
dataSource="${applicationScope.bookDS}">
select * from PUBLIC.books where id = ?
<sql:param value="${bid}" />
</sql:query>
<c:forEach var="bookRow" begin="0" items="${books.rows}">
<jsp:useBean id="bookRow" type="java.util.Map" />
<jsp:useBean id="addedBook" class="database.Book"
scope="page" />
...
<% cart.add(bid, addedBook); %>
...
</c:if>
Язык JavaScript
JavaScript – это язык программирования
l Интерпретируемый
l Объектно-ориентированный
l Со слабой типизацией
l С динамической типизацией
l С автоматическим управлением памятью
l Вместо наследования классов используются прототипы объектов
l Функции являются объектами
Области применения
• Скриптовые фрагменты серверных приложений.
• Виджеты (примитивграфического интерфейса пользователя, имеющий стандартный внешний вид и выполняющий стандартные действия).
• Прикладное программное обеспечение.
• Букмарклеты (небольшие приложения, размещаемые в закладках браузера).
• Пользовательские скрипты в браузерах.
• Программы на стороне клиента в web-приложениях.
n Код встраивается в HTML-страницу.
n Код выполняется браузером.
n Возможно изменение структуры страницы, её элементов и их параметров.
n Изменения могут происходить без перезагрузки страницы.
n Могут выполняться дополнительные действия.
· Взаимодействие с браузером
· Взаимодействие с сервером
· Бизнес-логика в целом
Пример 33. Здравствуй , мир !!!
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title> Проверка JS</title>
</head>
<body>
<h1>
<script>
document.write("Hello, world!!!");
</ script >
</ h 1>
</ body >
</ html >
Дата: 2019-02-19, просмотров: 410.