EL表达式介绍
- Expression Language表达式语言
- 是一种在JSP页面获取数据的简单方式(只能获取数据,不能设置数据)
- 在JSP2.0开始引入概念,默认支持EL表达式
语法格式
在JSP页面的任何静态部分均可通过:${expression}来获取到指定表达式的值
禁用EL表达式
使用斜杠“\”符号
使用斜杠符号是一种比较简单的禁用EL的方法。该方法只需要在EL的起始标记“${”前加上“\”符号,具体的语法如下:
- \${expression}
说明:该语法适合只是禁用页面的一个或几个EL表达式的情况。
使用page指令
使用JSP的page指令也可以禁用EL表达式,其具体的语法格式如下:
<%@ page isELIgnored="布尔值" %>
参数说明:
- isELIgnored属性:用于指定是否禁用页面中的EL,如果属性值为true,则忽略页面中的EL,否则将解析页面中的EL。示例:如果要忽略页面中的EL,可以在页面的顶部添加一下代码:<%@ page isELIgnored="true" %>
说明:该方法适合禁用一个JSP页面中的EL。
L表达式中的运算符
在EL表达式中我们可以使用运算符以达到我们想要的结果,运算符按作用分为以下几种:
1.算术运算符
+ 例如:${6+6} 。注意:在EL表达式中的‘+’只有数学运算的功能,没有连接符的功能,它会试着把运算符两边的操作数转换为数值类型,进而进行数学加法运算,最后把结果输出。若出现${'a'+'b'}则会出现异常。
- 例如:${4-3}
* 例如:${4*3}
/ 例如:${9/3}
2.关系运算符
> 或者 gt, 例如:${8>9} 或者 ${8 gt 9 }
>= 或者 ge, 例如:${45>=9} 或者 ${45 ge 9 }
< 或者 lt, 例如:${4<9} 或者 ${4 lt 9 }
<= 或者 le, 例如:${9<=8} 或者 ${9 le 8 }
== 或者 eq, 例如:${4==4} 或者 ${4 eq 4 }
!= 或者 ne, 例如:${4!=3} 或者 ${4 ne 3 }
3.逻辑运算符
&& 或者 and, 例如:${false && false} 或者 ${false and false }
|| 或者 or, 例如:${true || false} 或者 ${true or false }
! 或者 not,例如:${!true}(相当于${false}) 或者 ${not true }
4.三元运算符
? : 例如:${3>2?'是':'不是'}
5.特殊运算符
空运算符: empty
EL获取数据(从四大域中获取属性)
EL只能从四大域中获取属性
获取简单数据指非对象类型的数据,比如String,Integer,基本类型等
语法:
- ${域名称.键名}:从指定域中获取指定键的值
域属性相关(4个)
- pageScope:从page范围域属性空间中查找指定的key
- requestScope:从request范围域属性空间中查找指定的key
- sessionScope:从session范围域属性空间中查找指定的key
- applicationScope:从application范围域属性空间中查找指定的key
如果没有使用EL的内置对象,则查找数据顺序是依次按照由小到大范围从四大域中查找指定名称的属性值
EL获取域中存储的值---对象值
语法:
- ${域名称.键名.属性名}
本质上会去调用对象的getter方法
EL获取域中存储的值 --List集合:
语法:
- ${域名称.键名[索引]}
EL获取域中存储的值 --Map集合:
语法:
- ${域名称.键名.key名称}
- ${域名称.键名["key名称"]}
例如:
<%@ page import="cn.itcast.domain.User" %>
<%@ page import="java.util.*" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>el获取数据</title>
</head>
<body>
<%
User user = new User();
user.setName("张三");
user.setAge(23);
user.setBirthday(new Date());
request.setAttribute("u",user);
List list = new ArrayList();
list.add("aaa");
list.add("bbb");
list.add(user);
request.setAttribute("list",list);
Map map = new HashMap();
map.put("sname","李四");
map.put("gender","男");
map.put("user",user);
request.setAttribute("map",map);
%>
<h3>el获取对象中的值</h3>
${requestScope.u}<br>
<%--
* 通过的是对象的属性来获取
* setter或getter方法,去掉set或get,在将剩余部分,首字母变为小写。
* setName --> Name --> name
--%>
${requestScope.u.name}<br>
${u.age}<br>
${u.birthday}<br>
${u.birthday.month}<br>
${u.birStr}<br>
<h3>el获取List值</h3>
${list}<br>
${list[0]}<br>
${list[1]}<br>
${list[10]}<br>
${list[2].name}
<h3>el获取Map值</h3>
${map.gender}<br>
${map["gender"]}<br>
${map.user.name}
</body>
</html>
${pageContext.request.contextPath}:动态获取虚拟目录
${pageContext.request.contextPath}
是JSP取得绝对路径的方法,等价于<%=request.getContextPath()%>
。- 也就是取出部署的应用程序名或者是当前的项目名称。
- 比如我的项目名称是demo1在浏览器中输入为
http://localhost:8080/demo1/a.jsp
${pageContext.request.contextPath}
或<%=request.getContextPath()%>
取出来的就是/demo1, - 而"/"代表的含义就是 http://localhost:8080 故有时候项目中这样写
${pageContext.request.contextPath}/a.jsp
JSTL
概念:JavaServer Pages Tag Library JSP标准标签库。是由Apache组织提供的开源的免费的jsp标签 。
作用:
- 用于简化和替换jsp页面上的java代码
使用步骤:
- 导入jstl相关jar包
- 引入标签库:taglib指令: <%@ taglib %>
- 使用标签
常用标签
详细可以去https://blog.csdn.net/qq_36297434/article/details/84638754 查看。
练习:
- 需求:在request域中有一个存有User对象的List集合。需要使用jstl+el将list集合数据展示到jsp页面的表格table中
<%@ page import="cn.itcast.domain.User" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>test</title>
</head>
<body>
<%
List list = new ArrayList();
list.add(new User("张三",23,new Date()));
list.add(new User("李四",24,new Date()));
list.add(new User("王五",25,new Date()));
request.setAttribute("list",list);
%>
<table border="1" width="500" align="center">
<tr>
<th>编号</th>
<th>姓名</th>
<th>年龄</th>
<th>生日</th>
</tr>
<%--数据行--%>
<c:forEach items="${list}" var="user" varStatus="s">
<c:if test="${s.count % 2 != 0}">
<tr bgcolor="red">
<td>${s.count}</td>
<td>${user.name}</td>
<td>${user.age}</td>
<td>${user.birStr}</td>
</tr>
</c:if>
<c:if test="${s.count % 2 == 0}">
<tr bgcolor="green">
<td>${s.count}</td>
<td>${user.name}</td>
<td>${user.age}</td>
<td>${user.birStr}</td>
</tr>
</c:if>
</c:forEach>
</table>
</body>
</html>