1.EL表达式的概念
EL全称Expression Language,用来简化JSP页面的数据访问操作,代替<%%>、<%=%>,提供一个更清晰简洁的视图层。
通常与JSTL标签一起使用。
2.EL表达式语法
${expression},expression为有效表达式,如常量,变量,操作符和函数调用。
3..与 [ ] 运算符
EL 提供 . 和 [ ] 两种运算符来存取数据。
${user.name}等价于${user["name"]}或${user['name']}
. 和 [ ] 也可以同时混合使用
${requestScope.userlist[0].name},回传结果为用户数据列表中第一个用户的名字。
不过,以下两种情况,两者会有差异(转自:https://blog.csdn.net/JavaNotes/article/details/80722153):
(1) 当要存取的属性名称中包含一些特殊字符,如. 或 – 等并非字母或数字的符号,就一定要使用 [ ],
例如:${user.My-Name }
上述是不正确的方式,应当改为:${user["My-Name"] }
(2) 我们来考虑下列情况:
${sessionScope.user[data]}
此时,data 是一个变量,假若data的值为"sex"时,那上述的例子等于${sessionScope.user.sex};
假若data 的值为"name"时,它就等于${sessionScope.user.name}。
因此,如果要动态取值时,就可以用上述的方法来做,但无法做到动态取值。
4.EL表达式的简单应用
<%@page import="java.util.Map"%> <%@page import="java.util.HashMap"%> <%@page import="java.util.ArrayList"%> <%@page import="java.util.List"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@page import="entity.User"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>EL表达式用法</title> </head> <body> <!--1.获取JSP的隐式对象,并使用其中的方法--> <br>获取JSP的隐式对象,并使用其中的方法 <% out.println("获取项目根路径:"+request.getContextPath()+"<br>"); out.println("获取response对象的字符集:"+response.getCharacterEncoding()); %> <br>使用EL表达式获取项目根路径:${pageContext.request.contextPath} <br>使用EL表达式获取response对象的字符集:${pageContext.response.characterEncoding} <hr> <!--2.获取四个域对象中的值--> <% //设置域对象的值 pageContext.setAttribute("username", "pageContext张三"); pageContext.setAttribute("password", "pageContext123456"); request.setAttribute("username", "request张三"); request.setAttribute("password", "request123456"); session.setAttribute("username", "session张三"); session.setAttribute("password", "session123456"); application.setAttribute("username", "application张三"); application.setAttribute("password", "application123456"); %> <% out.println("Java程序片中获取request域对象的值"); %> <br>用户名:<%=request.getAttribute("username") %> <br>密码:<%=request.getAttribute("password") %> <br>EL从域中取出数据(EL最重要的作用)获取的顺序:依次从pageContext域,request域,session域,application域中获取属性,在某个域中获取后将不在向后寻找 <br>用户名:${username} <br>密码:${password} <hr> <!--3.EL本身也有和JSP中一样的隐含对象--> <br>EL表达式中的隐式对象 <br>${sessionScope.username}${sessionScope.username} <br>${requestScope.username}${requestScope.username} <br>${username}${username} <br>${applicationScope.username}${applicationScope.username} <hr> <!--4.EL借助四个域对象来读取javabean的属性值--> <br>EL借助四个域对象来读取javabean的属性值 <% User u = new User(); u.setName("张三"); out.println(u.getName()); request.setAttribute("user", u); %> <br>EL读取javaBean属性:${u.name},无法读取 <br>EL读取javaBean属性:${user.name}${user.name} <hr> <!--5.EL算术运算、关系运算--> <br>EL算术运算、关系运算 <br>${1+2}=${1+2} <br>${1-2}=${1-2} <br>${1*2}=${1*2} <br>${1/2}=${1/2} <br>${1 div 2}=${1 div 2} <br>${1%2}=${1%2} <br>${1 mod 2}=${1 mod 2} <br>${1<2?true:false}=${1<2?true:false} <br>关系运算中,gt表示大于,ge表示大于等于,lt表示小于,le表示小于等于,eq表示等于,ne表示不等于 <br>${100>200}=${100>200} <br>${100 ge 200}=${100 ge 200} <hr> <!--6.EL读取collection--> <% List<User> users = new ArrayList<User>(); users.add(u); users.add(new User("李四","123456")); request.setAttribute("userlist", users); %> <br>${userlist}${userlist} <br>${userlist[0].name}${userlist[0].name} <br>${userlist[1].name}${userlist[1].name} <hr> <!--7.EL读取Map对象--> <% Map map1 = new HashMap(); map1.put("username", "york"); map1.put("user", u); request.setAttribute("userlist2", map1); %> <br>${userlist2.username}${userlist2.username} <br>${userlist2.user.name}${userlist2.user.name} </body> </html>
运行结果:
EL表达式读取JavaBean,Map对象,Collection集合都是要先放到四个域对象中才能访问,本质还是读取域对象中存放的数据。
参考文章: