EL表达式
一. EL表达式简介
1. JSP的核心语法
JSP表达式 <%=%>和JSP脚本<% %>。
2. 开发JSP的原则
尽量在JSP页面中少写甚至不写Java代码,使用EL表达式替换掉JSP表达式。
3. EL表达式的作用
EL全名为Expression Language,它主要向浏览器输出域对象中的变量值或表达式计算的结果!因为EL表达式强
制要求使用域对象保存变量或者表达式计算的结果,所以它只能输出域对象中的变量或者结果。
(1) 获取数据:
EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象、获取数据。(某个web
域 中的对象,访问Javabean的属性、访问list集合、访问map集合、访问数组)
(2) 执行运算:
利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的
逻辑运算。比如:${user==null}。
(3) 获取web开发常用对象:
EL表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而
获得这些对象中的数据。
(4) 调用Java方法:
EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法。
4. EL表达式语法
${变量或表达式}
二. EL表达式语法
1. 获取数据
(1) 获取基本数据类型变量
EL表达式语句在执行时,会调用pageContext.findAttribute方法,用标识符为关键字,分别从page、
request、session、application四个域中查找相应的对象,找到则返回相应对象,找不到则返回”” (注意,
不是null,而是空字符串)。
① 从四个域获取:${name}。
② 从指定域获取:${pageScope.name}
域范围:pageScoep / requestScope / sessionScope / applicationScope
③ 实例
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>EL语法</title>
</head>
<body>
<%
String name = "rose";
//只有把变量放入域中
//pageContext.setAttribute("name",name);
pageContext.setAttribute("name",name,PageContext.REQUEST_SCOPE);
%>
<%=name %>
<br />
<%-- (1)从四个域中自动搜索 --%>
EL表达式: ${name }
<%-- ${name } 等价于<%=pageContext.findAttribute("name")%> --%>
<%-- (2)从指定的域中获取数据 --%>
EL表达式: ${requestScope.name }
<%-- ${pageScope.name } 等价于<%= pageContext.getAttribute("name",PageContext.PAGE_SCOPE)%> --%>
</body>
</html>
运行结果:
(2) 获取对象的属性值
① 实例
package zw_entity;
public class Student {
private String name1;
private int age;
public String getName() {
return name1;
}
public void setName(String name) {
this.name1 = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Student(String name, int age) {
super();
this.name1 = name;
this.age = age;
}
public Student() {
super();
}
}
<%@ page language="java" import="java.util.*,zw_entity.*"
pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>EL输出不同类型的数据</title>
</head>
<body>
<%--(1)EL输出对象的属性 --%>
<%
//保存数据
Student student = new Student("eric",20);
//放入域中
pageContext.setAttribute("student",student);
%>
<%--使用EL获取对象 --%>
${student.name} - ${student.age }
<%--
${student.name}等价于(点相当于调用getXX()方法)<%=((Student)pageContext.findAttribute("student")).getName()%>
--%>
</body>
</html>
② 运行结果:
③ 注意:Student这里的属性是私有的,为什么能访问?因为student.name中的”.”调用的是方法,getName方法。
(3) 获取集合对象List和Map
① 实例:
<%@ page language="java" import="java.util.*,zw_entity.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>EL输出不同类型的数据</title>
</head>
<body>
<%
//集合List
List<Student> list = new ArrayList<Student>();
list.add(new Student("rose",18));
list.add(new Student("jack",28));
list.add(new Student("lucy",38));
//放入域中
pageContext.setAttribute("list",list);
//Map
Map<String,Student> map = new HashMap<String,Student>();
map.put("100",new Student("mark",20));
map.put("101",new Student("maxwell",30));
map.put("102",new Student("narci",40));
//放入域中
pageContext.setAttribute("map",map);
%>
<%--使用EL获取List对象 --%>
${list[0].name } - ${list[0].age }<br/>
${list[1].name } - ${list[1].age }<br/>
${list[2].name } - ${list[2].age }
<%--
list[0]等价于 (中括号相当于调用get(参数)方法)
((List)pageContext.findAttribute("list")).get(0)
--%>
<hr/>
<%--使用EL获取Map对象 ,通过key来获取value--%>
${map['100'].name } - ${map['100'].age }<br/>
${map['101'].name } - ${map['101'].age }<br/>
${map['102'].name } - ${map['102'].age }<br/>
</body>
</html>
② 运行结果:
③ 注意:
EL表达式没有遍历功能,只能一个一个的获取,只有结合标签才可以遍历。
2. 执行运算
(1) 语法:
${运算表达式}
(2) EL表达式支持如下运算符:
(3) empty运算符:检查对象是否为null或“空”。
(4) 实例:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>EL表达式计算</title>
</head>
<body>
<%--(1)算术表达式+ - * /--%>
${10+5 }<br/>
${10*5 }
<hr/>
<%--(2)比较运算 > < >= <= == != --%>
${10>5 }<br/>
${10<5 }<br/>
${10!=10 }
<hr/>
<%--(3)逻辑运算 && || ! --%>
${true && false }<br/>
${true || false }<br/>
${!false }<br/>
<hr/>
<%--(4)判空 null或 空字符串: empty --%>
<%
//String name = "eric";
//String name = null;
String name = "";
pageContext.setAttribute("name",name);
%>
判断null: ${name==null }<br/>
判断空字符串: ${name=="" }<br/>
判空: ${name==null || name=="" }
另一种判空写法(等价于上面的判空): ${empty name }
</body>
</html>
运行结果如下图所示:
3. 获得web开发常用对象
(1) EL表达式语言中定义了11个隐含对象,使用这些隐含对象可以很方便地获取web开发中的一些常见对象,并读取这些对象的数据。
(2) 语法:${隐式对象名称}可以获得对象的引用。
(3) 11个隐含对象
三. EL表达式的注意事项
1. EL表达式是JSP 2.0规范中的一门技术 。因此,若想正确解析EL表达式,需使用支持Servlet2.4/JSP2.0技术的
WEB服务器。
2. 注意:有些Tomcat服务器如不能使用EL表达式。
(1) 升级成tomcat6。
(2) 在JSP中加入<%@ page isELIgnored="false" %>3. EL表达式保留关键字
(1) 所谓保留字的意思是指变量在命名时,应该避开上述的名字,以免程序编译时发生错误。
(2) 保留关键字
上一篇: EL表达式