目录
为什么会有EL表达式?
在没有学习EL表达式之前,我们会将java代码写到JSP文件中的JSP语法中,这样会让JSP中夹杂着各种java代码,例如<% java代码 %>、<%=%>等,导致JSP文件很混乱,不好看,这样虽然可以但是给人感觉很蠢,违背了简介的原则,很乱如果有大量代码之后会很难在后期维护;
抱着简洁JSP中的java代码的初衷,所以才有了后期的EL表达式。
什么是EL表达式?
EL表达式,全称是Expression Language。意为表达式语言。它是Servlet规范中的一部分,是JSP2.0规范加入的内容。其作用是用于在JSP页面中获取数据,从而让我们的JSP脱离java代码块和JSP表达式。
EL表达式的作用?
EL表达式的作用主要有三点:
1,从域中取数据;
2,将数据转换为字符串;
如果是一个java对象,也会自动调用java对象的toString方法将其转换成字符串。3,将数据输出到浏览器页面;
和这个一样:<%= %>,将其输出到浏览器。
EL表达式的四大域对象
- pageContext
- request
- session
- application
- 四大域对象范围比较,pageContext < request < session < application
-
EL表达式中有四个隐含的隐式的范围:
-
pageScope 对应的是 pageContext范围。
-
requestScope 对应的是 request范围。
-
sessionScope 对应的是 session范围。
-
applicationScope 对应的是 application范围。
-
EL表达式从域中取对象底层是如何实现的?
EL表达式从域中取数据优先从小的域中取数据,小的域中如果没有就会去更大的域中去取数据,次序依次是:PageContext-->session-->request-->Application;
举例说明:
<!--使用JSP向域中存数据-->
<%request.setAttribute("username","zhangsan");%>
<%request.setAttribute("username","李四");%>
<!--使用EL表达式从request域中取出数据-->
${username}
页面显示:李四
为什么,没有zhangsan呢?,你可以这样理解你在向域中存数据是是存到域中的一个内置map集合中了,map集合中key是唯一的,如果加入相同的key,会覆盖上一次的values;如果想要存只能创建不同的key;
如果我们没有向域中存数据,还要取数据,结果会是什么?
<%request.setAttribute("null",null);%>
${location}
${null}
页面显示:空白
为什么会是这样呢?因为EL表达式对null值作了特殊处理;如果是null,则向浏览器输出一个空字符串。
EL表达式的语法格式?
EL表达式的语法格式很简单,如下:
${Java代码}
案例:比如我们在JSP页面,从request域中取出数据;
<!--使用JSP向域中存数据-->
<%request.setAttribute("username","zhangsan");%>
<!--使用EL表达式从request域中取出数据-->
${username}
引入一个面试题:
面试题:
${abc} 和 ${"abc"}的区别是什么?
${abc}表示从某个域中取出数据,并且被取的这个数据的name是"abc",之前一定有这样的代码: 域.setAttribute("abc", 对象);
${"abc"} 表示直接将"abc"当做普通字符串输出到浏览器。不会从某个域中取数据了。
EL表达式的运算符?
EL表达式中的运算符值得注意只有empty和not,其余都和Java的运算符使用方法一致;
运算符 | 作用 |
empty | 1、判断对象是否为null 2、判断字符串是否为空字符串 3、判断容器元素是否为0 |
条件 ?表达式1 : 表达式2 | 三元运算符 |
not | 取反 |