1、EL表达式简介
(1)EL 全名为Expression Language。EL主要作用:
(2)获取数据:
EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象、获取数据。(某个web域 中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组)
(3)执行运算:
利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算。${user==null}
(4)获取web开发常用对象
EL 表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。
(5)调用Java方法
EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法。
2、EL注意事项
(1)EL表达式是JSP 2.0(JavaEE1.4)规范中的一门技术 。因此,若想正确解析EL表达式,需使用支持Servlet2.4/JSP2.0技术的WEB服务器。
(2)注意:有些Tomcat服务器如不能使用EL表达式
(1)升级成tomcat6
(2)在JSP中加入<%@ page isELIgnored="false" %>
3、EL表达式获取数据
(1)使用EL表达式获取数据语法:“${标识符}”
(2)EL表达式语句在执行时,会调用pageContext.findAttribute方法,用标识符为关键字,分别从page、request、session、application四个域中查找相应的对象,找到则返回相应对象,找不到则返回”” (注意,不是null,而是空字符串)。
(3)示例:${user}
(4)EL表达式也可以很轻松获取JavaBean的属性,或获取数组、Collection、Map类型集合的数据,例如:
${user.address.city}
${user.list[0]}:访问有序集合某个位置的元素
${map.key} : 获得map集合中指定key的值
(5) 和 [ ] 区别
(6)结合JSTL的foreach标签,使用EL表达式也可以很轻松迭代各种类型的数组或集合,示例:
迭代数组
迭代collection类型集合
迭代map类型集合
(7)${propName}在四个域中搜寻proName属性,输出该值到输出流中
${pageScope/requestScope/sessionScope/applicationScope.proName}获取指定域中的属性
${attr[0]}获取域中的集合的指定元素
${list[0]}获取list中的指定位置元素
${map.keyName}获取map中指定键的值
${bean.propName}获取javaBean的属性,可以认为是调用了javaBean的getXXX方法,
~最重要的一个应用场景:在写路径的时候最好不要把web应用名称写死,java中应该用request.getContextPath去获取。jsp中就用el获取:${pageContext.request.contextPth}
~.和[]区别使用点的地方都可以用中括号,如果属性名是数字或包含特殊符号(.-)就必须使用中括号。例子:${map["first.name"]}
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@page import="com.itheima.Person"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<hr><h1>获取常量值进行输出</h1>
${123.123 }
${'xxxx' }
${false }
<hr><h1>获取变量值进行输出,注意只能获取域中的值</h1>
<%
pageContext.setAttribute("name","小昭");
int age = 16;
pageContext.setAttribute("age",age);
%>
${name }
${age}
<hr><h1>获取数组中的数据</h1>
<%
int [] nums = {111,222,333};
pageContext.setAttribute("nums",nums);
%>
${nums[1] }
<hr><h1>获取集合中的数据</h1>
<%
List list = new ArrayList();
list.add("芷若妹子");
list.add("金毛狮王谢逊");
list.add("韦一笑");
pageContext.setAttribute("list",list);
%>
${list[0] }
<hr><h1>获取Map中的数据</h1>
在el表达式中使用点号和中括号不一样的地方:
在el中使用中括号的地方都可以使用点号去替代,但是如果中括号中的内容为数字或包含了特殊字符(.-)就必须用中括号不能用点号。
<%
Map map = new HashMap();
map.put("name","奥巴马");
map.put("nick.name","aobama");
map.put("age",55);
map.put("易做图","女");
pageContext.setAttribute("map",map);
pageContext.setAttribute("age","name");
%>
${map[age] }
${map["age"] }
${map.age }
${map["nick.name"] }
<hr><h1>获取JavaBean的属性</h1>
<%
Person p = new Person();
p.setName("克林顿");
p.setAge(66);
pageContext.setAttribute("p",p);
%>
${p.name }
${p.age }
${pageContext.request.contextPath }
<a href=" ${pageContext.request.contextPath }/index.jsp">xxx</a>
</body>
</html>
4、EL表达式执行运算
补充:Web开发 , Jsp ,