EL是Expression Language的缩写,意为表达式语言。使用EL表达式能够简化JSP页面中Java代码的编写。格式非常简单,只需要在JSP页面中嵌入${表达式}即可。
入门案例
新建一个JSPDemo4.jsp,使用EL表达式对两个整数进行判断。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL入门案例</title>
</head>
<body>
<!--el表达式,判断4>3是否正确-->
${4>3}
</body>
</html>
JSP忽略EL表达式
JSP是默认支持EL表达式的,如果想要JSP页面忽略EL表达式。可以通过page指令设置。
1.在page指令中添加 isELIgnored="true"
2./${表达式}
忽略EL表达式之后,EL表达式会作为页面内容原样输出。
<%@ page contentType="text/html;charset=UTF-8" isELIgnored="true" language="java" %>
<html>
<head>
<title>EL入门案例</title>
</head>
<body>
<!--el表达式,判断4>3是否正确-->
/${4>3}
</body>
</html>
EL运算符
EL的运算符和Java基本一致,简单看一下就可以了。
算数运算符:+ - * / %
比较运算符:== != > >= < <=
逻辑运算符:&& || !
空运算符:empty
功能:用于判断集合、数组、字符串是否为null并且长度是否为0
${empty list}
创建JSPDemo5.jsp 演示EL运算符,下面只简单演示一些empty运算符。
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL运算符</title>
</head>
<body>
<!--定义ArrayList变量,值为null-->
<% ArrayList list=null;%>
<!--判断list是否为null-->
${empty(list)}
</body>
</html>
EL获取域值
EL表达式只能从域对象中获取值。存储在域中的值可以是字符串,也可以是对象。
格式1: ${域名称.键名称}
pageScope: 从pageContext域中获取数据
requestScope: 从request域中获取数据
sessionScope: 从session域中获取数据
applicationScope: 从application域中获取数据
格式2: ${键名} 从小到大的域中查找指定键名对应的数据,如果找到了就不再往下找。
域中的值是字符串
创建JSPDemo6.jsp 演示EL获取域对象中的值。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL获取域值</title>
</head>
<body>
<%
/*向Page域存储数据*/
pageContext.setAttribute("key1","Hello Page");
/*向request域中存储数据*/
request.setAttribute("key2","Hello Request");
/*向session域中存储数据*/
session.setAttribute("key3","Hello Session");
/*向applicatoiin域中存储数据*/
application.setAttribute("key4","Hello Application");
%>
<!--${域名称.键名}:获取指定域中指定键的值-->
${pageScope.key1} <br>
${requestScope.key2} <br>
${sessionScope.key3} <br>
${applicationScope.key4} <br>
<!--${键名}:按照小到大的域中获取键对应的值-->
${key3}
</body>
</html>
域中的值是普通对象
创建JSPDemo7.jsp 演示EL获取域对象中的值。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL_域中的值为普通对象</title>
</head>
<body>
<!--request域中存储Student对象-->
<%
Student stu=new Student("张三",20);
request.setAttribute("stu",stu);
%>
<!--EL获取Student对象的属性值-->
${requestScope.stu} <br>
${requestScope.stu.name} <br>
${requestScope.stu.age} <br>
</body>
</html>
域中存储List集合
<%@ page import="servlet.Student" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL_域中的值为普通对象</title>
</head>
<body>
<!--request域中存储List集合-->
<%
ArrayList<Student> list=new ArrayList<>();
list.add(new Student("张三",20));
list.add(new Student("李四",30));
request.setAttribute("list",list);
%>
<!--EL获取request域中的list集合,以及其元素-->
获取list集合:
${requestScope.list} <br>
获取list集合的0索引元素:
${requestScope.list[0].name},
${requestScope.list[0].age} <br>
</body>
</html>
域中存储map集合
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL_域中的值为普通对象</title>
</head>
<body>
<!--request域中存储List集合-->
<%
Map<String,String> map=new HashMap<>();
map.put("孙悟空","花果山");
map.put("猪八戒","高老庄");
map.put("沙和尚","流沙河");
request.setAttribute("map",map);
%>
<!--EL获取request域中的map集合,以及其元素-->
获取map集合:${requestScope.map} <br>
获取map集合中键对应的值:${requestScope.map["孙悟空"]} <br>
</body>
</html>
EL表达式介绍
- EL:表达式语言
- 在JSP2.0规范中加入的语言,也是Servlet规范的一部分
- 作用:在JSP页面中获取数据,让我们的JSP脱离Java代码块和JSP表达式。
- 使用EL表达式能够简化JSP页面中Java代码的编写。格式非常简单,只需要在JSP页面中嵌入
${表达式}
即可。
<%--将用户名存入请求域--%>
<%request.setAttribute("username","zhangsan");%> <br>
Java代码获取数据:<%out.println(request.getAttribute("username"));%><br>
JSP表达式:<%=request.getAttribute("username")%><br>
EL获取数据:${username}
EL获取域值
EL表达式根据域对象中存储的数据类型不同,获取方式也稍有不同。
- EL获取基本类型数据
<!--在request域中存数据-->
<% request.setAttribute("num",10); %>
<!--获取num的值-->
${num} <br>
- EL获取自定义对象
<!--request域中存储Student对象-->
<%
Student stu=new Student("张三",20);
request.setAttribute("stu",stu);
%>
<!--EL获取Student对象的属性值-->
学生对象:${stu} <br>
学生姓名:${stu.name} <br>
学生年龄:${stu.age} <br>
- EL获取List集合
<!--request域中存储List集合-->
<%
ArrayList<Student> list=new ArrayList<>();
list.add(new Student("张三",20));
list.add(new Student("李四",30));
request.setAttribute("list",list);
%>
<!--EL获取request域中的list集合,以及其元素-->
获取list集合:${list} <br>
获取list集合的0索引学生:${list[0]}<br>
获取list集合的1索引学生姓名:${list[1].name}<br>
- EL获取Map集合
<!--request域中存储Map集合-->
<%
Map<String,String> map=new HashMap<>();
map.put("孙悟空","花果山");
map.put("猪八戒","高老庄");
map.put("沙和尚","流沙河");
request.setAttribute("map",map);
%>
<!--EL获取request域中的map集合,以及其元素-->
获取map集合:${map} <br>
获取map集合中键对应的值:${map["孙悟空"]} <br>
EL 表达式注意事项
- EL表达式没有空指针异常
- EL表达式没有索引越界异常
- EL表达式没有字符串的拼接
JSTL标签库
JSTL(全称JavaServer Pages Tag Library)意为JSP标准标签库,可以用来简化在JSP页面中Java代码的编写。
导入JSTL相关jar包
在JSP页面导入JSTL包
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
常用JSTL标签
<!--if标签:相当于Java的if语句-->
<c:if test="${number%2==0}">
${number}是偶数
</c:if>
<!--choose标签:相当于Java的switch语句-->
<c:choose>
<c:when test="${number==1}">星期一</c:when>
<c:when test="${number==2}">星期二</c:when>
<c:when test="${number==3}">星期三</c:when>
</c:choose>
<!--foreach标签:相当于Java的for循环-->
<c:forEach begin="0" end="${list.size()}" step="1" var="i">
<c:if test="${list[i]!=null}">
${list[i].name},${list[i].age}<br>
</c:if>
</c:forEach>
<!--foreach标签:类似Java增强for循环-->
<c:forEach items="${list}" var="element">
${element.name},${element.age}<br>
</c:forEach>
JSTL练习
在request域中存储一个元素是Student对象的list集合,使用jstl和el把元素的属性值显示到table表格中。
<%@ page import="java.util.ArrayList" %>
<%@ page import="servlet.Student" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>JSTL+EL综合练习</title>
</head>
<body>
<!--往request域中存储4个Student对象的list集合-->
<%
ArrayList<Student> list=new ArrayList<>();
list.add(new Student("001","孙悟空",20,"1991-9-10"));
list.add(new Student("002","猪八戒",20,"1992-12-10"));
list.add(new Student("003","沙和尚",20,"1993--3-9"));
list.add(new Student("004","白龙马",20,"1994-4-23"));
request.setAttribute("list",list);
%>
<!--使用jstl的if语句判断list集合是否为空-->
<c:if test="${not empty list}">
<table width="500" border="1" align="center" cellspacing="0">
<!--使用jstl遍历list集合-->
<tr>
<th>编号</th>
<th>姓名</th>
<th>年龄</th>
<th>生日</th>
</tr>
<c:forEach items="${list}" var="e">
<tr>
<td>${e.id}</td>
<td>${e.name}</td>
<td>${e.age}</td>
<td>${e.birthday}</td>
</tr>
</c:forEach>
</table>
</c:if>
</body>
</html>