📜  JSP-表达式语言(EL)

📅  最后修改于: 2020-11-13 05:30:08             🧑  作者: Mango


通过JSP表达式语言(EL),可以轻松访问存储在JavaBeans组件中的应用程序数据。 JSP EL允许您创建(a)算术表达式和(b)逻辑表达式。在JSP EL表达式中,可以使用整数,浮点数,字符串,布尔值的内置常量true和false以及null。

简单语法

通常,当您在JSP标记中指定属性值时,只需使用字符串。例如-


JSP EL允许您为任何这些属性值指定一个表达式。 JSP EL的简单语法如下-

${expr}

这里expr指定表达式本身。 JSP EL中最常见的运算符是[] 。这两个运算符使您可以访问Java Bean和内置JSP对象的各种属性。

例如,上面的语法标记可以用类似-的表达式编写:


当JSP编译器在属性中看到$ {}形式时,它将生成代码以评估表达式并替换expresson的值。

您还可以在模板文本中使用JSP EL表达式作为标记。例如, 标记只是将其内容插入JSP的主体内。以下声明将

Hello JSP!插入JSP输出-


   

Hello JSP!

现在,您可以在标记(或任何其他标记)的主体中包含JSP EL表达式,并使用与属性相同的$ {}语法。例如-


   Box Perimeter is: ${2*box.width + 2*box.height}

EL表达式可以使用括号将子表达式分组。例如, $ {(1 + 2)* 3}等于9,但是$ {1 +(2 * 3)}等于7

要停用EL表达式的求值,我们指定page指令的isELIgnored属性,如下所示:

此属性的有效值为true和false。如果为true,则EL表达式出现在静态文本或标记属性中时将被忽略。如果为假,则由容器评估EL表达式。

EL中的基本运算符

JSP表达式语言(EL)支持Java支持的大多数算术和逻辑运算符。下表列出了最常用的运算符-

S.No. Operator & Description
1

.

Access a bean property or Map entry

2

[]

Access an array or List element

3

( )

Group a subexpression to change the evaluation order

4

+

Addition

5

Subtraction or negation of a value

6

*

Multiplication

7

/ or div

Division

8

% or mod

Modulo (remainder)

9

== or eq

Test for equality

10

!= or ne

Test for inequality

11

< or lt

Test for less than

12

> or gt

Test for greater than

13

<= or le

Test for less than or equal

14

>= or ge

Test for greater than or equal

15

&& or and

Test for logical AND

16

|| or or

Test for logical OR

17

! or not

Unary Boolean complement

18

empty

Test for empty variable values

JSP EL中的功能

JSP EL还允许您在表达式中使用函数。这些功能必须在自定义标签库中定义。函数用法具有以下语法-

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

其中ns是函数的命名空间,FUNC是函数的名称,参数1是第一个参数值。例如,函数fn:length ,它是JSTL库的一部分。此函数可以按如下方式使用,以获取字符串的长度。

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

要使用任何标签库(标准或定制)的函数,您必须安装在服务器上的图书馆,并且必须使用在你的JSP库中的指令作为JSTL章解释。

JSP EL隐式对象

JSP表达式语言支持以下隐式对象-

S.No Implicit object & Description
1

pageScope

Scoped variables from page scope

2

requestScope

Scoped variables from request scope

3

sessionScope

Scoped variables from session scope

4

applicationScope

Scoped variables from application scope

5

param

Request parameters as strings

6

paramValues

Request parameters as collections of strings

7

header

HTTP request headers as strings

8

headerValues

HTTP request headers as collections of strings

9

initParam

Context-initialization parameters

10

cookie

Cookie values

11

pageContext

The JSP PageContext object for the current page

您可以在表达式中使用这些对象,就像它们是变量一样。以下示例将帮助您理解概念-

pageContext对象

pageContext对象使您可以访问pageContext JSP对象。通过pageContext对象,您可以访问请求对象。例如,要访问请求的传入查询字符串,可以使用以下表达式-

${pageContext.request.queryString}

范围对象

pageScope,requestScope,sessionScopeapplicationScope变量提供对存储在每个作用域级别的变量的访问。

例如,如果需要在应用程序作用域中显式访问box变量,则可以通过applicationScope变量作为applicationScope.box对其进行访问。

param和paramValues对象

使用param和paramValues对象可以访问通常可通过request.getParameterrequest.getParameterValues方法获得的参数值。

例如,要访问名为order的参数,请使用表达式$ {param.order}$ {param [“ order”]}

以下是访问名为username的请求参数的示例-


   
   
   
      

${param["username"]}

param对象返回单个字符串值,而paramValues对象返回字符串数组。

header和headerValues对象

header和headerValues对象使您可以访问通常可通过request.getHeaderrequest.getHeaders方法获得的头值。

例如,要访问名为user-agent的标头,请使用表达式$ {header.user-agent}$ {header [“ user-agent”]}

以下是访问名为user-agent的头参数的示例-


   
   
   
      

${header["user-agent"]}

输出将类似于以下内容-

User Agent Example

Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; 
   SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; 
   Media Center PC 6.0; HPNTDF; .NET4.0C; InfoPath.2)

标头对象返回单个字符串值,而标头值对象返回字符串数组。