Язык выражений JSP (EL) позволяет легко получать доступ к данным приложения, хранящимся в компонентах JavaBeans. JSP EL позволяет вам создавать выражения (а) арифметические и (б) логические. В выражении JSP EL вы можете использовать целые числа, числа с плавающей запятой, строки, встроенные константы true и false для логических значений и null.
Простой синтаксис
Обычно, когда вы указываете значение атрибута в теге JSP, вы просто используете строку. Например —
<jsp:setProperty name = "box" property = "perimeter" value = "100"/>
JSP EL позволяет вам указать выражение для любого из этих значений атрибута. Простой синтаксис для JSP EL следующий:
${expr}
Здесь expr указывает само выражение. Наиболее распространенными операторами в JSP EL являются . и [] . Эти два оператора позволяют получить доступ к различным атрибутам Java Beans и встроенным объектам JSP.
Например, приведенный выше синтаксис тега <jsp: setProperty> может быть записан с помощью выражения вроде —
<jsp:setProperty name = "box" property = "perimeter"
value = "${2*box.width+2*box.height}"/>
Когда JSP-компилятор видит форму $ {} в атрибуте, он генерирует код для оценки выражения и подставляет значение expresson.
Вы также можете использовать выражения JSP EL в тексте шаблона для тега. Например, тег <jsp: text> просто вставляет свое содержимое в тело JSP. Следующее объявление <jsp: text> вставляет <h1> Hello JSP! </ H1> в вывод JSP —
<jsp:text> <h1>Hello JSP!</h1> </jsp:text>
Теперь вы можете включить выражение JSP EL в тело тега <jsp: text> (или любого другого тега) с тем же синтаксисом $ {}, который вы используете для атрибутов. Например —
<jsp:text>
Box Perimeter is: ${2*box.width + 2*box.height}
</jsp:text>
EL выражения могут использовать скобки для группировки подвыражений. Например, $ {(1 + 2) * 3} равно 9, а $ {1 + (2 * 3)} равно 7 .
Чтобы отключить вычисление выражений EL, мы указываем атрибут isELIgnored директивы страницы, как показано ниже:
<%@ page isELIgnored = "true|false" %>
Допустимые значения этого атрибута: true и false. Если это правда, EL выражения игнорируются, когда они появляются в статическом тексте или атрибутах тега. Если оно ложно, выражения EL оцениваются контейнером.
Основные операторы в EL
Язык выражений JSP (EL) поддерживает большинство арифметических и логических операторов, поддерживаемых Java. В следующей таблице перечислены наиболее часто используемые операторы —
| S.No. | Оператор и описание |
|---|---|
| 1 |
, Доступ к свойству боба или записи на карте |
| 2 |
[] Доступ к массиву или элементу списка |
| 3 |
() Сгруппируйте подвыражение, чтобы изменить порядок оценки |
| 4 |
+ прибавление |
| 5 |
— Вычитание или отрицание значения |
| 6 |
* умножение |
| 7 |
/ или div разделение |
| 8 |
% или мод По модулю (остаток) |
| 9 |
== или экв Тест на равенство |
| 10 |
! = или ne Тест на неравенство |
| 11 |
<или lt Тест на менее чем |
| 12 |
> или GT Тест на более чем |
| 13 |
<= или le Тест на меньше или равно |
| 14 |
> = или ge Тест на больше или равно |
| 15 |
&& или и Тест на логическое И |
| 16 |
|| или или Тест на логическое ИЛИ |
| 17 |
! или нет Унарное булево дополнение |
| 18 |
пустой Проверка пустых значений переменных |
,
Доступ к свойству боба или записи на карте
[]
Доступ к массиву или элементу списка
()
Сгруппируйте подвыражение, чтобы изменить порядок оценки
+
прибавление
—
Вычитание или отрицание значения
*
умножение
/ или div
разделение
% или мод
По модулю (остаток)
== или экв
Тест на равенство
! = или ne
Тест на неравенство
<или lt
Тест на менее чем
> или GT
Тест на более чем
<= или le
Тест на меньше или равно
> = или ge
Тест на больше или равно
&& или и
Тест на логическое И
|| или или
Тест на логическое ИЛИ
! или нет
Унарное булево дополнение
пустой
Проверка пустых значений переменных
Функции в JSP EL
JSP EL позволяет использовать функции и в выражениях. Эти функции должны быть определены в библиотеках пользовательских тегов. Использование функции имеет следующий синтаксис —
${ns:func(param1, param2, ...)}
Где ns — это пространство имен функции, func — это имя функции, а param1 — это первое значение параметра. Например, функция fn: length , которая является частью библиотеки JSTL. Эта функция может быть использована следующим образом, чтобы получить длину строки.
${fn:length("Get my length")}
Чтобы использовать функцию из любой библиотеки тегов (стандартной или пользовательской), вы должны установить эту библиотеку на своем сервере и включить библиотеку в свой JSP с помощью директивы <taglib>, как описано в главе JSTL.
JSP EL неявные объекты
Язык выражений JSP поддерживает следующие неявные объекты:
| S.No | Неявный объект и описание |
|---|---|
| 1 |
PageScope Переменные в области видимости из области видимости страницы |
| 2 |
requestScope Переменные в области видимости из области запроса |
| 3 |
sessionScope Переменные в области видимости из области сеанса |
| 4 |
applicationScope Переменные в области видимости из области приложения |
| 5 |
пары Параметры запроса в виде строк |
| 6 |
paramValues Параметры запроса в виде коллекций строк |
| 7 |
заголовок Заголовки HTTP-запросов в виде строк |
| 8 |
HeaderValues Заголовки HTTP-запросов как коллекции строк |
| 9 |
initParam Параметры инициализации контекста |
| 10 |
печенье Значения cookie |
| 11 |
PageContext Объект JSP PageContext для текущей страницы |
PageScope
Переменные в области видимости из области видимости страницы
requestScope
Переменные в области видимости из области запроса
sessionScope
Переменные в области видимости из области сеанса
applicationScope
Переменные в области видимости из области приложения
пары
Параметры запроса в виде строк
paramValues
Параметры запроса в виде коллекций строк
заголовок
Заголовки HTTP-запросов в виде строк
HeaderValues
Заголовки HTTP-запросов как коллекции строк
initParam
Параметры инициализации контекста
печенье
Значения cookie
PageContext
Объект JSP PageContext для текущей страницы
Вы можете использовать эти объекты в выражении, как если бы они были переменными. Следующие примеры помогут вам понять концепции —
Объект pageContext
Объект pageContext предоставляет вам доступ к объекту JSP pageContext. Через объект pageContext вы можете получить доступ к объекту запроса. Например, чтобы получить доступ к строке входящего запроса, вы можете использовать следующее выражение:
${pageContext.request.queryString}
Объекты Scope
Переменные pageScope, requestScope, sessionScope и applicationScope обеспечивают доступ к переменным, хранящимся на каждом уровне области.
Например, если вам нужен явный доступ к переменной box в области приложения, вы можете получить к ней доступ через переменную applicationScope как applicationScope.box .
Param и paramValues Объекты
Объекты param и paramValues предоставляют вам доступ к значениям параметров, обычно доступным через методы request.getParameter и request.getParameterValues .
Например, чтобы получить доступ к параметру с именем order, используйте выражение $ {param.order} или $ {param [«order»]} .
Ниже приведен пример доступа к параметру запроса с именем username —
<%@ page import = "java.io.*,java.util.*" %>
<%String title = "Accessing Request Param";%>
<html>
<head>
<title><% out.print(title); %></title>
</head>
<body>
<center>
<h1><% out.print(title); %></h1>
</center>
<div align = "center">
<p>${param["username"]}</p>
</div>
</body>
</html>
Объект param возвращает одиночные строковые значения, тогда как объект paramValues возвращает строковые массивы.
объекты header и headerValues
Объекты header и headerValues предоставляют вам доступ к значениям заголовка, обычно доступным через методы request.getHeader и request.getHeaders .
Например, чтобы получить доступ к заголовку с именем user-agent, используйте выражение $ {header.user-agent} или $ {header [«user-agent»]} .
Ниже приведен пример доступа к параметру заголовка с именем user-agent —
<%@ page import = "java.io.*,java.util.*" %>
<%String title = "User Agent Example";%>
<html>
<head>
<title><% out.print(title); %></title>
</head>
<body>
<center>
<h1><% out.print(title); %></h1>
</center>
<div align = "center">
<p>${header["user-agent"]}</p>
</div>
</body>
</html>
Вывод будет выглядеть примерно так:
User Agent Example
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPNTDF; .NET4.0C; InfoPath.2)
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0;
SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729;
Media Center PC 6.0; HPNTDF; .NET4.0C; InfoPath.2)
Объект header возвращает одиночные строковые значения, тогда как объект headerValues возвращает строковые массивы.