关于JSP 表达式语言的全面解读!

每天给你诚意满满的干货

Expression Language 表达式语言在 JSP 中用于简化 Java 代码,可以方便地访问 JavaBean 中的数据。

EL 在 JSP 中默认开启,如果不想使用,可通过如下方式禁用 EL 表达式。

JSP 表达式语言

语法结构

EL 表达式的语法结构为 $,其中 expression 为运算表达式。常用运算符为.和[],允许我们直接访问 JavaBean 属性。JSP 在编译时,遇到${}表达式后,会根据代码进行计算。

.运算符可以用于访问属性,要访问的属性必须有 getter 方法。但属性名不能有特殊字符,如果有特殊字符就必须使用[]运算符。.运算符也可以用于 Map 的访问,.后跟上 key 即可。

[]运算符通常用于数组和集合,[] 中放入元素下标即可,下标从 0 开始。对于 Map,在括号中放入 key,返回值即为 value。[]运算符同样可以用于访问属性,实现与.运算符 相同的功能。

这两种运算符都可以递归使用,也可以交叉使用。对于多维数组、嵌套集合或其他复杂结构,也可以使用 EL 表达式。

$

$

$

在 EL 表达式中,数字、字符串、布尔值和 null 都可以被指定为文字值。字符串可以用单引号或双引号。布尔值为 true 和 false。

基础运算符

同大部分语言一样,EL 表达式也提供了一些基础运算符,如算术运算符、关系运算符、逻辑运算符等。在 ${} 表达式中,我们可以直接进行四则运算、关系比较、逻辑运算,比如 $ 将输出 3。

此为,EL 表达式还支持如下三种运算符:

▶empty 运算符,测试是否为空 : $

▶()运算符,改变优先级 : $

▶三元运算 : $

使用 EL 表达式

使用 EL 表达式,我们可以很容易地在 JSP 中输出用户信息,如下所示:

▶$ 取得请求的参数字符串

▶$ 取得请求的URL,但不包括请求之参数字符串

▶$ 取得用户名称

▶$ 取得用户的IP 地址

▶$ 取得主机端的服务信息

JSP EL 中的函数

JSP EL 允许我们在表达式中使用函数,但这些函数仅限于自定义标签库中的函数,语法如下:

$

其中,ns 表示命名空间,func 表示函数名称,param 表示参数。

使用函数时,需要使用 标签包含函数库。比如 JSTL 库中有计算字符串长度的函数,我们可以这样使用:

$

JSP EL 隐含对象

JSP EL 提供了隐含对象,我们可以直接使用而不需要定义。比如访问 request 对象的 queryString 时,我们可以这样写表达式 $。

pageScope、requestScope、sessionScope、applicationScope 变量可以用来访问各个作用域层次的变量,如访问 Request 中的 data 变量,可以这样写表达式$。

param 和 paramValues 对象可以用来访问参数值,EL 表达式等效于 request.getParameter和request.getParameterValues,分别返回一个参数值和一个参数值数组。

header 和 headerValues 对象可以用来访问 HTTP 头信息,EL 表达式等效于request.getHeader和request.getHeaders,分别返回一个参数值和一个参数值数组。

当 EL 表达式没有指定隐含对象时,JSP 在 Scope 对象中按照顺序进行搜索。比如表达式$,将按照顺序依次搜索pageScope.label、requestScope.label、sessionScope.label、applicationScope.label,直到找到变量值并返回。如果我们可以确定label一定存在,则可以这样简化书写表达式。通过这种方法,可以将 EL 标识符看作引用限制了作用域的变量。

pageContext 拥有访问所有其它八个 JSP 隐式对象的特性。实际上,这是将它包括在 EL 隐式对象中的主要理由。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180530G01TLU00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券