1.为什么要使用EL
- JSP2.0之后不建议使用 JSP表达式和JSP脚本片段,建议使用EL代替JSP表达式,使用JSTL代替JSP脚本片段
2.EL简介
- 全称:Expression Language,翻译过来叫表达式语言
- 格式:${表达式}
- EL表达式主要用来将域对象中的属性输出到页面
- EL表达式默认是全域查找
- 先从page域中查找,找到后直接返回,找不到再去request域中找,找到后直接返回,找不到再继续向其他域找
- 如果在application域中也找不到就返回一个空串
- 我们如何精确查找域中的属性值呢?
- EL为我们提供了四个Scope对象,这四个对象相当于将域对象中的域单独拿了出来
- 这四个域对象分别是:pageScope、requestScope、sessionScope、applicationScope
- pageScope
- 用来获取page域中的属性值
- requestScope
- 用来获取request域中的属性值
- sessionScope
- 用来获取session域中的属性值
- applicationScope
- 用来获取application域中的属性值
- pageScope
- 如果域对象中的属性名比较特殊,通过以下方式获取属性值
<%
request.setAttribute("hello-kitty", "value2");
%>
${requestScope['hello-kitty'] }
- 获取JavaBean中的属性
- 通过对象.属性名的方式获取对象的属性,调用的是对象的getXXX方法
- 如果对象的属性还是一个对象,可以一直点下去
<h2>获取JavaBean中的属性值</h2>
<!-- 使用EL获取JavaBean对象的属性值,通过对象.属性名,调用的是对象的getXXX()方法 -->
<%
Student stu = new Student(1,"赵阿福");
School sch = new School(1,"大吕院",stu);
//将stu放到域对象中
// pageContext.setAttribute("stu", stu);
//将sch放到域对象中
pageContext.setAttribute("sch", sch);
%>
<!-- 如果对象的属性仍是一个对象,可以一直点下去 -->
${sch.student.name }
3.EL中的11个隐含对象(内置对象)
- 一个我们比较熟悉:pageContext
- pageContext
- pageContext即是EL中的隐含对象也是JSP中的隐含对象
- 类型:PageContext
- 作用:与JSP中的作用完全一样,一个顶九个,可以获取JSP中的其他隐含对象
- 获取request对象
- ${pageContext.request}
- 获取项目的虚拟路径
- ${pageContext.request.contextPath}
- pageContext
- 四个Scope对象
- pageScope
- 类型:Map<String , Object>
- 作用:获取page域中的属性值
- requestScope
- 类型:Map<String , Object>
- 作用:获取request域中的属性值
- sessionScope
- 类型:Map<String , Object>
- 作用:获取session域中的属性值
- applicationScope
- 类型:Map<String , Object>
- 作用:获取application域中的属性值
- pageScope
- 六个其他隐含对象
- param
- 类型:Map<String , String>
- 作用:获取请求参数
- paramValues
- 类型:Map<String , String[]>
- 作用:获取请求参数中一个键对应多个值的情况
- header
- 类型:Map<String , String>
- 作用:获取请求头中的信息
- headerValues
- 类型:Map<String , String[]>
- 作用:获取请求头中一个键对应多个值的情况
- cookie
- 类型:Map<String , Cookie>
- 作用:根据cookie对象的名称获取Cookie对象
- initParam
- 类型:Map<String , String>
- 作用:获取当前Web应用的初始化参数
- param
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>- El中隐含对象的演示 -->
<!-- 获取请求参数 -->
欢迎您,${param.username }<br><br>
<!-- 获取请求头的信息 -->
${header['User-Agent'] }<br><br>
<!-- 获取Cookie对象 -->
${cookie.JSESSIONID }<br><br>
<!-- 获取当前Web应用的初始化参数 -->
${initParam.encode }
4.EL中的运算
- 在EL表达式中可以直接进行加、减、乘、除等运算
- 我们常用的一个运算符:empty
- 我们主要使用empty运算符来判断一个字符串或一个集合是否为空
- empty与null的区别
- 空串时:null返回false;empty返回true
- 空集合时:null返回false;empty返回true
- empty与null的区别
<span style="white-space:pre"> </span><!-- empty运算符的应用 -->
<!-- empty与null相似的地方 -->
<%
<span style="white-space:pre"> </span>request.setAttribute("hello", null);
%>
使用null的结果:${hello == null }<br>
使用empty的结果:${empty hello }<br>
<hr>
<span style="white-space:pre"> </span><!-- empty与null的区别一-->
<%
<span style="white-space:pre"> </span>request.setAttribute("hello2", "");
%>
使用null的结果:${hello2 == null }<br>
使用empty的结果:${empty hello2 }<br>
<span style="white-space:pre"> </span><!-- empty与null的区别二-->
<%
<span style="white-space:pre"> </span>List list = new ArrayList();
<span style="white-space:pre"> </span>list.add("hello");
<span style="white-space:pre"> </span>request.setAttribute("list", list);
%>
使用null的结果:${list == null }<br>
使用empty的结果:${not empty list }<br>
<!--
<ol><li><span style="font-family: Arial, Helvetica, sans-serif;"> </span><span style="font-family: Arial, Helvetica, sans-serif;">通常使用empty运算符来判断一个字符串或一个集合是否为空</span></li></ol>-->