五、EL表达式
5.1 什么是EL表达式
-
EL表达式:是指(Expression Language)表达式语言,是一种在JSP页面获取数据的简单方式(只能获取数据,不能设置数据),在JSP2.0开始引入。
-
EL表达式的写法(用美元符号“$”定界,内容包括在花括号“{}”中):
${expression}
//JSP写法: <%=session.getAttribute("name") %> //EL表达式写法: ${sessionScope.name}
注意:
- EL表达式的代码只能写在JSP的HTML代码中,不能写到<%与%>之间;
- EL表达式提供了获取对象以及属性的简单方法,某些情况下EL表达式完全可以替代JSP脚本或者JSP的行为。
-
EL表达式的兼容性设置(有三种方法)
在默认情况下,Sevlet2.3/JSP1.2是不支持EL表达式的,而Servlet2.4/JSP2.0支持。
-
修改web.xml文件
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
-
设置某个JSP页面使用EL表达式:需要在JSP页面加上:
<%@page isELlgnored="false"%>
-
web.xml文件中加上下列代码,每个JSP页面都可以使用:
<jsp-config> <jsp-property-group> <url-pattern>*.jsp</url-pattern> <el-ignored>false</el-ignored> </jsp-property-group> </jsp-config>
5.2 EL表达式的基本语法
EL提供“.”和“[]”两种运算符来访问存取数据,主要使用EL获取对象的属性,包括JavaBean的属性值、获取数组中的元素以及获取集合对象中的元素。
对于null值直接以空字符串显示,而不是null,在运算时也不会发生错误或空指针异常,所以在使用EL访问对象的属性时不需要判断对象是否为null对象,这样就为编写程序提供了方便。
-
获取JavaBean的属性值
//在JSP中 <%=user.getAge()%> //使用EL表达式(通常情况下这两种写法是通用的) ${use.age} ${user["age"]}
其中,点运算符前面为 JavaBean 的对象 user,后面为该对象的属性 age,表示利用 user 对象的 getAge 方法取值并显示在网页上。
-
获取数组的元素
//在servlet中存储这样一个数组 String dogs[] = {"lili","huahua","guoguo"}; request.setAtribute("array",dogs); //在对应视图JSP中取出数组中的元素 ${array[0]} ${array[1]} ${array[2]}
-
获取集合对象中的元素
//在servlet中定义一个数组对象 User user1 = new User("01","zhangsan",23,"男"); User user2 = new User("02","小李",18,"女"); ArrayList<User> user = new ArrayList<>(); user.add(user1); user.add(user2); request.setAttribute("array",user); //在JPS页面中取出集合中User对象的属性 ${array[0].id} ${array[0].name} ${array[0].age} ${array[1].id} ${array[1].name} ${array[1].age}
注意:
以下两种情况必须使用“[]”:
1.包含特殊符号:
${user.first-name} 错误; ${user[“first-name”]} 正确
2. 通过动态变量取值:
${user[param]}
5.3 EL表达式的变量
EL存取变量数据的方法很简单,即从4个作用域对象中,从小到大的去获取,如果需要指定作用域获取数据,可使用以下 EL 的内置对象来指定。
JSP内置对象 | EL名称 |
---|---|
Page | PageScope |
Request | RequestScope |
Session | SessionScope |
Application | ApplicationScope |
<%
// 向页面域中添加一个字符串
pageContext.setAttribute("name", "页面域");
// 请求域
request.setAttribute("name", "请求域");
// 会话域
session.setAttribute("name", "会话域");
// 上下文域
application.setAttribute("name", "上下文域");
// 自动查找作用域获取
${name}
%>
EL表达式的查找顺序:
Page<Request<Session<Application
EL的隐式对象
5.4 EL表达式的运算符
类别 | 运算符 |
---|---|
算术运算符 | +、-、*、/或div、%或mod |
关系运算符 | ==或eq、!=或ne、<或lt、>或gt、<=或le、>=或ge |
逻辑运算符 | &&或and、 |
其他运算符 | Empty运算符、条件运算符、()运算符 |
5.5 EL表达式的自动类型转换
要获取文本框中的输入,我们需要做类型转换
//正常的java代码
String str = request.getParameter("count");
int count = Integer.parseInt(str);
count = count + 20;
//用EL表达式时,EL表达式会进行自动类型转换
${param.count + 20}