EL
程序员文章站
2022-05-09 19:06:45
...
EL
什么是EL
Expression Language 是JSP表达式语言
语法:
${EL表达式}-
与JSP表达式区别:
JSP表达式语法:<%=变量%> 输出的脚本中变量
EL输出的是作用域中的变量
<body> <% int m=5; //把变量放到作用域 pageContext.setAttribute("m", 10); %> JSP表达式输出:<%=m%> <br/> EL输出:${m} </body>
- EL表达式的作用:
- 获取作用域中的数据
- 用于计算,如:算术运算,逻辑运算,关系运算
获取数据
在四个域中从小到大自动查找: ${变量名}
如:输出某个域中变量msg,写法 : ${msg}
,相当于JSP中的pageContext.findAttribute("msg")
指定域获取数据
作用域 | Java代码 | EL的写法 |
---|---|---|
页面域 | <%=pageContext.getAttribute(“变量名”)%> | ${pageScope.变量名} |
请求域 | <%=request.getAttribute(“变量名”)%> | ${requestScope.变量名} |
会话域 | <%=session.getAttribute(“变量名”)%> | ${sessionScope.变量名} |
上下文域 | <%=application.getAttribute(“变量名”)%> | ${applicationScope.变量名} |
自动查找 | <%=pageContext.findAttribute(“变量名”)%> | ${变量名} |
- 演示:保存4个同名的变量,分别输出每个域中的变量值。
<%
pageContext.setAttribute("msg", "我是页面域");
request.setAttribute("msg", "我是请求域");
session.setAttribute("msg", "我是会话域");
application.setAttribute("msg", "我是上下文域");
%>
JSP表达式输出:<%=m%> <br/>
EL输出:${m} <br/>
指定域:${pageScope.msg} <br/>
指定域:${requestScope.msg} <br/>
指定域:${sessionScope.msg} <br/>
指定域:${applicationScope.msg} <br/>
自动查找:${msg} <br/>
EL中11个隐式对象
隐含对象名称 | 描述 |
---|---|
pageContext | 代表页面上下文对象,可以调用一个get开头方法,调用的时候省略get |
pageScope | 代表页面域的Map对象 |
requestScope | 代表请求域的Map对象 |
sessionScope | 代表会话域的Map对象 |
applicationScope | 代表上下文域Map对象 |
param | 得到表单提交的参数,功能与request.getParameter(“名字”)EL写法 : ${param.名字} |
paramValues | 得到表单提交的**一组同名参数**(是一个数组),功能与request.**getParameterValues(“名字”)**EL写法:${paramValues.名字} |
header | 得到请求头的信息,与request.getHeader(“请求头”)功能相同 |
headerValues | 得到一组同名的请求头的信息,与request.getHeaders(“请求头”) |
cookie | 得到浏览器发送过来的Cookie对象,得到cookie的名字 {cookie.对象.value} |
initParam | 类似于config.getInitParameter(名字)${initParam.名字} |
pageContext调用get方法
调用方法省略get
当前工程路径:
<br/>
<%=request.getContextPath() %><br/>
${pageContext.request.contextPath}<hr/>
请求资源路径:<br/>
<%=request.getRequestURL() %><br/>
${pageContext.request.requestURL }
<hr/>
当前会话的ID:<br/>
<%=session.getId() %><br/>
${pageContext.session.id} <br>
param和paramValues使用
<!--
请求的地址:
http://localhost:8080/day41-el/demo2.jsp?user=Tom&hobby=swimming&hobby=reading
-->
得到参数:${param.user}<br/>
得到多个参数值(一个数组):${paramValues.hobby[0]}、${paramValues.hobby[1]}
header的使用
得到主机:${header.host}<br/>
得到浏览器类型: ${header.User-Agent} <br/>
<!-- 如果键的名字中包含一些特殊的字符,使用["键名"] -->
应该改成:${header["user-agent"]} <hr/>
得到Cookie中的值:
- 先通过EL得到指定cookie的对象,再通过name和value得到具体的名字和值
<%
Cookie cookie = new Cookie("man", "Jack");
//写到浏览器端
response.addCookie(cookie);
%>
通过EL取出Cookie的值:
${cookie.man.name} = ${cookie.man.value}
EL表达式中[""]
和.
的区别
得到EL表达式的两种写法:[""]
和.
- 示例:从请求域中取出变量mn和m-n要怎么写?
<%
request.setAttribute("mn",100);
request.setAttribute("m-n", 200);
%>
${requestScope.mn} <br/>
${requestScope["m-n"]} <br/>
-
什么时候使用[“”]方式
如果键的名字中包含特殊字符,使用中括号加引号的方式,既可以使用双引号,也可以使用单引号。
EL表达式获取不同类型的数据
获取JavaBean的属性值
<%
User user = new User(100, "猪八戒", true);
pageContext.setAttribute("user", user);
%>
姓名:${user.name} 、 性别:${user.male?"男":"女"}
<hr/>
```
#### 获取数组中的元素值
```
<%
int arr[] = {100,200,56,34,20};
pageContext.setAttribute("arr", arr);
%>
${arr[0]}、${arr[1]}、${arr[2]}
获取Map中的值
<%
Map<String, String> names = new HashMap<String,String>();
names.put("no1", "苍老师");
names.put("no-2", "宋老师");
names.put("no3", "陈老师");
pageContext.setAttribute("names", names);
%>
${names.no1}、${names['no-2']}、${names.no3}
输出List中的元素
<%
List<String> list = new ArrayList<String>();
list.add("潘金莲");
list.add("鲁智深");
list.add("林冲");
pageContext.setAttribute("list", list);
%>
${list[0]}、${list[1]}、${list[2]}、${list[3]}
-
面试题:如果一个会话域中保存了一个user对象,请问以下哪种取值可以取出user对象的username属性值。
- ${user.username}
- ${sessionScope.user.username}
- ${username}
<%=((User)pageContext.findAttribute(“user”)).getUsername() %>
<%=((User)session.getAttribute(“user”)).getUsername() %>
EL中使用表达式
算术表达式 :
算术运算符 | 说明 | 范例 | 结果 |
---|---|---|---|
+ | 加 | ${1+1} | 2 |
- | 减 | ${2-1} | |
* | 乘 | ${1*1} | 1 |
/或div | 除 | ${5 div 2} | 2.5 |
%或mod | 取余 | ${5 mod 2} | 1 |
<h2>算术运算</h2>
加 ${1+1}
减 ${2-1}
乘 ${1*1}
除 ${5 / 2}
取余 ${5 % 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 |
<h2>比较运算</h2>
${1 eq 1}
${1 != 1}
${1 lt 2}
${1 <= 1}
${1 > 2}
${1 >=1}
逻辑表达式 :
逻辑运算符 | 说明 | 范例 | 结果 |
---|---|---|---|
&& 或 and | 交集(与) | ${true and false} | false |
|| 或 or | 并集(或) | ${true || false } | true |
! 或 not | 非 | ${not true} | false |
<h2>逻辑运算</h2>
${true and false}
${true || false }
${not true}
三元运算:
${表达式?真值:假值}
<h2>三元运算</h2>
${param.age>18?"你已经成年":"未成年,请绕行" }
判空表达式:
语法:${empty 表达式}
-
作用:
判断一个变量是否为null,如果是返回true
判断字符串是否是空串,如果是返回true。
- 判断一个集合中是否包含有元素,如果没有元素,返回true
<h2>empty运算符</h2>
1. 判断一个变量是否为null,如果是返回true
<br/>
${empty user}<br/>
2. 判断字符串是否是空串,如果是返回true。<br/>
<%
String str = "";
pageContext.setAttribute("str", str);
%>
${empty str}
<br/>
3. 判断一个集合中是否包含有元素,如果没有元素,返回true<br/>
<%
List<String> list =new ArrayList<String>();
EL表达式的启用和禁用
-
页面禁用
<%@page isELIgnored=”true” %>
- true表示禁止,默认是false,可以使用。
EL的转义
如果只是禁用某一个,使用\进行转义。
如:\${1+2}
<!-- 转义后失效原样输出 -->
加: \${1+1}
减: ${2-1}
上一篇: 表达式树的创建与输出
下一篇: 表达式树的值