目录
一、EL表达式简介
EL(Expression Language)表达式语言。
作用:替换和简化JSP页面中Java代码的编写
二、基本语法
${表达式}
三、JSP对EL表达式的支持
JSP默认是支持EL表达式。
忽略EL表达式的两种方式
方式一:忽略当前jsp页面所有表达式:设置page指令中的属性isELIgnored=true
<%@ page isELIgnored="true" %>
方式二:忽略某个EL表达式,EL表达式前添加反斜杠\:${表达式}
页面输出结果是 false
\${3>5}
四、运算
类型 | 定义 |
---|---|
算数运算符 | 加(+)、减(-)、乘(*)、除(/或者div)、取余(%或者mod) |
关系运算符 | >、<、>=、<=、==或eq、!= 【返回值就是true、false】 |
逻辑运算符 | &&或and、||或or、!或者not |
空运算符 | empty 【判断字符串、集合、数组对象是否为null或者长度是否为0】 |
非空运算符 | not empty 【判断字符串、集合、数组对象不为null并且长度不为0】 |
三目运算符 | A ? B : C |
其中,
empty:
示例代码:
<body>
${3>4}
\${3>5}
<hr>
<h3>算数运算符演示</h3>
${4 + 5}<br>
${3 - 1}<br>
${3 * 5}<br>
${5 / 3}<br>
${5 div 3}<br>
${5 % 3}<br>
${5 mod 3}<br>
<h3>关系运算符演示</h3>
${3 == 5}
${3 eq 5}
<h3>逻辑运算符演示</h3>
${5 > 3 && 5 > 4}
<h3>三目运算符演示</h3>
${5 > 3 ? "Tank" : "Alex"}
${5 > 3 ? "Tank" : "Alex"}
<h3>empty算符演示</h3>
<%
request.setAttribute("key", "abc");
request.setAttribute("key1", "");
%>
<%--判断 域中的key对应的键是否为空或者长度是否为0--%>
${empty key}<br>
${empty requestScope.key}<br>
<%--判断 域中的key1对应的键是否为空或者长度是否为0--%>
${empty key1}<br>
<%--判断是否不为bull并且长度不为0--%>
${not empty key}
</body>
五、获取值
首先,EL表达式只能从域对象中获取值!有两种书写方式:
${域名.键名}
${键名}
从指定域中获取指定键的值。如果${域名.键名}获取值为空,页面不会展示null,不展示任何异常字符。
若域名省略,表示从依次从最小的域中查找是否有该键对应的值,如果中途找到就直接回传,不再继续找下去;但是如果全部的范围都没有找到时,就回传""
此处可以发现EL表达式一个优点:不会在页面中输出null。
下面我们重点讲解,如何获取域中存储的值为字符串、对象、List集合、Map集合。
1.获取域中存储的值——字符串
<body>
<%
// 在域中存储数据
request.setAttribute("name", "Tank");
session.setAttribute("age", "30");
%>
<%--方式一--%>
${requestScope.name}<br>
${sessionScope.age}<br>
<%--方式二--%>
${name}<br>
${age}<br>
</body>
5.2 获取域中存储的值——对象值
重点掌握,获取值为List集合、Map的方式,均会使用到。
第一步,定一个User.java
public class User {
private String name;
private Integer age;
private Date birthday;
// ==> 被EL表达式调用,属性 birStr
/**
* @description: 逻辑视图
* 这个get方法,并没有对应User类中的某个成员变量,只是为了页面展示一个好看的格式。这种操作以后常用
*/
public String getBirStr() {
if (birthday != null) {
// 1. 格式化日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 2. 返回字符串
return sdf.format(birthday);
}
return "";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
第二步
获取代码:
<body>
<%
// 存储自定义对象
User user = new User();
user.setAge(21);
user.setName("Tank");
user.setBirthday(new Date());
request.setAttribute("user", user);
%>
<h3>EL获取对象中的值</h3>
${requestScope.user}<br>
<%--
通过的是对象的属性来获取:${域对象.键.属性}
* 属性:setter或getter方法,去掉set或get,将剩余部分,首字母变小写 ==> 属性
* 比如:setName(String name) ==> 属性为 name
--%>
${requestScope.user.name}<br>
${user.age}<br>
${user.birthday}<br>
<%--${user.birthday.year}<br>--%>
<%--获取自定义的时间返回值--%>
${user.birStr}
</body>
获取对象的语法:
${域对象.键.属性}
自定义对象中的字符串的获取没什么可说的。
birthday属性是Date类型,我们如何按照我们想要的时间格式获取值呢?
这里我们不得不说一个概念:逻辑视图。
逻辑视图:给User类添加一个public String getBirStr(){}
方法,其对应的属性是birStr
,在方法体中将处理后的结果返回即可。这样我们就可以在EL表达式中获取到我们处理后的结果了。上述操作,我们会经常用到!
${user.birStr}
5.3 获取域中存储的值——List集合
语法:
语法:${域名.键名[索引]}
值得一说的是,EL内部做了内部优化,获取值时,如果角标越界,不会抛出异常。
下面我们来演示List集合中存储字符串、对象,如何获取:
<body>
<%
User user = new User();
user.setAge(21);
user.setName("Tank");
user.setBirthday(new Date());
List list = new ArrayList();
list.add("9");
list.add("6");
list.add(user);
request.setAttribute("list", list);
%>
<%--EL获取域中存储的值_List集合--%>
<%--List集合中存储字符串--%>
${requestScope.list[0]}<br>
${list[1]}<br>
<%--EL内部做了内部优化,如果角标越界,不会抛出异常。--%>
${list[100]}<br>
<%--List集合中存储了对象--%>
${list[2].name}<br>
${list[2].age}
</body>
5.4 获取域中存储的值——Map集合
语法,有两种书写方式: ```java ${域名.键名.key名称} ${域名.键名["key名称"]} ``` 注意,第二种方式key值必须使用双引号引起来。下面我们在jsp文件中,演示Map集合中存储字符串、对象,如何获取:
<body>
<%
User user = new User();
user.setAge(21);
user.setName("Tank");
user.setBirthday(new Date());
Map map = new HashMap();
map.put("name", "Tank");
map.put("gender", "男");
map.put("user", user);
request.setAttribute("map", map);
%>
<%--EL获取域中存储的值_Map集合--%>
<%--语法一--%>
${map.gender}<br>
${map.name}<br>
${map.user.name}<br>
<%--获取日期类或自定义类,均可以使用逻辑视图--%>
${map.user.birStr}
<hr>
<%--语法二--%>
${map["gender"]}<br>
${map["name"]}<br>
${map["user"].name}<br>
${map["user"].birStr}<br>
</body>
参考:EL表达式