一. EL表达式介绍
- EL(Expression Language):表达式语言。
- 在 JSP 2.0 规范中加入的内容,也是 Servlet 规范的一部分。
- 作用:在 JSP 页面中获取数据。让我们的 JSP 脱离 java 代码块和 JSP 表达式。
- 语法:${ 表达式内容 }
二. EL获取数据(四大域对象)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL表达式使用细节</title>
</head>
<body>
<%--获取四大域对象中的数据--%>
<%
pageContext.setAttribute("username","zhangsan");
request.setAttribute("username","zhangsan");
session.setAttribute("username","zhangsan");
application.setAttribute("username","zhangsan");
%>
${username}
${request.username}
<%--获取JSP中其他八个隐式对象 获取虚拟目录名称--%>
<%= request.getContextPath()%>
//重点:其中最常用的:${pageContext.request.contextPath },代表web应
用下的根,可以看出下面action中的路径可读性更强了
${pageContext.request.contextPath}
</body>
</html>
EL 表达式能够获取四大域对象的数据,若不指定域对象根据名称从小到大在域对象中查找pageContext < request < session < application
但从指定域中获取数据,会提高查找效率
三. EL中的内置对象
EL表达式11个隐式对象
隐式对象名称 | 说明 |
---|---|
pageContext | 功能完全相同 |
applicationScope | 操作应用域对象数据 |
sessionScope | 操作会话域对象数据 |
requestScope | 操作请求域对象数据 |
pageScope | 操作页面域对象数据 |
header | 获取请求头数据 |
headerValues | 获取请求头数据(多个值) |
param | 获取请求参数数据 |
paramValues | 获取请求参数数据(多个值) |
initParam | 获取全局配置参数数据 |
cookie | 获取Cookie对象 |
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL表达式11个隐式对象</title>
</head>
<body>
<%--pageContext对象 可以获取其他三个域对象和JSP中八个隐式对象--%>
${pageContext.request.contextPath} <br>
<%--applicationScope sessionScope requestScope pageScope 操作四大域对象中的数据--%>
<% request.setAttribute("username","zhangsan"); %>
${username} <br>
${requestScope.username} <br>
<%--header headerValues 获取请求头数据--%>
${header["connection"]} <br>
${headerValues["connection"][0]} <br>
<%--param paramValues 获取请求参数数据--%>
${param.username} <br>
${paramValues.hobby[0]} <br>
${paramValues.hobby[1]} <br>
<%--initParam 获取全局配置参数--%>
${initParam["pname"]} <br>
<%--cookie 获取cookie信息--%>
${cookie} <br> <%--获取Map集合--%>
${cookie.JSESSIONID} <br> <%--获取map集合中第二个元素--%>
${cookie.JSESSIONID.name} <br> <%--获取cookie对象的名称--%>
${cookie.JSESSIONID.value} <%--获取cookie对象的值--%>
</body>
</html>
四. EL表达式获取不同类型数据
<%@ page import="com.itheima.bean.Student" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.HashMap" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL表达式获取不同类型数据</title>
</head>
<body>
<%--1.获取基本数据类型--%>
<% pageContext.setAttribute("num",10); %>
基本数据类型:${num} <br>
<%--2.获取自定义对象类型--%>
<%
Student stu = new Student("张三",23);
stu = null;
pageContext.setAttribute("stu",stu);
%>
<%--EL表达式中没有空指针异常--%>
自定义对象:${stu} <br>
<%--stu.name 实现原理 getName()--%>
学生姓名:${stu.name} <br>
学生年龄:${stu.age} <br>
<%--3.获取数组类型--%>
<%
String[] arr = {"hello","world"};
pageContext.setAttribute("arr",arr);
%>
数组:${arr} <br>
0索引元素:${arr[0]} <br>
1索引元素:${arr[1]} <br>
<%--EL表达式中没有索引越界异常--%>
8索引元素:${arr[8]} <br>
<%--EL表达式中没有字符串拼接--%>
0索引拼接1索引的元素:${arr[0]} + ${arr[1]} <br>
<%--4.获取List集合--%>
<%
ArrayList<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
pageContext.setAttribute("list",list);
%>
List集合:${list} <br>
0索引元素:${list[0]} <br>
<%--5.获取Map集合--%>
<%
HashMap<String,Student> map = new HashMap<>();
map.put("hm01",new Student("张三",23));
map.put("hm02",new Student("李四",24));
pageContext.setAttribute("map",map);
%>
Map集合:${map} <br>
第一个学生对象:${map.hm01} <br>
第一个学生对象的姓名:${map.hm01.name}
</body>
</html>
EL 表达式注意事项
- EL 表达式没有空指针异常。
- EL 表达式没有索引越界异常。
- EL 表达式没有字符串的拼接。
五. EL 表达式运算符
关系运算符
运算符 | 作用 | 示例 | 结果 |
---|---|---|---|
== 或 eq | 等于 | ${5 == 5} 或 ${5 eq 5} | true |
!= 或 ne | 不等于 | ${5 != 5} 或 ${5 ne 5} | false |
< 或 lt | 小于 | ${3 < 5} 或 ${3 lt 5} | true |
> 或 gt | 大于 | ${3 > 5} 或 ${3 gt 5} | false |
<= 或 le | 小于等于 | ${3 <= 5} 或 ${3 le 5} | true |
>= 或 ge | 大于等于 | ${3 >= 5} 或 ${3 ge 5} | false |
逻辑运算符
运算符 | 作用 | 示例 | 结果 |
---|---|---|---|
&& 或 and | 并且 | {A and B} | true / false |
|| 或 or | 或者 | ${A || B} 或 ${A or B} | true / false |
! 或 not | 取反 | ${ !A } 或 ${ not A } | true / false |
其他运算符
运算符 | 作用 |
---|---|
empty | 1.判断对象是否为null 2.判断字符串是否为空字符串 3.判断容器元素是否为0 |
条件 ? 表达式1 : 表达式2 | 三元运算符 |
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="com.itheima.domain.User" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>EL两个特殊的运算符</title>
</head>
<body>
<%--empty运算符:
它会判断:对象是否为null,字符串是否为空字符串,集合中元素是否是0个
--%>
<% String str = null;
String str1 = "";
List<String> slist = new ArrayList<String>();
pageContext.setAttribute("str", str);
pageContext.setAttribute("str1", str1);
pageContext.setAttribute("slist", slist);
%>
${empty str}============当对象为null返回true<br/>
${empty str1 }==========当字符串为空字符串是返回true(注意:它不会调用trim()方法)<br>
${empty slist}==========当集合中的元素是0个时,是true
<hr/>
<%--三元运算符
条件?真:假
--%>
<% request.setAttribute("gender", "female"); %>
<input type="radio" name="gender" value="male" ${gender eq "male"?"checked":""} >男
<input type="radio" name="gender" value="female" ${gender eq "female"?"checked":""}>女
</body>
</html>
网友评论