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.javapackage 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
