文章目录
第1章 为什么需要EL
在JSP页面上获取域对象中保存的数据和获取请求参数数据是非常常用的操作。
获取请求域中的数据
<%=request.getAttribute("message") == null ? "" : request.getAttribute("message") %>
获取请求参数
<%=request.getParameter("userName")==null? "": request.getParameter("userName")%>
有没有什么办法能够让上述代码简洁一些呢?有!
获取请求域中的数据
${requestScope.message }
获取请求参数
${param.userName }
这就是EL表达式,它能够极大的简化JSP页面上数据的显示。他就是被用来优化数据读取操作的。
再比如:
第2章 EL的基本使用
2.1 什么是EL表达式
-
EL(Expression Language)是JSP内置的表达式语言,用以访问页面的上下文以及不同作用域中的对象 ,取得对象属性的值,或执行简单的运算或判断操作。EL在得到某个数据时,会自动进行数据类型的转换。
-
**EL表达式用于代替JSP表达式(<%= %>)**在页面中做输出操作。
-
EL表达式出现的目的是为了使JSP写起来更加简单,让jsp的代码更佳简化。
-
EL表达式仅仅用来读取数据,而不能对数据进行修改。
-
使用EL表达式输出数据时,如果有则输出数据,如果为null则什么也不输出。
-
我们先来看一下EL表达式的一个Hello world 程序,看看它是如何简化jsp代码。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//首先我们需要在request域对象中设置一个属性
request.setAttribute("hello", "这是内容");
%>
<%-- 获取请求域中的属性hello输出 --%>
jsp的输出:<%=request.getAttribute("hello") == null ? "" : request.getAttribute("hello")%><br/><br/>
<%-- 输出在域中查找输出hello的值 --%>
EL表达式的输出:${
hello}<br/><br/>
</body>
</html>
页面访问后的输出内容:
从上面的程序,我们不难看出:我们要输出域中的属性,方便多了。
所以EL表达式使得jsp页面的代码变得更加简洁。主要用于替换 jsp中表达式脚本。
EL表达式的最主要功能就是从域对象中获取数据,并且输出
2.2 EL表达式基本语法
- 使用EL表达式获取数据的语法:(EL表达式总是放在{}中,而且前边有一个$作为前缀。)
“${标识符}”
-
第一点:当EL表达式输出的key不存在的时候,输出的是空串””
-
第二点:EL表达式在域对象中搜索属性的顺序是pageContext,request,session,application
-
获取域中的对象可以直接使用对象名,这时按照从小到大的顺序依次向上查找。如获取域中名字为user的对象
- ${user}
-
获取对象的属性值可以直接通过“对象.属性名”
- ${user.name}
- ${user.age}
-
注意:这里的属性名是get和set方法对应的属性值,并不是对象中的变量名。
- 比如:如果获取name属性值,那么该对象中必定要存在一个getName()方法。
-
获取对象的属性也可以通过“对象[“属性名”]”
- ${user[“name”]}
- ${user[“age”]}
-
获取Map中属性时可以直接通过属性的key
- ${map.key}
- ${map[key]}
-
在指定域中获取属性
- 在EL表达式中如果我们直接使用属性名如:${user},它将会在四个域中由小到大依次查找。顺序:pageScope、requestScope、sessionScope、applicationScope。
- 也可以指定从哪个域中获取:
- ${pageScope .user}:当前页面
- ${requestScope.user}:当前请求
- ${sessionScope.user}:当前会话
- ${applicationScope.user}:当前应用
第3章 EL表达式运算符
语法:${ 运算表达式 } , EL 表达式支持如下运算符:
3.1 算术运算符
算数运算符 | 说 明 | 范 例 | 结果 |
---|---|---|---|
+ | 加法 | ${ 12 + 18 } | 30 |
- | 减法 | ${ 18 - 8 } | 10 |
* | 乘法 | ${ 12 * 12 } | 144 |
/ 或div | 除法 | ${ 144 / 12 } 或 ${ 144 div 12 } | 12 |
% 或mod | 取模 | ${ 144 % 10 } 或 ${ 144 mod 10 } | 4 |
3.2 关系运算符
关系运算符 | 说 明 | 范 例 | 结果 |
---|---|---|---|
== 或 eq | 等于 | ${ 5 == 5 } 或 ${ 5 eq 5 } | true |
!= 或 ne | 不等于 | ${ 5 !=5 } 或 ${ 5 ne 5 } | false |
< 或 lt | 小于 | ${ 3 < 5 } 或 ${ 3 lt 5 } | true |
> 或 gt | 大于 | ${ 2 > 10 } 或 ${ 2 gt 10 } | false |
<= 或 le | 小于等于 | ${ 5 <= 12 } 或 ${ 5 le 12 } | true |
>= 或 ge | 大于等于 | ${ 3 >= 5 } 或 ${ 3 ge 5 } | false |
3.3 逻辑运算符
逻辑运算符 | 说 明 | 范 例 | 结果 |
---|---|---|---|
&& 或 and | 与运算 | ${ 12 == 12 && 12 < 11 } 或 ${ 12 == 12 and 12 < 11 } | false |
|| 或 or | 或运算 | ${ 12 == 12 || 12 < 11 } 或 ${ 12 == 12 or 12 < 11 } | true |
! 或 not | 取反运算 | ${ !true } 或 ${not true } | false |
3.4 empty运算符 (常用)
-
empty运算是判断一个对象或者集合是否为空。返回boolean值。
- 对象为null时,返回true
- 如果是空的字符串,返回true
- 如果是空的Object数组(Object数组.length == 0),返回true
- 空的集合,返回true
- 空的map,返回true
-
empty运算符测试代码:
<%@page import="java.util.Map"%>
<%@page import="java.util.List"%>