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
 
 
 
                         
                                

