Expression Language (EL) in JSP
Last updated: 10 мая 2025 г.В прошлом уроке мы извлекали созданный в контроллере бин с помощью actioBean
.
Чтобы для создания и получения бина не писать вот так:
<jsp:useBean id=”someuser” class=”com.someclasses.User” scope=”application”/>
<jsp:getProperty name=”someuser” property=”name”/>
извлекать атрибуты скоупов можно просто используя Expression language.
Изменим View из предыдущего урока вот таким образом:
1<!-- здесь извлекаем из сервлета
2 полученный в нем из модели объект someuser -->
3<html>
4<head>
5 <title>EL JSP</title>
6</head>
7<body>
8 <!-- Чтобы не писать
9 <jsp:useBean id="someuser" class="com.someclasses.User" scope="application"/>
10 и <jsp:getProperty name="someuser" property="name"/>
11 извлекать атрибуты скопов можно просто
12 используя Expression language. -->
13
14 <!-- Просто имя атрибута (экземпляра класса User
15 положенного в контекст в контроллере). Из него достаем
16 поле этого экземпляра. -->
17 ${someuser.name}
18</body>
19</html>
Запускаем контроллер:

Он, опять таки, создает атрибут с именем someuser
, в котором находиться объект класса User
, извлеченный контроллером через модель.
Переходим на View и видим, что Expression Language сработал и вывелось имя из объекта в аттрибуте someuser
:

Конкретный скоуп
По дефолту (как было выше) проверяются все атрибуты всех скоупов, пока не найдет someuser
, но можно задать скоуп, в котором хотим искать. В нашем случае скоуп контекста (applicationScope
)
Пример программы:
1<html>
2<head>
3 <title>EL JSP</title>
4</head>
5<body>
6${applicationScope.someuser.name}
7</body>
8</html>
Вывод такой же:

Другие возможности EL
Также с помощью EL можно делать много чего другого. Смотри пример.
Изменим контроллер:
1import com.someclasses.*;
2import java.io.IOException;
3import java.io.PrintWriter;
4import javax.servlet.*;
5import javax.servlet.http.*;
6import javax.servlet.annotation.*;
7import java.util.*;
8
9@WebServlet("/MVC_Controller")
10public class MVC_Controller extends HttpServlet {
11 MVC_Model model = new MVC_Model();
12 protected void doGet(HttpServletRequest req,
13 HttpServletResponse resp)
14 throws ServletException, IOException {
15 //Создадим список
16 List<String> arrlist = new ArrayList<>();
17 //Добавим туда пару значений
18 arrlist.add("FirstStr");
19 arrlist.add("<h2>Hello!!</h2>");
20 //Добавляем список в атрибут контекста
21 //и он будет доступен на View. С этим списком
22 //можно будет работать с помощью EL
23 req.getServletContext().setAttribute("arrlist",arrlist);
24 Cookie cokie = new Cookie("name","Jonny");
25 //Этот cookie извлечен на view с помощью EL
26 resp.addCookie(cokie);
27 }
28}
Изменим View:
1<html>
2<head>
3 <title>EL JSP</title>
4</head>
5<body>
6<!--Можем работать с коллекциями
7созданными в контроллере-->
8${arrlist[1]}
9<!--Также можно записывать выражения
10используя стандартные операторы логические,
11арифметические и отношения-->
12${((3+7) == 10) && ((8+1) == 10)}
13<!--EL можно использовать в бинах-->
14<jsp:useBean id="someuser" class="com.someclasses.User"/>
15<jsp:setProperty name="someuser" property="name" value='${arrlist[1]}'/><!--здесь-->
16<jsp:getProperty name="someuser" property="name"/>
17<!--также можем извлекать cookie
18или параметры с помощью param-->
19${cookie.name.value}
20</body>
21</html>
Откроем страницу контроллера:

Откроем View:

Отключение EL на странице
С помощью <%@ page isELIgnored="false"%>
можно отключить все EL выражения на странице.
Поставив перед конкретным EL выражением "\\"
можно отключить какое либо конкретное EL выражение
Пример программы:
1<!--отключить все EL на странице
2можно установив в true-->
3<%@ page isELIgnored="false"%>
4<html>
5<head>
6 <title>EL JSP</title>
7</head>
8<body>
9<!-- "\" - отключить конкретное EL выражение-->
10\${arrlist[1]}
11</body>
12</html>
Ясное дело, если мы откроем эту страницу, на ней ничего не будет.
Выводы:
После изучения MVC теперь можно лучше понять зачем нужны jsp.
Java код на jsp страницах использовать крайне не рекомендуется.
Java код лучше пусть используется в контроллере.
На View используются только экшн теги, EL и еще стандартная библиотека тегов jsp, о них позже. Эти инструменты лучше понятны html разработчику, который делает View, а java код разработчику контроллера
Следующие уроки
Работа с JSP Standard Tag Library (JSTL)
20
мин.
Что такое шаблоны проектирования? Шаблон Factory
16
мин.
Шаблон Singleton: обеспечение единственного экземпляра
14
мин.