EL:Expression Language
Expression Language 表达式语言,是运行在JSP上一种表达式。只能运行在JSP中,不能运行HTML中。
EL本质上也是一些Java代码
-
用来输出作用域中值
-
<%@ 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>
为什么要使用EL?
<%@ 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} |
自动查找 |
使用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键"]} |
EL内置对象 | 功能 |
---|---|
pageScope | 获取页面域中值 |
requestScope | 获取请求域中值 |
sessionScope | 获取会话域中值 |
applicationScope | 获取上下文域中值 |
param | 相当于getParameter() |
paramValues | 相当于getParameterValues() |
header | 相当于getHeader() |
cookie | ${cookie.cookie的名字.name} 获取键 ${cookie.cookie的名字.value} 获取值 |
先通过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>
<%@ 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>
<%@ 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>
算术运算符
算术运算符 | 说明 | 范例 | 结果 |
---|---|---|---|
+ | 加 | ${1+1} | 2 |
- | 减 | ${2-1} | 1 |
* | 乘 | ${1*1} | 1 |
/或div | 除 | ${5 div 2} | 2.5 |
%或mod | 取余 | ${5 mod 2} |
比较运算符
关系运算符 | 说明 | 范例 | 结果 |
---|---|---|---|
==或 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