EL表达式

EL表达式语言是在JSP2.0版本中引入的新特性,它用于JSP文件中的数据访问。这种表达式语言能简化JSP文件中的数据访问的代码,可用来替代传统的基于<%=%>形式的Java表达式,以及部分基于<%%>形式的Java程序片段。

JSP2.0中,EL是作为JSTL标签库的一部分而存在。但是从JSP2.1开始,把EL变成了独立于JSTL标签库的表达式语言。

例如以下代码包含了传统的Java程序片段和Java表达式,它们用于显示会话范围内的属性名为cart的ShoppingCart对象中的所有书的金额:

<%
ShoppingCart cart=(ShoppingCart)session.getAttribute("cart");
if(cart!=null){
%>
<%=cart.getTotal()%>
<%}%>
上述代码和以下EL表达式的作用是等价的:

${sessionScope.cart.total}
比较上述两段代码,可以看出,EL表达式能大大简化JSP代码,并能提高JSP代码的可读性。

基本语法

从JSP2.0版本开始引进的EL表达式语言是一种简洁的数据访问语言。通过它可以在JSP文件中方便地访问应用程序数据,从而替代传统的基于<%=%>形式的Java表达式以及部分基于<%%>形式的Java程序片段。

EL表达式的基本形式为:${var},所有的表达式都以“${”开头,以"}"结尾。如果在JSP文件的模版文本中使用EL表达式,那么表达式的值会输出到网页上。

例如以下Java表达式和EL表达式的作用相同,都用于输出请求参数username:

Java表达式:<%=request.getParameter("username")%>
EL表达式:${param.username}
EL表达式语言可以使用点号运算符“.”来访问对象的属性,例如表达式${customer.name}表示customer对象的name属性。

EL表达式也可以使用方括号运算符“[ ]”来访问对象的属性,例如表达式${customer["name"]}和${customer.name}是等价的。

方括号运算符还可以用来访问数组中的元素,例如${customers[0]}表示访问customers数组中的第一个元素。

EL运算符:

EL语言支持算术运算符、关系运算符和逻辑运算符等,以完成常见的数据处理操作。

EL语言提供了一个用于测试对象是否为空的特殊运算符“empty”,其语法形式为${empty var},它能判断var命名变量是否为空。在以下情况下empty运算符返回true:

1. var变量不存在,即没有被定义。例如对于表达式${empty some},如果不存在some变量,就返回true。
2. var变量的值为null。例如对于表达式${customer.name},如果customer.name的值为null,就返回true。
3. var变量引用集合(Set、List和Map)类型的对象,并且在集合对象中不包含任何元素。
empty运算符可以与“!”运算符一起使用,比如对于表达式${! empty customer.name},如果customer.name不为空,就返回true。

隐含对象

EL语言定义了11个隐含对象,它们都是java.util.Map类型,网页制作者可通过它们来便捷地访问web应用中的特定数据。

EL表达式语言中的 隐含对象
隐含对象的固定变量名类型说明
pageScopejava.util.Map把页面范围内的属性名和属性值进行映射
requestScopejava.util.Map把请求范围内的属性名和属性值进行映射
sessionScopejava.util.Map把会话范围内的属性名和属性值进行映射
applicationScopejava.util.Map把web应用范围内的属性名和属性值进行映射
headerjava.util.Map把HTTP请求头部的项目名称和项目值进行映射,例如${header.host}等价于
<%=request.getHeader("host")%>
headerValuesjava.util.Map把HTTP请求头部的项目名和所有匹配的项目值的数组进行映射,例如
${headerValues["accept-language"]}
等价于<%=request.getHeaders("accept-language")%>
paramjava.util.Map把客户请求中的请求参数名和参数值进行映射
paramValuesjava.util.Map把客户请求中的请求参数名和所有匹配的参数值数组进行映射,例如${paramValues.username}
等价于<%=request.getParameterValues("username")%>
cookiejava.util.Map把客户请求中的Cookie名和Cookie对象进行映射
pageContextjava.util.Map表示javax.servlet.jsp.PageContext对象
initParamjava.util.Map把web应用的初始化参数名和参数值进行映射
这11个隐含对象可分为以下4种类型:

1. 表示特定范围,包括pageScope,requestScope,sessionScope,applicationScope.
2. 表示HTTP请求中的特定数据,包括header,headerValues,param,paramValues和cookie
3. 表示PageContext对象,为pageContext
4. 表示web应用的初始化参数集合,为initParam

命名变量

EL表达式中的变量称为命名变量,它不是JSP文件中的局部变量或实例变量,而是存放在特定范围内的属性,命名变量的名字和属性名字对应。例如${username}等价于以下代码:

<%
String username=(String)pageContext.findAttribute("username");
if(username!=null){
%>
<%=username%>
<%}%>
再例如${cart.total}等价于以下代码:

<%
ShoppingCart cart=(ShoppingCart)pageContext.findAttribute("cart");
if(cart!=null){
%>
<%=cart.getTotal()%>
<%}%>
以下代码先定义了一个username局部变量,再试图通过${username}来访问这个变量:

<%
String username="Tom";
%>
${username}
以上代码不会打印username局部变量。因为${username}代表特定范围内的username属性,不是局部变量。如果在所有范围内都不存在username属性,那么${username}没有任何打印结果。

以下代码先定义了一个会话范围内的username属性,再试图通过${username}来访问这个属性:

<%
pagecontext.setAttribute("username","Tom",PageContext.SESSION_SCOPE);
%>
${username}








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值