JSP表达式语言

本文详细介绍了JSP表达式语言(EL)中的点运算符、索引运算符如何用于访问map,特别强调了键名中特殊字符的影响。同时,概述了EL隐式对象的作用及使用场景,包括pageContext、param、paramValues等。文章还解释了EL表达式中变量声明和作用域的概念,以及如何避免嵌套表达式的错误。最后,提供了EL表达式使用注意事项和与JSTL的集成方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JSP表达式语言(2)

点运算符和索引运算符都可以用来访问map。比如,下列两个EL表达式都会返回名为myKey的键对应的值:

但是两者还是有着一小点区别:如果键名中包含能混淆EL的字符,你就不能使用点运算符。例如使用${header["user-agent"]}没有问题,但${header.user-agent}就出错了,因为第二个表达式中user和agent之间的破折号被解析为减号。除非有一个变量名为agent,而且header.user和agent都为null,依照EL规范文档,${null - null}结果为零。而第一个表达式有可能返回零。如果map键名中含有点号,你可能会遇到不同但更严重的问题。例如,你可以正常地使用${param["my.par"]},而${param.my.par}可能会得到null。这将是严重的问题,因为null是一个可能出现的有效结果。我们建议你在所有的场合都使用方括号的形式,并忘掉这些问题。

和JSP类似,EL也包含隐式对象,如表2-7所示。

表2-7 EL的隐式对象

对象

描述

pageContext

JSP页面上下文。特别是,pageContext.

servletContext得到的引用和JSP中隐

式变量application引用指向同一个对象。

同理,pageContext. session等

价于JSP中的session,pageContext.

request等价于JSP中的request,

pageContext.response等价于

JSP中的response

param

把请求参数名称映射到它的第一个值上

paramValues

把请求参数名称映射到包含它的值的数组上

header

把请求头名称映射到它的第一个值上

headerValues

把请求头名称映射到包含它的值的数组上

cookie

把cookie名称映射到唯一的cookie上

initParam

把上下文初始化参数映射到它的值上

pageScope

把page-scoped变量名称映射到它们的值上

requestScope

把requset-scoped变量名称映射到它们的值上

sessionScope

把seesion-scoped变量名称映射到它们的值上

applicationScope

把application-scoped变量名称映射到它们的值上

注意JSP脚本变量在EL表达式中无效。

你可能已经注意到EL并没有包含任何声明变量的方法。在EL表达式中,你可以使用JSTL核心动作c:set(我们将在下一节讲述)或者作用域属性(scoped attributes)设置的变量。例如,下面几种定义都可以让你使用EL表达式${xyz}。

然而,你必须对作用域多加注意。c:set设置的变量和pageContext中的属性是同一个变量。也就是说,c:set定义了一个在page上下文中的属性。sessionContext中的属性是与其不同的变量,并且你不能用${xyz}的方式访问它,因为它"隐藏"在page上下文中同名属性的后面。要访问session属性,你必须在属性名称之前加上sessionScope前缀,像${sessionScope.xyz}这样。如果你不指定作用域,EL会首先在page中寻找属性,接着是request,然后是session,最后在application作用域。

注意EL表达式不能嵌套。像${expr1[${expr2}]}这样的表达式是非法的。

你可以把几个EL表达式和附加文本组合成复合表达式,如下例所示:

但是,你不能混用格式${}和#{}。

转自:http://book.51cto.com/art/200909/150189.htm


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值