English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Язык выражений JSP

Язык выражений 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

EL-выражения поддерживают большинство арифметических и логических операторов, предоставляемых Java:

ОператорОписание
. Доступ к свойству Bean или элементу карты
[] Доступ к элементу массива или списка
( ) Организация подвыражения для изменения приоритета
+ Добавление
- Сокращение или минус
* Умножение
/ или div Деление
% или mod Остаток от деления
== или eq Тест на равенство
!= или ne Тест на не равенство
< или lt Тест на меньше
> или gt Тест на больше
<= или le Тест на не более
>= или ge Тест на не менее
&& или and Тест логического и
|| или or Тест логического или
! или not Тест на инверсию
empty Тест на пустоту

Функции в JSP EL

JSP EL позволяет использовать функции в выражениях. Эти функции должны быть определены в пользовательской библиотеке тегов. Грамматика использования функции следующая:

${ns:func(param1, param2, ...)}

ns указывает на пространство имен (namespace), func указывает на имя функции, param1 указывает на первый параметр, param2 указывает на второй параметр и так далее. Например, у функции fn:length, определенной в библиотеке JSTL, можно получить длину строки следующим образом:

${fn:length("Get my length")}

Чтобы использовать функции из любой библиотеки тегов, вам нужно установить эти библиотеки на сервере, а затем использовать тег <taglib> в файле JSP для включения этих библиотек.

Неявные объекты JSP EL

Поддерживаются неявные объекты, перечисленные в таблице ниже в поддержку JSP EL:

Неявные объектыОписание
pageScope Область видимости страницы
requestScope Область видимости запроса
sessionScope Область видимости сеанса
applicationScope Область видимости приложения
param Параметры объекта запроса, строка
paramValues Параметры объекта запроса, строковый набор
header HTTP-заголовки, строка
headerValues HTTP-заголовки, строковый набор
initParam Параметры инициализации контекста
cookie Значение Cookie
pageContext Область видимости текущей страницы pageContext

Вы можете использовать эти объекты в выражениях, как переменные. В следующих примерах будет даны несколько примеров для лучшего понимания этого концепта.

Объект pageContext

Объект pageContext является ссылкой на объект pageContext в JSP. Через объект pageContext вы можете получить доступ к объекту request. Например, чтобы получить доступ к переданной запросом строке запроса, можно сделать так:

${pageContext.request.queryString}

Объект области видимости

Переменные pageScope, requestScope, sessionScope, applicationScope используются для доступа к переменным, хранящимся в различных уровнях области видимости.

Например, если вам нужно явно получить доступ к переменной box, находящейся в приложении scope, вы можете сделать это так: applicationScope.box.

Объекты param и paramValues

Объекты 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

Объекты 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 возвращает массив строк.