English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Язык выражений JSP (EL) упрощает доступ к данным, хранящимся в JavaBean. JSP EL может использоваться для создания арифметических и логических выражений. В выражениях JSP EL можно использовать целые числа, дробные числа, строки, константы true, false, а также null.
Типичное использование, когда вам нужно указать значение свойства в теге JSP, достаточно просто использовать строку:
<jsp:setProperty name="box" property="perimeter" value="100"/>
JSP EL позволяет вам指定 выражение для представления значения свойства. Пример простого синтаксиса выражения:
${expr}
Где expr указывает на выражение. В JSP EL общие операторы - . и {} . Эти операторы позволяют вам через встроенные объекты JSP обращаться к различным свойствам JavaBean.
Давайте рассмотрим пример, как можно использовать языковой выражение для изменения формы тега <jsp:setProperty> следующим образом:
<jsp:setProperty name="box" property="perimeter"> value="${2*box.width+2*box.height}"/>
Когда компилятор JSP видит формат "${" в свойстве, он создает код для вычисления этого выражения и создает заменитель для значения выражения.
Вы также можете использовать языковой выражение в шаблоне текста тегов. Например, тег <jsp:text> простым образом вставляет текст в主要内容 в вывод JSP:
<jsp:text> <h1>Hello JSP!</h1> </jsp:text>
Теперь в теле тега <jsp:text> используйте выражения, например:
<jsp:text> Периметр коробки: ${2*box.width + 2*box.height} </jsp:text>
В EL-выражениях можно использовать круглые скобки для организации подвыражений. Например, ${(1 + 2) * 3} равняется 9, но ${1 + (2 * 3)} равняется 7.
Чтобы отключить оценку EL-выражений, нужно использовать директиву page, чтобы установить значение атрибута isELIgnored в true:
<%@ page isELIgnored="true|false" %>
Таким образом, EL-выражение будет пропущено. Если установлено в false, контейнер будет вычислять EL-выражение.
EL-выражения поддерживают большинство арифметических и логических операторов, предоставляемых Java:
Оператор | Описание |
---|---|
. | Доступ к свойству Bean или элементу карты |
[] | Доступ к элементу массива или списка |
( ) | Организация подвыражения для изменения приоритета |
+ | Добавление |
- | Сокращение или минус |
* | Умножение |
/ или div | Деление |
% или mod | Остаток от деления |
== или eq | Тест на равенство |
!= или ne | Тест на не равенство |
< или lt | Тест на меньше |
> или gt | Тест на больше |
<= или le | Тест на не более |
>= или ge | Тест на не менее |
&& или and | Тест логического и |
|| или or | Тест логического или |
! или not | Тест на инверсию |
empty | Тест на пустоту |
JSP EL позволяет использовать функции в выражениях. Эти функции должны быть определены в пользовательской библиотеке тегов. Грамматика использования функции следующая:
${ns:func(param1, param2, ...)}
ns указывает на пространство имен (namespace), func указывает на имя функции, param1 указывает на первый параметр, param2 указывает на второй параметр и так далее. Например, у функции fn:length, определенной в библиотеке JSTL, можно получить длину строки следующим образом:
${fn:length("Get my length")}
Чтобы использовать функции из любой библиотеки тегов, вам нужно установить эти библиотеки на сервере, а затем использовать тег <taglib> в файле JSP для включения этих библиотек.
Поддерживаются неявные объекты, перечисленные в таблице ниже в поддержку JSP EL:
Неявные объекты | Описание |
---|---|
pageScope | Область видимости страницы |
requestScope | Область видимости запроса |
sessionScope | Область видимости сеанса |
applicationScope | Область видимости приложения |
param | Параметры объекта запроса, строка |
paramValues | Параметры объекта запроса, строковый набор |
header | HTTP-заголовки, строка |
headerValues | HTTP-заголовки, строковый набор |
initParam | Параметры инициализации контекста |
cookie | Значение Cookie |
pageContext | Область видимости текущей страницы pageContext |
Вы можете использовать эти объекты в выражениях, как переменные. В следующих примерах будет даны несколько примеров для лучшего понимания этого концепта.
Объект pageContext является ссылкой на объект pageContext в JSP. Через объект pageContext вы можете получить доступ к объекту request. Например, чтобы получить доступ к переданной запросом строке запроса, можно сделать так:
${pageContext.request.queryString}
Переменные pageScope, requestScope, sessionScope, applicationScope используются для доступа к переменным, хранящимся в различных уровнях области видимости.
Например, если вам нужно явно получить доступ к переменной box, находящейся в приложении scope, вы можете сделать это так: applicationScope.box.
Объекты param и paramValues используются для доступа к значениям параметров, используя методы request.getParameter и request.getParameterValues.
Например, чтобы получить доступ к параметру с именем order, можно использовать выражение: ${param.order} или ${param["order"]}.
Следующий пример показывает, как можно получить доступ к параметру username в request:
<%@ 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 используются для доступа к заголовкам, через использование методов 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>
Результат выполнения таков:
Объект header возвращает единичное значение, а headerValues возвращает массив строк.