EL表达式
EL表达式核心点是将对象存储到某个域中,在需要的页面中直接使用表达式来使用,从来减少获取及强制类型转换的操作。
JSP EL既可以用来创建算术表达式也可以用来创建逻辑表达式。
在JSP EL表达式内可以使用整型数,浮点数,字符串,常量true、false,还有null。
1.EL最基本的读取方法
<body>
<%--传统的存储和读取--%>
<%
//存储
session.setAttribute("name", "迪迦");
//获取
Object object = session.getAttribute("name");
%>
<%=object%>
<%--el表达式传统的存储和读取--%>
name:${name};
<hr>
<%
//存储对象
Staff staff = new Staff();
staff.setSname("宇宙英雄");
staff.setSex(1);
session.setAttribute("staff", staff);
%>
<%-- 对象读取--%>
sname:${staff.sname};
sex:${staff.sex};
</body>
效果展示
注意:el表达式存储对象后,可以直接通过对象.属性获取值(实际是通过类中的setter和getter方法获取的)
2.EL中的运算符
运算符 | 关键词 | 描述 |
---|---|---|
== | eq | 判断是否相等 |
> | gt | 判断是否大于 |
< | lt | 判断是否小于 |
empty | 判断是否为空 | |
! | not | 非 |
&& | and | 逻辑与 |
|| | or | 逻辑或 |
<hr>
<%-- 逻辑符举例--%>
${empty staff}
<hr>
<%
Staff staff2=null;
%>
${empty staff2}
效果展示
两大注意点:
-
要确保数据被存储到了域中储存到域
-
多个作用域有相同的key时, 按照作用域的大小,从小到大查找
3.EL隐含对象
EL支持多种隐含对象
其中针对于刚才提到的作用域问题为例
<body>
<%
request.setAttribute("name","迪迦");
session.setAttribute("name","戴拿");
application.setAttribute("name","艾斯");
pageContext.setAttribute("name","杰克");
%>
${name}
</body>
结果
如果我们将 pageContext.setAttribute(“name”,“杰克”);注释掉
结果显而易见:多个作用域有相同的key时, 按照作用域的大小,从小到大查找
这个时候,我们可以使用JSP EL隐含对象
隐含对象 | 描述 |
---|---|
pageScope | page 作用域 |
requestScope | request 作用域 |
sessionScope | session 作用域 |
applicationScope | application 作用域 |
PageScope,requestScope,sessionScope,applicationScope变量用来访问存储在各个作用域层次的变量。
举例来说,如果您需要显式访问在applicationScope层的name变量,可以这样来访问:applicationScope.name。得到的就是“艾斯”了
还有一个常用的隐含对象pageContext
我们可以使用${pageContext.request.contextPath}来获取跳转地址
通过${pageContext.request.queryString}来访问request对象传入的查询字符串