Язык выражений 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 возвращает строковые массивы.