为什么要使用EL
JSP2.0之后不建议使用 JSP表达式和JSP脚本片段,建议使用EL代替JSP表达式,使用JSTL代替JSP脚本片段
EL简介
全称:Expression Language,翻译过来叫表达式语言 格式:${表达式} EL表达式主要用来将域对象中的属性输出到页面
EL表达式默认是全域查找 先从page域中查找,找到后直接返回,找不到再去request域中找,找到后直接返回,找不到再继续向其他域找
如果在application域中也找不到就返回一个空串 我们如何精确查找域中的属性值呢?
EL为我们提供了四个Scope对象,这四个对象相当于将域对象中的域单独拿了出来
这四个域对象分别是:pageScope、requestScope、sessionScope、applicationScope
1.pageScope 用来获取page域中的属性值
2.requestScope 用来获取request域中的属性值 sessionScope
3.用来获取session域中的属性值
4.applicationScope 用来获取application域中的属性值如果域对象中的属性名比较特殊,通过以下方式获取属性值
<%
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 }
EL中的11个隐含对象(内置对象)
一个我们比较熟悉:pageContext
pageContext
pageContext即是EL中的隐含对象也是JSP中的隐含对象
类型:PageContext
作用:与JSP中的作用完全一样,一个顶九个,可以获取JSP中的其他隐含对象
获取request对象
pageContext.request获取项目的虚拟路径 p a g e C o n t e x t . r e q u e s t 获 取 项 目 的 虚 拟 路 径 {pageContext.request.contextPath}
四个Scope对象
pageScope
类型:Map<String , Object>
作用:获取page域中的属性值
requestScope
类型:Map<String , Object>
作用:获取request域中的属性值
sessionScope
类型:Map<String , Object>
作用:获取session域中的属性值
applicationScope
类型:Map<String , Object>
作用:获取application域中的属性值
六个其他隐含对象
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应用的初始化参数
<span style="white-space:pre"> </span>- El中隐含对象的演示 -->
<!-- 获取请求参数 -->
欢迎您,${param.username }<br><br>
<!-- 获取请求头的信息 -->
${header['User-Agent'] }<br><br>
<!-- 获取Cookie对象 -->
${cookie.JSESSIONID }<br><br>
<!-- 获取当前Web应用的初始化参数 -->
${initParam.encode }
EL中的运算
在EL表达式中可以直接进行加、减、乘、除等运算
我们常用的一个运算符:empty
我们主要使用empty运算符来判断一个字符串或一个集合是否为空
empty与null的区别
空串时:null返回false;empty返回true
空集合时:null返回false;empty返回true
<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>-->