EL:Expression Language

1.EL的概念和它的两个作用

概念

Expression Language 表达式语言,是运行在JSP上一种表达式。只能运行在JSP中,不能运行HTML中。
EL本质上也是一些Java代码

作用

  1. 用来输出作用域中值

  2. 可以进行简单运算

语法  ${作用域中键}

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>EL表达式</title>
</head>
<body>
<%--作用1:输出使用域中值--%>
<%
    //向页面域添加键和值
    pageContext.setAttribute("name", "牛哥哥");
%>
<%--
语法:${作用域范围对象.键}
EL中对象,一共有11个对象可以使用
--%>
${pageScope.name}

<%--作用2:可以进行计算--%>
${42* 3}
</body>
</html>

2. EL取出作用域中的值

为什么要使用EL?

因为JSP页面上过多的Java代码会导致页面很难维护,页面代码比较混乱。

使用EL的目标是为了减少页面Java代码,甚至不写Java代码。

要实现的功能代码全部放在Servlet中,JSP只做为显示数据的功能。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>EL取出作用域中的值</title>
</head>
<body>
<%
    //向页面域添加键和值
    pageContext.setAttribute("name", "牛魔王");
    //向请求域添加键和值
    request.setAttribute("name", "红孩儿");
    //向会话域添加键和值
    session.setAttribute("name", "铁扇公主");
    //向上下文域添加键和值
    application.setAttribute("name", "太上老君");
%>

使用EL取出作用域中值<hr/>
${pageScope.name} <br/>
${requestScope.name} <br/>
${sessionScope.name} <br/>
${applicationScope.name} <br/>
<%--相当于pageContext.findAttribute("name"),从小到大的范围去查找--%>
${name} <br/>
</body>
</html>
作用域EL的写法
页面域 ${pageScope.name}
请求域 ${requestScope.name}
会话域 ${sessionScope.name}
上下文域 ${applicationScope.name}
自动查找 ${name}

 

3.使用EL取出不同数据类型的值

使用EL,分别从JavaBean(实体类的属性值),Map,集合List,数组中取出它们的值

<%@ page import="com.itheima.entity.Student" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.HashMap" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>取出不同的数据类型</title>
</head>
<body>

<h2>得到JavaBean中的属性值</h2>
<%
    Student student = new Student("艾比", false, 20);
    //数据必须放在作用域中
    pageContext.setAttribute("stu", student);
%>
<%--使用EL取出数据,语法:${对象名键.属性名}  EL支持三元运算 --%>
姓名:${stu.name} 性别:${stu.gender?"男":"女"} 成绩:${stu.score}
<hr>

<h2>得到List集合中的值</h2>
<%
    ArrayList<String> names = new ArrayList<>();
    names.add("暴君");
    names.add("主宰");
    names.add("暴风龙王");
    request.setAttribute("names", names);
%>
<%--
${对象名[索引号]}
如果没有值,不会显示NULL,也不会报错
单独使用EL是不能遍历元素的,如果要遍历必须结合JSTL来使用
--%>
${names[0]} ${names[1]} ${names[2]} ${names[3]}
<hr>

<h2>得到数组中的值</h2>
<%
    int[] arr = {5, 23, 31, 38};
    session.setAttribute("arr",arr);
%>
<%--
在EL中取出数组的值,与List集合的语法是一样的
${arr[5]} 如果没有这个元素,也不会报错
--%>
${arr[0]} ${arr[3]} ${arr[5]}
<hr>

<h2>得到Map中的值</h2>
<%
    HashMap<String, String> map = new HashMap<>();
    map.put("stu1", "皮卡丘");
    map.put("stu2", "小火龙");
    map.put("stu3-stu4", "杰尼龟");
    //放在作用域中
    request.setAttribute("map", map);
%>
<%--
语法:${map对象.键}
map.stu3 没有这个值,默认EL认为是0
stu4 没有这个值,默认EL认为是0
0-0=0
注:如果键中包含了特殊的字符,可以写成:["键名"]
--%>
${map.stu1} ${map.stu2} ${map.stu3-stu4} 写成 ${map["stu3-stu4"]}
</body>
</html>

使用EL中从域中取出不同数据类型的写法,前提:对象一定要放在作用域中

数据类型写法
JavaBean ${对象名.属性名}
List ${对象名[索引号]}
数组 ${对象名[索引号]}
Map集合 ${对象名.Map键} 或 ${对象名["Map键"]}

4.EL中内置对象

EL内置对象功能
pageScope 获取页面域中值
requestScope 获取请求域中值
sessionScope 获取会话域中值
applicationScope 获取上下文域中值
param 相当于getParameter()
paramValues 相当于getParameterValues()
header 相当于getHeader()
cookie ${cookie.cookie的名字.name} 获取键 ${cookie.cookie的名字.value} 获取值

取出Cookie中的值

先通过EL得到指定cookie的对象,再通过name和value得到具体的名字和值

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>EL中内置对象</title>
</head>
<body>
<%
    //创建一个Cookie对象
    Cookie man = new Cookie("user", "臭弟弟");
    //向浏览器发送Cookie
    response.addCookie(man);
%>

<%--
语法:${cookie.cookie的名字},返回的是Cookie对象,获取它的名字和值,还要调用getName和getValue的方法
第一次访问将Cookie写到浏览器端,第二次才发送给服务器。
EL中可以直接调用get开头的方法
--%>
使用EL取出Cookie的名字:${cookie.user.name}   值:${cookie.user.value}
</body>
</html>

param和paramValues使用

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>与参数相关的对象</title>
</head>
<body>
JSP表达式取出值:<br/>
<%=request.getParameter("user")%><br>
<%=request.getParameter("age")%><br>
<%--通过名字获取一组值--%>
<%=request.getParameterValues("hobby")[0]%><br>
<%=request.getParameterValues("hobby")[1]%><br>
<hr/>
EL的对象取出值:<br/>
${param.user}<br/>
${param.age}<br/>
${paramValues.hobby[0]}<br/>
${paramValues.hobby[1]}<br/>
</body>
</html>

header的使用

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>EL中获取请求头中值</title>
</head>
<body>
获取浏览器的类型:<%=request.getHeader("user-agent")%> <br/>
获取浏览器的类型:${header.user-agent} <br/>
获取浏览器的类型:${header["user-agent"]} <br/>
</body>
</html>

5.EL中各种运算符

建议使用于JAVA一样的语法,便于记忆

算术运算符

算术运算符说明范例结果
+ ${1+1} 2
- ${2-1} 1
* ${1*1} 1
/或div ${5 div 2} 2.5
%或mod 取余 ${5 mod 2} 1

比较运算符

关系运算符说明范例结果
==或 eq 等于(equal) ${1 eq 1} true
!= 或 ne 不等于(not equal) ${1 != 1} false
< 或 lt 小于(Less than) ${1 lt 2} true
<=或 le 小于等于(Less than or equal) ${1 <= 1} true
> 或 gt 大于(Greater than) ${1 > 2} false
>=或 ge 大于等于(Greater than or equal) ${1 >=1} true

逻辑运算符 :

逻辑运算符说明范例结果
&& 或 and 交集(与) ${true and false} false
|| 或 or 并集(或) ${true || false } true
! 或 not ${not true} false

三元运算符:

判断前面的表达式,如果为真,则输出真的值,否则输出假的值

${条件表达式?真值:假值}

判空运算符:

<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>EL中各种运算符</title>
</head>
<body>
在EL中两个整数相除,结果可能是一个小数:
${5 div 2}  ${5 / 2}
<hr/>
判断运算<br/>
<%--
语法:
${empty 变量名}
1. 如果变量名在四个作用域中都不存在,返回true
2. 如果变量名是一个字符串,并且是空串,返回true
3. 如果变量名是一个集合,集合中没有元素,返回true
--%>
<%
    ArrayList<String> list = new ArrayList<>();
    request.setAttribute("list", list);
%>

${empty list}<br/>  
${empty abc}<br/>
${empty ""}<br/>
${empty "abc"}<br/>
${empty null}<br/>
</body>
</html>

 

想看更多精彩内容,可以关注我的CSDN

我的CSDN

posted @ 2020-09-02 23:47  Yblue  阅读(217)  评论(0编辑  收藏  举报