本文最后更新于:December 3, 2021 pm
EL语言的灵感来自于ECMAScript和XPath表达式语言。EL是JSP 2.0增加的技术规范,其全称是表达式语言(Expression Language)。EL 是为了使JSP写起来更加简单。主要用于获取作用域中的数据。EL表达式语言是一种简单的语言,提供了在JSP中简化表达式的方法,目的是为了尽量减少JSP页面中的Java代码,使得JSP页面的处理程序编写起来更加简洁,便于开发和维护。
目录
1.EL获取基本类型、字符串
- ${scope.name} 获取具体某个作用域中的数据。scope表示作用域。
- ${name} 获取作用域中的数据,逐级进行查找(从小到大),pageContext(当前)、request(一次请求)、session(一次会话)、application(就是ServletContext,整个项目)。先找到谁用谁。
对照示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| <%-- Created by IntelliJ IDEA. User: DragonOne Date: 2021/8/23 Time: 21:48 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>EL表达式</title> </head> <body> <% request.setAttribute("req","request"); session.setAttribute("ses","session"); application.setAttribute("app","application");
request.setAttribute("name","loong"); session.setAttribute("name","loong"); application.setAttribute("name","loong"); %>
<%-- 通过作用域对象获取数据--%> <h1><%=request.getAttribute("req")%></h1> <h1><%=session.getAttribute("ses")%></h1> <h1><%=application.getAttribute("app")%></h1>
<hr> <%-- 通过EL表达式获取数据--%> <h1>${requestScope.req}</h1> <h1>${sessionScope.ses}</h1> <h1>${applicationScope.app}</h1>
<hr> <%-- EL方法二--%>
<h1>${name}</h1> <h1>${name}</h1> <h1>${name}</h1>
</body> </html>
|
在网页上可见,前两种的输出都是一样的。而最后一种输出的都是一样的,说明都是同一个,因为都是从最小的request作用域中拿取的。
1.1 EL和JSP脚本的区别
<%=request.getAttribute() %> 如果没有找到返回 null;${requestScope.name} 没有找到返回空(””)。
2.EL获取引用类型
使用EL获取作用域中的对象调用属性时,只能访问对象的get()方法,get()方法的定义必须遵守命名规范定义。
${scope.a.name} 是通过调用getName()方法实现的。
示例:
| <body> <% Person root = new Person("loong","tothefor"); request.setAttribute("roots",root); %> ${root} <!--获取的是地址--> ${requestScope.roots.username} ${requestScope.roots.password}
</body>
|
**需要注意的是:${requestScope.root.username}和${requestScope.root.password}中的username和password不是通过直接属性名拿到的,而是通过get()方法拿到的,如果Person类中没有get()方法,则无法获取。 **
3.EL获取数组、集合
EL还可以获取Array、List、Map中的元素,Set由于没有下标,无法直接访问元素,但可遍历访问。
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| <%@ page import="com.tothefor.entity.Person" %> <%@ page import="java.lang.String" %> <%@ page import="java.util.*" %> <%-- Created by IntelliJ IDEA. User: dragonone Date: 2021/8/23 Time: 21:48 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>EL表达式</title> </head> <body> <% int[] array = new int[]{1,2,3,4,5}; request.setAttribute("arr",array);
List<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); request.setAttribute("li",list);
Map<String,String> map = new HashMap<>(); map.put("CN","中国"); map.put("US","M国"); map.put("IT","意大利"); request.setAttribute("ma",map);
%>
${arr} <br> ${arr[0]} <br>
<hr> ${li} <br> ${li[0]} <br> ${li.get(0)} <br>
<hr> ${ma} <br> ${ma["CN"]} <br> ${ma.US} <br>
</body> </html>
[I@245c4786 1 [A, B, C] A A {CN=中国, IT=意大利, US=M国} 中国 M国
|