0x01 什么是EL表达式

JSP EL(Expression Language)表达式语言,是为了使JSP写起来更加简单而诞生的
它提供了在 JSP中简化表达式的方法,让Jsp的代码更加简化
EL中有许多内置对象,运算符和保留关键字
它是JSP技术版本2.0中的新增功能

0x02 EL表达式语法

  1. ${表达式}

0x03 停用EL表达式的方法

如果想要停止某个JSP页面对EL表达式进行解析,需要使用page指令将isELIgnored属性值设为true

  1. 语法: <%@ page isELIgnored ="true|false" %>
  2. 停止EL表达式解析: <%@ page isELIgnored ="true" %>
  3. 启用EL表达式解析: <%@ page isELIgnored ="false" %>
  4. 注-1: 默认开启,没有添加这个表达式的话,默认等于启用EL表达式解析
  5. 注-2: 这句话放JSP页面那里都可以

0x04 EL中的基础操作符

EL表达式支持大部分Java所提供的算术和逻辑操作符
操作符 描述
. 访问一个Bean属性或者一个映射条目
[] 访问一个数组或者链表的元素
( ) 组织一个子表达式以改变优先级
+
- 减或负
*
/div
%mod 取模
==eq 测试是否相等
!=ne 测试是否不等
<lt 测试是否小于
>gt 测试是否大于
<=le 测试是否小于等于
>=ge 测试是否大于等于
&&and 测试逻辑与
&#124;&#124;or 测试逻辑或
!not 测试取反
empty 测试是否空值

0x05 EL表达式运算符优先级

在运算符参与混合运算的过程中,优先级如下表所示(由髙至低,由左至右)
序号 优先权
1 [].
2 ( )
3 -(负)not!empty
4 */div%mod
5 +-(减)
6 <><=>=ltgtlege
7 ==!=eqne
8 &&and
9 &#124;&#124;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 小例子

  1. // 目录结构
  2. ├── src
  3. └── main
  4. └── webapp
  5. └── com
  6. └── ...
  7. └── WEB-INF
  8. └── web.xml
  9. ├── ...
  10. └── EL表达式
  11. ├── ...
  12. └── ...

0x08.1 EL表达式读取属性的示例

  1. // 文件地址: ./src/main/webapp/EL表达式/
  2. // 文件名称: test1.jsp
  3. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  4. <html>
  5. <head>
  6. <title>EL表达式测试-1</title>
  7. </head>
  8. <body>
  9. 欢迎你, ${param.name}
  10. </body>
  11. </html>
  12. // 打开: http://127.0.0.1:8081/mavenJspTest_war/EL表达式/test1.jsp?name=叼毛

image.png

0x08.2 停用EL表达式的示例

  1. // 文件地址: ./src/main/webapp/EL表达式/
  2. // 文件名称: test2.jsp
  3. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  4. <%@ page isELIgnored ="true" %>
  5. <html>
  6. <head>
  7. <title>EL表达式测试-2</title>
  8. </head>
  9. <body>
  10. 不解析EL, ${param.name}
  11. </body>
  12. </html>
  13. // 打开: http://127.0.0.1:8081/mavenJspTest_war/EL表达式/test2.jsp?name=测试

image.png

0x08.3 运算符的示例

  1. // 文件地址: ./src/main/webapp/EL表达式/
  2. // 文件名称: test3.jsp
  3. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  4. <html>
  5. <head>
  6. <title>EL表达式测试-3</title>
  7. </head>
  8. <body>
  9. (1+1)*2=${(1+1)*2}
  10. </body>
  11. </html>
  12. // 打开: http://127.0.0.1:8081/mavenJspTest_war/EL表达式/test3.jsp

image.png

0x08.4 EL表达式读取Session的示例

  1. // 文件地址: ./src/main/webapp/EL表达式/
  2. // 文件名称: test4.jsp
  3. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  4. <%
  5. HttpSession s = request.getSession();
  6. String sessionKey = "sk";
  7. String sessionValue = "test";
  8. s.setAttribute(sessionKey, sessionValue);
  9. %>
  10. <html>
  11. <head>
  12. <title>EL表达式测试-4</title>
  13. </head>
  14. <body>
  15. 你好, ${sessionScope.get("sk")}
  16. </body>
  17. </html>
  18. // 打开: http://127.0.0.1:8081/mavenJspTest_war/EL表达式/test4.jsp

image.png

0x08.5 pageContext对象使用的示例

  1. // 文件地址: ./src/main/webapp/EL表达式/
  2. // 文件名称: test5.jsp
  3. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  4. <html>
  5. <head>
  6. <title>EL表达式测试-5</title>
  7. </head>
  8. <body>
  9. <div>1.协议: ${pageContext.request.scheme}</div>
  10. <div>2.服务器ip: ${pageContext.request.serverName}</div>
  11. <div>3.服务器端口: ${pageContext.request.serverPort}</div>
  12. <div>4.获取工程路径: ${pageContext.request.contextPath}</div>
  13. <div>5.获取请求方法: ${pageContext.request.method}</div>
  14. <div>6.获取客户端ip地址: ${pageContext.request.remoteHost}</div>
  15. <div>7.获取会话的id编号: ${pageContext.session.id}</div>
  16. </body>
  17. </html>
  18. // 打开: http://127.0.0.1:8081/mavenJspTest_war/EL表达式/test5.jsp

image.png

0x08.6 获取JavaBean中内容的示例

  1. // 文件地址: ./src/main/webapp/EL表达式/
  2. // 文件名称: Person.java
  3. package EL表达式;
  4. public class Person {
  5. public String name;
  6. public int age;
  7. public Person(String name, int age) {
  8. this.name = name;
  9. this.age = age;
  10. }
  11. public String getName() {
  12. return name;
  13. }
  14. public int getAge() {
  15. return age;
  16. }
  17. }
  1. // 文件地址: ./src/main/webapp/EL表达式/
  2. // 文件名称: test6.jsp
  3. <%@ page import="EL表达式.Person" %>
  4. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  5. <%
  6. Person p = new Person("test", 18);
  7. pageContext.setAttribute("person", p);
  8. %>
  9. <html>
  10. <head>
  11. <title>EL表达式测试-6</title>
  12. </head>
  13. <body>
  14. <div>我的名称是: ${person["name"]}</div>
  15. <div>我的年龄是: ${person.age}</div>
  16. </body>
  17. </html>
  18. // 打开: http://127.0.0.1:8081/mavenJspTest_war/EL表达式/test6.jsp

image.png

0x08.7 获取其它域里内容的示例

  1. // 文件地址: ./src/main/webapp/EL表达式/
  2. // 文件名称: test7.jsp
  3. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  4. <%
  5. application.setAttribute("testName", "aa");
  6. session.setAttribute("testName", "bb");
  7. request.setAttribute("testName", "cc");
  8. pageContext.setAttribute("testName", "dd");
  9. %>
  10. <html>
  11. <head>
  12. <title>EL表达式测试-7</title>
  13. </head>
  14. <body>
  15. <div>applicationScope.testName的值: ${applicationScope.testName}</div>
  16. <div>sessionScope.testName的值: ${sessionScope.testName}</div>
  17. <div>requestScope.testName的值: ${requestScope.testName}</div>
  18. <div>pageScope.testName的值: ${pageScope.testName}</div>
  19. </body>
  20. </html>
  21. // 打开: http://127.0.0.1:8081/mavenJspTest_war/EL表达式/test7.jsp

image.png

0x09 参考

参考了这些优秀的文章,谢谢
http://www.yiidian.com/jsp/el-expression.html
https://www.runoob.com/jsp/jsp-expression-language.html