总结以上:
1:语法:${标识符}
2:原理:调用pageContext.findAttribute("标识符")函数,解析代码:
out.write((java.lang.String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${标识符}", java.lang.String.class, (javax.servlet.jsp.PageContext)_jspx_page_context, null, false));
3:返回值:依次从pageContext--->request--->session--->servletContext(从小到大)的容器中去相应 标识符名 的属性值,获取则返回,没有返回“”空串
4:el表达式是调用findAttribute查找容器,并不能获得同一jsp页面未加入容器的变量(加入容器setAttribute())
5:查找变量值,是根据setAttribute(name,value)中的name名获取,与变量本身的名字无关(相当于键值对的key值)
6:对于基本变量,根据属性名获取;对于map集合,通过属性名.key值获取;对于数组,list集合,通过属性名[i] 下标获取,示例:
<!-- 用EL表达式读取JavaBean中的信息,注意“表达式”是“属性名” -->
<%
User user = new User();
user.setName("张三");
user.setAge(25);
//一定要把数据放到容器中
pageContext.setAttribute("u", user);
%>
${u}<br/>
${u.name},${u.age}
<hr/><br/><br/>
<!-- 用EL表达式读取Map中的信息 -->
<%
Map<String,Object> map = new HashMap<String,Object>();
map.put("name", "Rose");
map.put("sex", "Female");
map.put("age", 25);
map.put("tel", "13812345678");
map.put("friend",user);
//一定要把数据放到容器中
request.setAttribute("m", map);
%>
${m.name},${m.sex},${m.age}<br/>
${m.friend.name}<br/>
<hr/><br/><br/>
<!-- 用EL表达式读取List中的信息 -->
<%
List list = new ArrayList();
list.add("aaa");
list.add(user);
list.add(map);
session.setAttribute("list", list);
%>
${list[0]},${list[1].name}<br/>
${list[2].friend.name}<br/>
el的运算规则:
代码示例:
<!-- 演示EL表达式中的运算 -->
//1 可以使用算术运算符: + - * / % 等 <br/>
${u.age+10}
//2 可以使用比较运算符: == != <= > >= 等 <br/>
${u.name=="张三"}
//3 逻辑运算符: && || !(非) 等 <br/>
${u.name=="张三" && u.age>20 }
//4 条件运算符: 即“?”号表达式 <br/>
${u.name!="张三" ? 100: 50 }
//5 empty运算符: 如果表达式的值为null 或者 不存在该变量 或者 是一个List或Map但其中不包含元素 ---这些返回的都是true <br/>
${empty dk } ---true
${empty map } ---true
${empty m } ---false
${!empty m } ---true
note: 数据不符会出异常
1:算术运算当 ${标识符}中的标识符是可Number型数据才可运算(即:int Integer long 或者 只有数字的String型)
2:Number数据不支持逻辑运算符
3:等等(使用运算符要注意数据真正的类型,是否可以运算)
el中的隐藏对象:
pageContext是js中pageContext对象,只能调用其中的方法函数(以属性方式,不要括号,函数要存在)
....Scope四个域是相应Map对象,调用的是getKey()函数(以属性方式,key值可不存在),并且只从该容器中取值,没有不向其他容器查看,返回空串
代码示例:
<!-- 从指定的容器中读取数据 -->
${pageScope.u},
${requestScope.u},
${requestScope.m},
${sessionScope.list[0]}
代码示例:
${header}<br/>
${header.host}<br/>
${header.cookie}<br/>
${cookie.JSESSIONID.value}<br/>
<br/>
${param}<br/> //演示访问地址获取自带的参数:http://localhost:8080/elWeb/?name=Jack&age=21
${param.age }<br/>
${paramValues}<br/>
${paramValues.name[0]}<br/>