Автор оригинала: Pankaj Kumar.
Сегодня мы рассмотрим язык выражений JSP или пример учебника JSP EL.
Язык выражений JSP – JSP EL
В большинстве случаев мы используем JSP для целей просмотра, и вся бизнес-логика присутствует в коде сервлета или классах моделей. Когда мы получаем запрос клиента в сервлете, мы обрабатываем его, а затем добавляем атрибуты в область запроса/сеанса/контекста, которые будут извлечены в коде JSP. Мы также используем параметры запроса, заголовки, файлы cookie и параметры инициализации в JSP для создания представлений ответов.
В предыдущих сообщениях мы видели, как мы можем использовать скриптлеты и выражения JSP для извлечения атрибутов и параметров в JSP с помощью кода java и использовать его для просмотра. Но для веб-дизайнеров код Java трудно понять, и именно поэтому в спецификации JSP 2.0 был введен Язык выражений (EL), с помощью которого мы можем легко получать атрибуты и параметры, используя HTML, такие как теги.
Синтаксис языка выражений ${name}
, и мы увидим, как мы можем использовать их в коде JSP.
Читайте: Учебник по JSP для начинающих
Неявные объекты JSP EL
Язык выражений JSP предоставляет множество неявных объектов, которые мы можем использовать для получения атрибутов из разных областей и значений параметров. Список приведен ниже.
Карта | Карта, содержащая набор атрибутов с областью действия страницы. | Область просмотра страниц |
Карта | Используется для получения значения атрибута с областью запроса. | Область запросов |
Карта | Используется для получения значения атрибута с областью действия сеанса. | Область сеансов |
Карта | Используется для получения значения атрибутов из области приложения. | область применения |
Карта | Используется для получения значения параметра запроса, возвращает одно значение | парам |
Карта | Используется для получения значений параметров запроса в массиве, полезно, когда параметр запроса содержит несколько значений. | Значения параметров |
Карта | Используется для получения информации о заголовке запроса. | заголовок |
Карта | Используется для получения значений заголовка в массиве. | значения заголовка |
Карта | Используется для получения значения файла cookie в JSP | печенье |
Карта | Используется для получения параметров инициализации контекста, мы не можем использовать его для параметров инициализации сервлета | init Param |
Текст страницы | То же самое, что и неявный объект PageContext JSP, используемый для получения запроса, ссылок на сеансы и т.д. Примером использования является получение имени метода HTTP запроса. | Текст страницы |
Обратите внимание, что эти неявные объекты отличаются от неявных объектов JSP и могут использоваться только с JSP EL.
Язык выражений JSP – Операторы JSP EL
Давайте рассмотрим операторы EL и поймем, как они интерпретируются и как их использовать.
Оператор доступа к свойствам EL или Оператор точки (.)
Оператор JSP EL Dot используется для получения значений атрибутов.
${firstObj.secondObj}
В приведенном выше выражении firstObj может быть неявным объектом или атрибутом в области страницы, запроса, сеанса или приложения. Например,
${${область запроса.сотрудник.адрес}
Обратите внимание, что, за исключением последней части EL, все объекты должны быть либо Map, либо Java-компонентом, поэтому в приведенном выше примере RequestScope-это карта, а сотрудник должен быть Java-компонентом или картой. Если область не указана, JSP EL просматривает область страницы, запроса, сеанса и приложения, чтобы найти именованный атрибут.
Оператор JSP EL [] или Оператор доступа к коллекции
Оператор [] является более мощным, чем оператор точки. Мы также можем использовать его для получения данных из списка и массива.
Некоторые примеры;
${myList[1]} и ${myList[“1”]} одинаковы, мы также можем предоставить индекс списка или массива в качестве строкового литерала.
${myMap[expr]} – если параметр внутри [] не является строкой, он оценивается как EL.
${myMap[myList[1]]} – [] может быть вложенным.
${RequestScope[“foo.bar”]} – мы не можем использовать оператор точки, когда в именах атрибутов есть точки.
Арифметические операторы JSP EL
Арифметические операторы предусмотрены для простых вычислений в выражениях EL. Это +, -, *,/или div, % или mod.
Логические операторы JSP EL
Это && (и),
(или) и ! (нет).
Операторы связи JSP EL
Язык выражений JSP – Приоритет оператора JSP EL
Выражения JSP EL вычисляются слева направо. Приоритет оператора JSP EL указан в таблице ниже от самого высокого до самого низкого.
[ ] . |
() – Используется для изменения приоритета операторов. |
– (одинарный) нет ! пустой |
* / div % мод |
+ – (двоичный) |
< > <= gt le ge |
== не |
&& и |
|| или |
? : |
Язык выражений JSP – Резервные слова JSP EL
ge | истинный | гт | lt | ле |
пустой | div,мод | нулевой | ложный | экземпляр |
Выше приведены зарезервированные слова, не используйте их в качестве идентификатора в JSP.
Важные моменты языка выражений JSP
- Выражения EL всегда заключены в фигурные скобки со знаком$, например ${expr}
- Мы можем отключить выражение EL в JSP, установив Директиву страницы JSP Значение атрибута isELIgnored равным TRUE.
- JSP EL можно использовать для получения атрибутов, заголовка, файлов cookie, параметров инициализации и т.д., Но мы не можем установить значения.
- Неявные объекты JSP EL отличаются от неявных объектов JSP, за исключением PageContext, не путайте.
- Неявный объект JSP EL PageContext предоставляется для получения дополнительных свойств из запроса, ответа и т.д., Например, для получения метода HTTP-запроса.
- JSP EL поддерживает значение NULL, если данный атрибут не найден или выражение возвращает значение null, оно не создает никаких исключений. Для арифметических операций EL обрабатывает значение null как 0, а для логических операций EL обрабатывает значение null как false.
- Оператор [] более мощный, чем оператор точки, потому что мы также можем получить доступ к данным списка и массива, он может быть вложенным, а аргумент [] вычисляется, когда он не является строковым литералом.
- Если вы используете Tomcat, выражения EL вычисляются с помощью
org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate()
метод. - Мы можем использовать функции EL для вызова метода из класса java, подробнее об этом в публикации пользовательских тегов в ближайшем будущем.
Пример JSP EL
Давайте рассмотрим использование EL с помощью простого приложения. Мы установим некоторые атрибуты в разных областях и будем использовать EL для их извлечения и отображения на странице JSP. Структура нашего проекта будет выглядеть так, как показано на рисунке ниже.
Я определил некоторые классы моделей, которые мы будем использовать – интерфейс пользователя, Лицо, реализующее сотрудника, и Адрес, используемый в Сотруднике.
package com.journaldev.model; public interface Person { public String getName(); public void setName(String nm); }
package com.journaldev.model; public class Address { private String address; public Address() { } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String toString(){ return "Address="+address; } }
package com.journaldev.model; public class Employee implements Person { private String name; private int id; private Address address; public Employee() { } @Override public String getName() { return this.name; } @Override public void setName(String nm) { this.name = nm; } public int getId() { return id; } public void setId(int id) { this.id = id; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } @Override public String toString(){ return "ID="+id+",Name="+name+",Address="+address; } }
Обратите внимание, что сотрудник и адрес являются javabeans с конструктором без аргументов и методами getter-setter для свойств. Я также предоставил реализацию метода toString (), который мы будем использовать на странице JSP.
Теперь давайте посмотрим код простого сервлета, который установит некоторые атрибуты.
package com.journaldev.servlet; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import com.journaldev.model.Address; import com.journaldev.model.Employee; import com.journaldev.model.Person; @WebServlet("/HomeServlet") public class HomeServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //Setting some attributes Person person = new Employee(); person.setName("Pankaj"); request.setAttribute("person", person); Employee emp = new Employee(); Address add = new Address(); add.setAddress("India"); emp.setAddress(add); emp.setId(1); emp.setName("Pankaj Kumar"); HttpSession session = request.getSession(); session.setAttribute("employee", emp); response.addCookie(new Cookie("User.Cookie","Tomcat User")); getServletContext().setAttribute("User.Cookie","Tomcat User"); RequestDispatcher rd = getServletContext().getRequestDispatcher("/home.jsp"); rd.forward(request, response); } }
Давайте определим некоторые параметры инициализации контекста в web.xml дескриптор развертывания.
JSPELExample AppID 123
Код JSP, использующий EL для создания представлений:
Код JSP, использующий EL для создания представлений:
<%@ page language="java" contentType="text/html; charset=US-ASCII" pageEncoding="US-ASCII" import="java.util.*"%>JSP EL Example Home <% Listnames = new ArrayList (); names.add("Pankaj");names.add("David"); pageContext.setAttribute("names", names); %> Simple . EL Example: ${requestScope.person}
Simple . EL Example without scope: ${person}
Simple [] Example: ${applicationScope["User.Cookie"]}
Multiples . EL Example: ${sessionScope.employee.address.address}
List EL Example: ${names[1]}
Header information EL Example: ${header["Accept-Encoding"]}
Cookie EL Example: ${cookie["User.Cookie"].value}
pageContext EL Example: HTTP Method is ${pageContext.request.method}
Context param EL Example: ${initParam.AppID}
Arithmetic Operator EL Example: ${initParam.AppID + 200}
Relational Operator EL Example: ${initParam.AppID < 200}
Arithmetic Operator EL Example: ${initParam.AppID + 200}
Когда мы отправляем запрос на вышеуказанный сервлет, мы получаем вывод, как показано на рисунке ниже.