1.EL
(1).JSP脚本的缺点
使用JSP脚本可以实现页面输出显示,那为什么还需要使用EL简化输出呢?
这是因为单纯使用JSP脚本与HTML标签混合,实现输出显示的方式存在一些弊端,归纳如下:
-
代码结构混乱,可读性差
-
脚本与HTML标签混合,容易导致错误
-
代码不易维护
核心作用:
减少jsp中的java代码
[注意:el只能用在jsp中]
(2).EL表达式
(1)EL表达式
EL是Expression Language的缩写,它定义了一系列的隐含对象和操作符,使开发人员能够很方便地访问页面内容,以及不同作用域内的对象,而无须在JSP中嵌入Java代码,从而使得页面结构更加清晰,代码可读性更高,也更加便于维护。
(2)EL表达式的语法
语法:${EL表达式}
语法结构中包含"$"符号和”{}“括号,二者缺一不可。
使用EL表达式也非常简单,如${username}就可以实现访问变量username的值。
注意:使用EL表达式获取变量前,必须将操作的对象保存到作用域中。
此外,使用EL表达式还可以访问对象的属性,这就需要使用“.”操作符和“[ ]”操作符来完成。
-
“.”操作符
EL表达式通常由对象和属性两部分组成。因此采用与Java代码一样的方式,用“.”操作符来访问对象的属性。
例如:${news.title}可以访问news对象的title属性。
-
“[ ]”操作符
“[ ]”操作符的使用方法与“.”操作符类似,不仅可以用来访问对象的属性,还可以用于访问数组和集合。
例如:
①访问对象的属性:${news["title"]}可以访问news对象的title属性。
②访问数组:${newsList[0]}可以访问newsList数组中的第一个元素。
示例代码:
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<html>
<head>
<title>EL表达式</title>
</head>
<body>
<h1>EL表达式</h1>
<%
String username = "tom";
//将变量添加到作用域中
request.setAttribute("username",username);
request.setAttribute("student.name","张三");
ArrayList list = new ArrayList();
list.add("新冠疫情");
list.add("俄乌战争");
//将集合添加到作用域中
request.setAttribute("list",list);
//将日期对象添加到作用域中
Date date = new Date();
request.setAttribute("date",date);
%>
//访问变量 <br>
${username}<br>
//含有特殊字符的变量 <br>
${requestScope["student.name"]}<br>
//访问集合 <br>
${list[1]}<br>
//访问对象 <br>
${date.date}<br>
//读取参数 (需要从地址栏传参数,例如:http://localhost:8088/ELDemo.jsp?num=1)<br>
${param.num}<br>
//读取参数 (需要从地址栏传参数,例如:http://localhost:8088/ELDemo.jsp?num=1&hobby=a&hobby=b&hobby=c)<br>
${paramValues.hobby[2]}<br>
</body>
</html>
运行效果:
提示:
①使用“[ ]”操作符访问数据时,必须在属性名两侧使用双引号。
②EL表达式区分大小写。
③在使用EL表达式获取变量前,必须先将对象保存到作用域中。
表达式分类: (1) 普通表达式 (2) 读取单值(基本数据类型) (3) 读取多值(对象)
EL的隐含对象:
(3).EL运算符
EL表达式支持多种运算符,这些运算符的使用方法与Java运算符非常类似。另外,在EL表达式中,为了避免一些运算符在使用时与HTML页面标签发生冲突,会采用其他符号进行替代。
EL的运算符:
(1) 算术运算符
(2) 关系运算符
(3) 逻辑运算符
(4) Empty运算符
(5) 条件运算符
例子:${2 > 1 ? "yes" : "no" }
(4).EL的功能
对于EL的特点和作用,归纳总结如下:
-
可用于获取JavaBean的属性。
-
能够读取集合类型对象中的元素。
-
可使用运算符进行数据处理。
-
可屏蔽一些常见异常。
-
可自动实现类型转换。
(5).EL表达式的作用域访问对象
JSP提供了4种作用域,分别是page、request、session和application。为了能够访问这4个作用域内的数据,EL表达式也分别提供了4种作用域访问对象来实现数据的读取。这4个作用域访问对象的比较如下:
当使用EL表达式访问某个属性值时,应当指定查找的范围。如果程序中未指定查找的范围,那么系统会自动按照page → request → session → application(从小到大)的顺序进行查找。
使用作用域访问对象读取属性值非常简单,只需要使用“作用域名称 .”方式即可实现。
总结:
EL从作用域/参数/信息头/初始化参数/cookie中获取数据,显示到JSP页面。