EL 表达式

1.作用

让jsp书写起来更加的方便。简化在jsp中获取作用域或者请求数据的写法。也会搭配Jstl来进行使用。计算和输出Java对象。本质是在JSP脚本编制元素范围外使用运行时表达式的功能。

2.特点

语法简单,使用方便。举个例子

${sessionScope.user.sex}

(所有EL都是以${为起始、以}为结尾的。)上述EL范例的意思是:从Session的范围中,取得

用户的性别。假若依照之前JSP Scriptlet的写法如下:

User user =(User)session.getAttribute("user");

String sex =user.getSex( );

两者相比较之下,可以发现EL 的语法比传统JSP Scriptlet 更为方便、简洁。

3.   .与 [ ] 运算符

EL 提供 . 和 [ ] 两种运算符来导航数据。下列两者所代表的意思是一样的:

${sessionScope.user.sex}等于${sessionScope.user["sex"]}

总结来说在写法上 . 不需要用双引号括起变量名,而[]需要

和 [ ] 也可以同时混合使用,如下:

${sessionScope.shoppingCart[0].price}

回传结果为shoppingCart中第一项物品的价格。

不过,以下两种情况,两者会有差异:

(1)有特殊字符时使用[]

当要存取的属性名称中包含一些特殊字符,如“. ”或 “–” 等并非字母或数字的符号,就一定要使用 [ ],

例如:${user.CD.Name }

上述是不正确的方式,应当改为:${user["CD.Name"] }

(2). 无法做到动态取值,而[]可以做到动态取值。

我们来考虑下列情况:

${sessionScope.user[data]}

此时,data 是一个变量,假若data的值为"sex"时,那上述的例子等于${sessionScope.user.sex};

假若data 的值为"name"时,它就等于${sessionScope.user.name}。

因此,如果要动态取值时,就可以用上述的方法来做,但无法做到动态取值。

3.应用[ ]运算符可以获取数组的指定元素,但用.运算符不可以

4.应用[ ]运算符可以获取Ust集合中的元素

5.应用‘”’运算符可以可以获取Map集合中的指定元素

4.EL的使用条件

5.EL的存取范围

pageContext、request、session、application四个对象中的数据,其他数据一概不理会
找到了则获取返回,找不到则什么都不做,也不报错 。默认查找顺序:
pageConext–>request—>session—>application。每次查找都是从小到大进行查找,找到了则获取,不再继续找了。找不到返回null.

6.通过EL访问数据

EL获取请求头数据和Cookie数据
请求头数据
${header}–>返回所有的请求头数据
${header[“键名”]}—>返回指定的键名的请求头数据
${hedaerValues[“键名”]}—>返回指定的键名(同键不同值)的值的数组。

获取Cookie数据
${cookie}—>返回存储了所有的cookie对象的map集合
${cookie.键名}---->返回指定的cookie对象
${cookie.键名 .name}—>返回指定的cookie对象存储的数据的键名。
${cookie.键名.value}—>返回指定的cookie对象存储的数据的值。

7.关系运算符

${逻辑表达式}:&&  与     ||  非      !  非      "?  :"   条件运算
${算术表达式}:+,-,*,/
${关系表达式}:>,<,>=,==,!=,%
特殊:三目运算
注:
+表示加法运算,不表示字符链接。使用EL表达式进行字符链接会报错

8.EL隐含对象

隐含对象

类型

说明

PageContext

javax.servlet.ServletContext

表示此JSP的PageContext

PageScope

java.util.Map

取得Page范围的属性名称所对应的值

RequestScope

java.util.Map

取得Request范围的属性名称所对应的值

sessionScope

java.util.Map

取得Session范围的属性名称所对应的值

applicationScope

java.util.Map

取得Application范围的属性名称所对应的值

param

java.util.Map

如同ServletRequest.getParameter(String name)。回传String类型的值

paramValues

java.util.Map

如同ServletRequest.getParameterValues(String name)。回传String[]类型的值

header

java.util.Map

如同ServletRequest.getHeader(String name)。回传String类型的值

headerValues

java.util.Map

如同ServletRequest.getHeaders(String name)。回传String[]类型的值

cookie

java.util.Map

如同HttpServletRequest.getCookies()

initParam

java.util.Map

如同ServletContext.getInitParameter(String name)。回传String类型的值

不过有一点要注意的是如果你要用EL输出一个常量的话,字符串要加双引号,不然的话EL会默认把你认为的常量当做一个变量来处理,

这时如果这个变量在4个声明范围不存在的话会输出空,如果存在则输出该变量的值。

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值