Автор оригинала: 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
<% List names = 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}
Когда мы отправляем запрос на вышеуказанный сервлет, мы получаем вывод, как показано на рисунке ниже.