EL表达式详解

本文为学习总结所用。

目录

一:简介

二:语法

(一)变量

(二)隐含对象

1.与范围有关的

2.与输入有关的

3.其他

三:运算符

(一)算数运算符

(二)比较运算符

(三)逻辑运算符

(四)其他

1."." 和 "[]"

2.empty

3.条件运算符

(五)优先级

 四:保留字

 五:禁用EL表达式

1.禁用单个

 2.禁用当前页

3.禁用整个web应用

六:内置对象

七:EL中的函数(浅学)

 


一:简介

在 JSP 页面中,我们经常使用 JSP 表达式来输出变量或者页面之间传递的参数,但写法繁杂,还大大降低了页面的可读性。

为了简化 JSP 页面,JSP 2.0 新增了 EL(Expression Language)表达式语言。EL 提供了更为简洁、方便的形式来访问变量和参数,不仅可以简化 JSP 页面代码,还会使开发者的逻辑变得更加清晰 。

JSP表达式语言(EL)使得访问存储在JavaBean中的数据变得非常简单。JSP EL既可以用来创建算术表达式也可以用来创建逻辑表达式。

二:语法

写法为:${合法的EL表达式}

示例:

${ param.name }
// 相当于
<% =request.getParameter('name') %>

(一)变量

EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。

这里并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。

如果全部的范围都没有找到,就会传回null。

(二)隐含对象

所有提到的隐含对象在后文第六大点中可以查到

1.与范围有关的

与范围有关的隐含对象包含以下四个:pageScope、requestScope、sessionScope、和applicationScope;

它们基本上就和JSP的pageContext、request、session和application一样;

在EL中,这四个隐含对象只能用来取得范围属性值,即getAttribute(String name),却不能取得其他相关信息。

2.与输入有关的

与输入有关的隐含对象有两个:param和paramValues,它们是EL中比较特别的隐含对象。

例如我们要取得用户的请求参数时,可以利用下列方法:

request.getParameter(String name);
request.getParameterValues(String name);

在EL表达式中:

${param.name};
${paramValues.name};

3.其他

cookie

header、headerValues  

        header 储存用户浏览器和服务端用来沟通的数据。

        例:要取得用户浏览器的版本,可以使用${header["User-Agent"]}。

        但是偶尔有可能同一标头名称拥有不同的值,此时必须改为使用headerValues 来取得。

initParam

pageContext

        pageContext取得其他有关用户要求或页面的详细信息。

                ${pageContext.request.queryString}         取得请求的参数字符串

                ${pageContext.request.requestURL}         取得请求的URL,但不包括请求之参数字符串

                ${pageContext.request.contextPath}         服务的web application 的名称

                ${pageContext.request.method}           取得HTTP 的方法(GET、POST)

                ${pageContext.request.protocol}         取得使用的协议(HTTP/1.1、HTTP/1.0)

                ${pageContext.request.remoteUser}         取得用户名称

                ${pageContext.request.remoteAddr }         取得用户的IP 地址

                ${pageContext.session.new}             判断session 是否为新的

                ${pageContext.session.id}               取得session 的ID

                ${pageContext.servletContext.serverInfo}   取得主机端的服务信息

三:运算符

(一)算数运算符

算术运算符用来进行加、减、乘、除和求余,EL 表达式算术运算符如下:

运算符说明示例结果
+${10+5}15
-${10-5}5
*${10*5}50
/  或 div${10/5}2
% 或 mod求余${10%5}0

注意:EL 的+运算符与 Java 的+运算符不一样,它无法实现两个字符串的连接运算。如果该运算符连接的两个值不能转换为数值型的字符串,则会拋出异常;反之,EL 会自动将这两个字符转换为数值型数据,再进行运算。
EL 表达式中还可以使用 ( ) 改变优先级,例如:${2+3*2} 等于 8,${(2+3)*2} 等于 10。

(二)比较运算符

比较运算符用来实现两个表达式的比较,进行比较的表达式可以是数值型或字符串。EL 表达式比较运算符如下:

运算符说明示例结果
== 或 eq等于${6==6} 或 ${6 eq 6}
${"A"="a"} 或 ${"A" eq "a"}
true
false
!= 或 ne不等于${6!=6} 或 ${6 ne 6}
${“A"!=“a”} 或 ${“A” ne “a”}
false
true
< 或 lt小于${3<8} 或 ${3 lt 8}
${"A"<"a"} 或 ${"A" lt "a"}
true
true
> 或 gt大于${3>8} 或 ${3 gt 8}
${"A">"a"} 或 ${"A" gt "a"}
false
false
<= 或 le小于等于${3<=8} 或 ${3 le 8}
${"A"<="a"} 或 ${"A" le "a"}
true
true
>= 或 ge大于等于${3>=8} 或 ${3 ge 8}
${"A">="a"} 或 ${"A" ge "a"}
false
false

(三)逻辑运算符

逻辑运算符两边的表达式必须是布尔型(Boolean)变量,其返回结果也是布尔型(Boolean)。EL 表达式逻辑运算符如下: 

运算符说明示例结果
&& 或 and${2>1&&3<4}true
|| 或 or${2<1||3<4}true
! 或 not${!(2>4)}true

(四)其他

1."." 和 "[]"

"." 和 "[]" 是 EL 中最常用的运算符,用来访问 JavaBean 中的属性和隐式对象的数据。一般情况下,"."用来访问 JavaBean 属性或 Map 类型的值,[]用来访问数组或者列表的元素。

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

例如:${user.My-Name}应当改为${user["My-Name"] }

如果要动态取值时,就可以用[]来做,而 "." 无法做到动态取值。

例如:${sessionScope.user[data]}中data 是一个变量

2.empty

empty 用来判断 EL 表达式中的对象或者变量是否为空。若为空或者 null,返回 true,否则返回 false。 

3.条件运算符

EL 表达式中,条件运算符的语法和 Java 的完全一致,如下:

${条件表达式?表达式1:表达式2}

其中,条件表达式用于指定一个判定条件,该表达式的结果为 boolean 类型。如果该表达式的运算结果为 true,则返回表达式 1 的值;反之,返回表达式 2 的值。

(五)优先级

优先级如下表所示(由高至低,由左至右)

序号运算符
1[] 、.
2()
3-(负) 、not、! 、empty
4* 、 / 、 div 、% 、mod
5+、-(减)
6<、>、<=、>=、lt、gt、le、ge
7==、!-、eq、ne
8&&、and
9||、or
10${A?B:C}

 四:保留字

保留字是系统预留的名称。在为变量命名时,应该避开这些预留的名称,以免程序编译时发生错误。EL 表达式的保留字如下表所示:

ltlegtge
eqnetruefalse
andornotinstanceof
divmodemptynull

 五:禁用EL表达式

如果不想使用 EL 表达式,可以禁用 EL 表达式。禁用 EL 表达式有以下 3 种方法:

1.禁用单个

在 EL 表达式前加 \,例如:

\${2+3}

页面输出:

${2+3}

 2.禁用当前页

将 page 指令中的 isELIgnored 属性设置为 true,如下:

<%@ page isELIgnored="true" %>

3.禁用整个web应用

在 web.xml 中配置 <el-ignored> 元素

<jsp-property-group>
    <url-pattern>*jsp</url-pattern>
    <el-ignored>false</el-ignored>
</jsp-propery-group>

六:内置对象

为了显示方便,EL 表达式语言提供了许多内置对象,可以通过不同的内置对象来输出不同的内容。EL 表达式内置对象如下:

内置对象说明
pageScope获取 page 范围的变量
requestScope获取 request 范围的变量
sessionScope获取 session 范围的变量
applicationScope获取 application 范围的变量
param相当于 request.getParameter(String name),获取单个参数的值
paramValues相当于 request.getParameterValues(String name),获取参数集合中的变量值
header相当于 request.getHeader(String name),获取 HTTP 请求头信息
headerValues相当于 request.getHeaders(String name),获取 HTTP 请求头数组信息
initParam相当于 application.getInitParameter(String name),获取 web.xml 文件中的参数值
cookie相当于 request.getCookies(),获取 cookie 中的值
pageContext表示当前 JSP 页面的 pageContext 对象

七:EL中的函数(浅学)

JSP EL允许您在表达式中使用函数。这些函数必须被定义在自定义标签库中。函数的使用语法如下:

${ns:func(param1, param2, ...)}

ns指的是命名空间(namespace),func指的是函数的名称,param1指的是第一个参数,param2指的是第二个参数,以此类推。比如,有函数fn:length,在JSTL库中定义,可以像下面这样来获取一个字符串的长度:

${fn:length("Get my length")}

要使用任何标签库中的函数,您需要将这些库安装在服务器中,然后使用<taglib>标签在JSP文件中包含这些库。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
EL表达式详解EL表达式 1、EL简介 1)语法结构 ${expression} 2)[]与.运算符 EL 提供.和[]两种运算符来存取数据。 当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用 []。 例如: ${user.My-Name}应当改为${user["My-Name"] } 如果要动态取值时,就可以用[]来做,而.无法做到动态取值。例如: ${sessionScope.user[data]}中data 是一个变量 3)变量 EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为 username的变量。 因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、 Application范围查找。 假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时, 就回传null。 属性范围在EL中的名称 Page PageScope Request RequestScope Session SessionScope Application ApplicationScope 4) 1--EL表达式用${}表示,可用在所有的HTML和JSP标签中作用是代替JSP页面中复杂的JAVA代码. 2--EL表达式可操作常量 变量 和隐式对象. 最常用的 隐式对象有${param}和${paramValues}. ${param}表示返回请求参数中单个字符串的值. ${paramValues}表示返回请求参数的一组 值.pageScope表示页面范围的变量.requestScope表示请求对象的变量. sessionScope表示会话 范围内的变量.applicationScope表示应用范围的变量. 3 -- 表示是否禁用EL语言,TRUE表示禁止.FALSE表示不禁 止.JSP2.0中默认的启用EL语言. 4-- EL语言可显示 逻辑表达式如${true and false}结果是false 关系表达式如${5>6} 结 果是false 算术表达式如 ${5+5} 结果是10 5--EL中的变量搜
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值