欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

EL表达式 博客分类: EL表达式 EL表达式 学习 

程序员文章站 2024-03-22 15:39:28
...
EL表达式
     EL全名为Expression Language,它原来是JSTL1.0为了方便存取数据所定义的语言。到了JSP2.0以后,EL正式纳入成为标准规范之一。只要是支持Servlet2.4/JSP2.0的Container,都可以在JSP网页中直接使用EL。
通过本章的学习,读者应该能够完成如下几个目标。
熟练掌握使用EL运算符
熟练掌握EL内置对象
熟练掌握使用EL存取器

1  EL运算符
     EL提供了多种运算符操作,比如算术运算符、关系运算符、逻辑运算符、验证运算符等。本节将对这些运算符进行详细的讲解。

1.1 算术运算符
  通过EL提供算术运算符,开发者可以非常方便的在JSP页面进行算术操作。而且使用算术运算符和Java的算术运算符非常相视,开发者能很熟练的使用这些算术运算符来进行开发,从而简化了页面代码量。
常用的算术运算符有加、减、乘、除、求余,如下表所示。

算术运算符 说明 示例 结果
+ 加 ${1 + 1} 2
- 减 ${1 - 1} 0
* 乘 ${1 * 2} 2
/或div 除 ${3 / 2} 1.5
%或mod 取余 ${3 % 2} 1

1.2 关系运算符
  关系运算符主要用来进行比较操作。EL提供了关系运算符,使开发者能很方便的在JSP页面进行比较操作。
常用的关系运算符有等于、不等于、小于、大于、小于或等于、大于或等于,如下表所示。

关系运算符 说明 示例 结果
= = 或 eq 等于 ${1 = = 1}或${1 eq 1} true
!= 或ne 不等于 ${1 != 1}或${1 ne 1} false
< 或 lt 小于 ${1 < 2}或${1 lt 1} true
> 或 gt 大于 ${1 > 2}或${1 gt 1} false
<= 或 le 小于或者等于 ${1 <= 2}或${1 le 1} true
>= 或 ge 大于或者等于 ${1 >= 2}或${1 ge 1} false

1.3 逻辑运算符
  逻辑运算符主要用来进行逻辑操作,如:交集、并集、非。EL提供了关系运算符,使开发者能很方便的在JSP页面进行逻辑操作。需要注意的是运算符两边的表达式必须是布尔类型的。

逻辑运算符 说明 示例 结果
&& 或 and 交集 ${A && B}或${A and B} 当A和B都为true时为true,其他情况为false
|| 或 or 并集 ${A || B}或${A or B} 当A和B都为false时为false,其他情况为true
! 或 not 非 ${!A} 或${not A} 当A为true时,为false 当A为false时,为true

1.4 条件运算符
  前面提到了大量的预算符,下面还将介绍一个可以节省大量代码的条件运算符。条件运算符的格式如下。
${A ? B : C}
如果A为true时,执行B代码;而如果A为false时,则执行C代码。

1.5 验证运算符
  EL提供了验证运算符empty,其对于验证数据特别有用。empty运算符采用单个表达式作为其变量即${empty input},并返回一个布尔值,该布尔值表示对表达式求值的结果是不是“空”值。求值结果为null的表达式被认为是空,如无元素的集合或数组。如果参数是对长度为零的String求值所得的结果,则empty 运算符也将返回 true。

1.6 括号运算符以及运算符的优先级
括号运算符主要用来改变运算的优先级,例如${(3+2)*8},执行结果为40。如果去掉括号,那么结果将为19。从而可以看出在括号中内容将会先执行。




低 从高到低
[] , .
()
-(负) 、 not 、 ! 、 empty
* 、 / 、 div 、 % 、 mod
+ 、-(减)
< 、 > 、 <= 、 >= 、 lt 、 gt 、 le 、 ge
== 、 != 、 eq 、 ne
&& 、 and
|| 、 or
${A ? B : C}

2 EL内置对象
  EL表达式非常简单,在前面已经介绍过EL的运算符。所有的EL表达式都是以“${”开始“}”为结尾的。如:“${applicationScope.user.userName}”。
如果按照以前的JSP Scriptlets的写法代码如下。
User user = (User)application.getAttribute(“user”);
String username = user.getUserName();

2.1 .与[ ]运算符
  EL通过.与[ ]运算符来存取数据。比如:
${applicationScope.user.userName}
等价于
${applicationScope.user[“userName”] }
.和[ ]也可以同时混合使用,如下:
${sessionScope.shoppingCart[0].price}
回传的结果为shoppingCart中第一项物品的价格。
接下来介绍两者的差异。

(1)如果存取的属性名称包含一些特殊的符号,如“.”或者是“-”等非字母或数字的符号时,就必须使用[ ],例如。
applicationScope.user.usert-Name
这样写是错误的,必须使用[ ],代码如下。
applicationScope.user[“user-Name”]
(2)如果使用变量来传入,那么也就只能使用[ ]。例如。
<%String data = “userName”;%>
${applicationScope.user[data]}
这样做的效果等于于上面代码。
${applicationScope.user.userName}

2.2 与储存有关的内置对象
前面几章介绍了JSP中有内置对象,同样在EL中也有自己的隐含对象。
首先介绍4个与存储范围有关的隐含对象,分别是applicationScope、sessionScope、requestScope、pageScope。这些隐含对象使用时来和JSP中的pageContext,request,session,application一样。但是这四个隐含对象只能用来取得某个范围的属性值。即JSP中的getAttribute(String name),不能取得其他的信息。比如在JSP中request对象除了能够存取属性外,还可以用来接受参数和表头信息等。
(1)applicationScope对象,用来取得application范围属性值。
(2)sessionScope对象,用来取得session范围属性值。
(3)requestScope对象,用来取得request范围属性值。
(4)pageScope对象,用来取得page范围属性值。
如果不指定范围,如使用${name}。其意思是去取某一范围中名称为name的属性。因为并没有指定哪一个属性范围的name,所以它的默认值会从page范围内找,如果找不到,再依次到request、session、application范围中找。如果没有找到就返回null。在网页中也就没有显示。

2.3 与输入有关的内置对象
    与输入有关的隐含对象有两个param和paramValues,用来取得用户的请求参数。在使用EL之前可以使用如下代码取得用户的请求参数。
request.getParameter(String name);
request.getParameterValues(name);
在使用EL时则可以使用param和paramValues两者来取得用户请求参数。其中使用param接收的参数只有一个值,而如果参数有几个值,就必须使用paramValues来接受参数。

2.4 cookie内置对象
    下面来介绍EL其他的隐含对象cookie、header、headerValues、iniParam、pageContext。
cookie以key-value(键值对)的形式存储在浏览器的缓存区内。EL中没有提供设定cookie的操作(这些操作一般都是后端开发者去做的),只能通过cookie对象设置cookie中的值。

2.5 header内置对象
     header储存用户浏览器和服务器用来沟通的数据。当用户浏览器请求服务器的页面时,会传送出一个记载信息的标头文件。而服务器端可以通过header或者headerValues来取得这些值。其中header用来取得同一标头名称只有一个值的信息,而headerValues用来取得同一标头名称拥有不同的值的信息。

2.6 initParam内置对象
     initParam可以取得在web站点中设置的环境参数(context)值。

03 <context-param>
04 <param-name>username</param-name>
05 <param-value>James</param-value>
06 </context-param>

2.7 pageContext内置对象
pageContext用来取得有关用户请求和页面的详细信息。

取得请求的参数字符串    ${pageContext.request.queryString}
取得请求URL                  ${pageContext.request.requestURL}
取得web应用名称           ${pageContext.request.contextPath}
取得HTTP请求方式(GET or POST)pageContext.request.method}
取得使用的协议              ${pageContext.request.protocol}
取得用户IP地址              ${pageContext.request.remoteAddr}
判断session是否为新     ${pageContext.session.new}
取得sessionID                ${pageContext.session.id}

3 EL存取器
      使用EL存取器(也称作导航)可以访问JavaBean、Map、对象数组和List等中的数据。EL对数据的访问比使用Scriptlets有着代码量少,易维护的特点。

使用存取器读取JavaBean中的数据
使用存取器读取Map中的数据
使用存取器读取数组中的数据
存取器复杂应用

相关标签: EL表达式 学习