EL表达式

本文深入讲解了EL表达式在JSP中的应用,包括其语法、作用域解析规则、运算符使用,以及如何禁用EL表达式。通过实例展示了EL表达式如何简化变量获取和运算操作。

在jsp中,经常要使用到jsp表达式<%=变量或者表达式%>来输出声明的变量已经页面传递的参数,可是当变量很多时,大量书写这样的表达式就会显得很累赘。而EL表达式就很好的解决了这个问题,它可以将表达式简化。

EL表达式的语法:${参数名或表达式}

例如,我们需要获取Servlet返回过来的session的值,EL表达式的写法:

<p> EL表达式获取到的name的值为:${name}</p>

它的等同于jsp表达式:

<p> jsp表达式获取到的name的值为:<%=session.getAttribute%></p>

实现的效果是相同的:
在这里插入图片描述
那么问题来了,jsp表达式在获取值的时候指定了从哪取值(例如session),那EL表达式呢?如果我们在当前jsp页面中声明一个名称同为name的参数, EL表达式获取的是当前页中的name,还是依旧获取session中的name呢?

<c:set var="name" value="root" scope="page"></c:set>

这个时候就要了解一下jsp的作用域了。

在Web中共有4个作用域,它们分别是page(当前页)、request(该请求)、session(session中)和application(全局范围内)。
而EL标签可以对这4个作用域的参数进行访问。当使用EL表达式去获取一个参数时,
EL表达式会依次从page、request、session和application中查找,若没有参数,则返回nul。

例如刚才那个问题,当session和page中都声明了名为name的参数,那么EL表达式会先从page中查找name,在page中找到name之后取得它的值,就不再继续查找了。所以EL表达式获取到的,是当前page中的name。
在这里插入图片描述

除了可以获取参数的值之外,EL表达式还支持使用一些简单的运算符进行运算操作。
EL表达式的运算符大致可分为:算术运算符、逻辑运算符、关系运算符、其他运算符等。
  • 算术运算符: +、-、*、/、mod
  • 逻辑运算符: &&(and)、||(or)、!(not);
  • 关系运算符:(eq)、!=(ne)、<(lt)、>(gt)、<=(le)、>=(ge);
  • 其他运算符: Empty运算符、条件运算符、“()”运算符、“[]”运算符;

这些运算符的使用方式也很简单,在EL表达式中和在其他地方使用是大相径庭的。


<c:set var="child1" value="17" scope="page"></c:set>
<c:set var="child2" value="15" scope="page"></c:set>
 
<c:choose>
  <c:when test="${child1>16 }">
 		<c:out value="child1 ${child1 }岁了,已经长大了"></c:out>
 	</c:when>
 	<c:otherwise>
 		<c:out value="child1 ${child1 }岁,还是小孩子"></c:out>
 	</c:otherwise>
</c:choose>
 
<p>child2 今年${child2 }岁,明年就${child2+1}岁了</p>

虽然EL表达式给编码带来了便利,但是有些特殊的情况下,不能使用EL表达式的时候,就需要禁用EL表达式。
禁用当前页的EL表达式,在页面中加入这一句代码,将isELIgnore属性值改为“true”:

<%@page isELIgnored="true" %>

禁用个别EL表达式:通常情况下在一个应用中要么全部允许EL标签,要么都不允许,因此很少出现页面部分使用,另一部分又不使用的情况。若要实现此功能,只需在要禁用的表达式的“$”符号前加上一个反斜杠,也就是我们常用的“转义字符”。如“\${child2 }”
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值