0x01 什么是EL表达式
JSP EL(Expression Language)表达式语言,是为了使JSP写起来更加简单而诞生的
它提供了在 JSP中简化表达式的方法,让Jsp的代码更加简化
EL中有许多内置对象,运算符和保留关键字
它是JSP技术版本2.0中的新增功能
0x02 EL表达式语法
${表达式}
0x03 停用EL表达式的方法
如果想要停止某个JSP页面对EL表达式进行解析,需要使用page
指令将isELIgnored
属性值设为true
语法: <%@ page isELIgnored ="true|false" %>
停止EL表达式解析: <%@ page isELIgnored ="true" %>
启用EL表达式解析: <%@ page isELIgnored ="false" %>
注-1: 默认开启,没有添加这个表达式的话,默认等于启用EL表达式解析
注-2: 这句话放JSP页面那里都可以
0x04 EL中的基础操作符
EL表达式支持大部分Java所提供的算术和逻辑操作符 |
|
操作符 |
描述 |
. |
访问一个Bean属性或者一个映射条目 |
[] |
访问一个数组或者链表的元素 |
( ) |
组织一个子表达式以改变优先级 |
+ |
加 |
- |
减或负 |
* |
乘 |
/ 、div |
除 |
% 、mod |
取模 |
== 、 eq |
测试是否相等 |
!= 、ne |
测试是否不等 |
< 、 lt |
测试是否小于 |
> 、 gt |
测试是否大于 |
<= 、 le |
测试是否小于等于 |
>= 、 ge |
测试是否大于等于 |
&& 、 and |
测试逻辑与 |
|| 、or |
测试逻辑或 |
! 、not |
测试取反 |
empty |
测试是否空值 |
0x05 EL表达式运算符优先级
在运算符参与混合运算的过程中,优先级如下表所示(由髙至低,由左至右) |
|
序号 |
优先权 |
1 |
[] 、. |
2 |
( ) |
3 |
-(负) 、not 、! 、empty |
4 |
* 、/ 、div 、% 、mod |
5 |
+ 、-(减) |
6 |
< 、> 、<= 、>= 、lt 、gt 、le 、ge |
7 |
== 、!= 、eq 、ne |
8 |
&& 、and |
9 |
|| 、or |
10 |
${A?B:C} |
0x06 EL表达式的内置对象
JSP EL支持下表列出的内置对象 |
|
内置对象 |
说明 |
pageScope |
从page范围中获取值 |
requestScope |
从request范围中获取值 |
sessionScope |
从session范围中获取值 |
applicationScope |
从application范围中获取值 |
param |
用于获取请求的参数(单个值的情况) |
paramValues |
用于获取请求的参数(多个值的情况),返回集合 |
header |
用于获取请求头(单个值的情况) |
headerValues |
用于获取请求头(多个值的情况),返回集合 |
cookie |
用于获取请求中的cookie数据 |
initParam |
用于获取web的初始化参数 |
pageContext |
可以从page,request,session,application域获取数据 |
0x07 EL表达式的保留关键字
EL表达式语言中有很多保留关键词字(不能使用它们来命名) |
|
|
|
lt |
le |
gt |
ge |
eq |
ne |
true |
false |
and |
or |
not |
instanceof |
div |
mod |
empty |
null |
0x08 小例子
// 目录结构
├── src
│ └── main
│ └── webapp
│ └── com
│ │ └── ...
│ └── WEB-INF
│ │ └── web.xml
│ ├── ...
│ └── EL表达式
│ │ ├── ...
│ │ │ └── ...
0x08.1 EL表达式读取属性的示例
// 文件地址: ./src/main/webapp/EL表达式/
// 文件名称: test1.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL表达式测试-1</title>
</head>
<body>
欢迎你, ${param.name}
</body>
</html>
// 打开: http://127.0.0.1:8081/mavenJspTest_war/EL表达式/test1.jsp?name=叼毛
0x08.2 停用EL表达式的示例
// 文件地址: ./src/main/webapp/EL表达式/
// 文件名称: test2.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored ="true" %>
<html>
<head>
<title>EL表达式测试-2</title>
</head>
<body>
不解析EL, ${param.name}
</body>
</html>
// 打开: http://127.0.0.1:8081/mavenJspTest_war/EL表达式/test2.jsp?name=测试
0x08.3 运算符的示例
// 文件地址: ./src/main/webapp/EL表达式/
// 文件名称: test3.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL表达式测试-3</title>
</head>
<body>
(1+1)*2=${(1+1)*2}
</body>
</html>
// 打开: http://127.0.0.1:8081/mavenJspTest_war/EL表达式/test3.jsp
0x08.4 EL表达式读取Session的示例
// 文件地址: ./src/main/webapp/EL表达式/
// 文件名称: test4.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
HttpSession s = request.getSession();
String sessionKey = "sk";
String sessionValue = "test";
s.setAttribute(sessionKey, sessionValue);
%>
<html>
<head>
<title>EL表达式测试-4</title>
</head>
<body>
你好, ${sessionScope.get("sk")}
</body>
</html>
// 打开: http://127.0.0.1:8081/mavenJspTest_war/EL表达式/test4.jsp
0x08.5 pageContext对象使用的示例
// 文件地址: ./src/main/webapp/EL表达式/
// 文件名称: test5.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL表达式测试-5</title>
</head>
<body>
<div>1.协议: ${pageContext.request.scheme}</div>
<div>2.服务器ip: ${pageContext.request.serverName}</div>
<div>3.服务器端口: ${pageContext.request.serverPort}</div>
<div>4.获取工程路径: ${pageContext.request.contextPath}</div>
<div>5.获取请求方法: ${pageContext.request.method}</div>
<div>6.获取客户端ip地址: ${pageContext.request.remoteHost}</div>
<div>7.获取会话的id编号: ${pageContext.session.id}</div>
</body>
</html>
// 打开: http://127.0.0.1:8081/mavenJspTest_war/EL表达式/test5.jsp
0x08.6 获取JavaBean中内容的示例
// 文件地址: ./src/main/webapp/EL表达式/
// 文件名称: Person.java
package EL表达式;
public class Person {
public String name;
public int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
// 文件地址: ./src/main/webapp/EL表达式/
// 文件名称: test6.jsp
<%@ page import="EL表达式.Person" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
Person p = new Person("test", 18);
pageContext.setAttribute("person", p);
%>
<html>
<head>
<title>EL表达式测试-6</title>
</head>
<body>
<div>我的名称是: ${person["name"]}</div>
<div>我的年龄是: ${person.age}</div>
</body>
</html>
// 打开: http://127.0.0.1:8081/mavenJspTest_war/EL表达式/test6.jsp
0x08.7 获取其它域里内容的示例
// 文件地址: ./src/main/webapp/EL表达式/
// 文件名称: test7.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
application.setAttribute("testName", "aa");
session.setAttribute("testName", "bb");
request.setAttribute("testName", "cc");
pageContext.setAttribute("testName", "dd");
%>
<html>
<head>
<title>EL表达式测试-7</title>
</head>
<body>
<div>applicationScope.testName的值: ${applicationScope.testName}</div>
<div>sessionScope.testName的值: ${sessionScope.testName}</div>
<div>requestScope.testName的值: ${requestScope.testName}</div>
<div>pageScope.testName的值: ${pageScope.testName}</div>
</body>
</html>
// 打开: http://127.0.0.1:8081/mavenJspTest_war/EL表达式/test7.jsp
0x09 参考
参考了这些优秀的文章,谢谢
http://www.yiidian.com/jsp/el-expression.html
https://www.runoob.com/jsp/jsp-expression-language.html