Учебники

JSP — язык выражений (EL)

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