JSP表达式语言(EL)可以轻松访问存储在JavaBeans组件中的应用程序数据. JSP EL允许您创建表达式(a)算术和(b)逻辑.在JSP EL表达式中,您可以使用整数,浮点数,字符串,内置常量true和false 表示布尔值,并使用null.
通常,在JSP标记中指定属性值时,只需使用字符串即可.例如 :
<jsp:setProperty name ="box"property ="perimeter"value ="100"/>
JSP EL允许您为任何这些属性值指定表达式. JSP EL的简单语法如下 :
${expr}
这里 expr 指定表达式本身. JSP EL中最常见的运算符是.和 [] .这两个运算符允许您访问Java Bean和内置JSP对象的各种属性.
例如,上面的语法< jsp:setProperty> 标记可以用类似 : 的表达式写成;
<jsp:setProperty name = "box" property = "perimeter" value = "${2*box.width+2*box.height}"/>
当JSP编译器在属性中看到 $ {} 表单时,它会生成用于计算表达式的代码并替换值表达式.
您还可以在模板文本中使用JSP EL表达式作为标记.例如,< jsp:text> 标记只是将其内容插入JSP的主体中.以下< jsp:text> 声明将< h1> Hello JSP!</h1> 插入JSP输出 :
<jsp:text> <h1>Hello JSP!</h1> </jsp:text>
现在,您可以在< jsp:text> 标记(或任何其他标记)的正文中包含JSP EL表达式)使用与属性相同的 $ {} 语法.例如 :
<jsp:text> Box Perimeter is: ${2*box.width + 2*box.height} </jsp:text>
EL表达式可以使用括号对子表达式进行分组.例如, $ {(1 + 2)* 3}等于9,但$ {1 +(2 * 3)}等于7 .
停用对EL表达式的评估,我们将page指令的 isELIgnored 属性指定为 :
<%@ page isELIgnored = "true|false" %>
此属性的有效值为true和false.如果为true,则EL表达式在静态文本或标记属性中出现时将被忽略.如果为false,则由容器评估EL表达式.
JSP表达式语言(EL)支持大多数算术和Java支持的逻辑运算符.下表列出了最常用的运算符 :
S.No. | 运营商&描述 |
---|---|
1 | . 访问bean属性或Map条目 |
2 | [] 访问数组或列表元素 |
3 | () 将子表达式分组以更改评估顺序 |
4 | + 加法 |
5 | - 减去或否定价值 |
6 | * 乘法 |
7 | /或div 分部 |
8 | %或mod 模数(余数) |
9 | ==或eq 测试是否相等 |
10 | !=或ne 测试不平等 |
11 | <或 测试小于 |
12 | >或gt 测试大于 |
13 | < =或le 测试小于或等于 |
14 | > =或ge 测试大于或等于 |
15 | &&或和 测试逻辑AND |
16 | ||或或 测试逻辑OR |
17 | !或不 一元布尔补语 |
18 | 空 测试空变量值 |
JSP EL允许您在表达式中使用函数.必须在自定义标记库中定义这些函数.函数用法具有以下语法 :
${ns:func(param1,param2,...)}
其中 ns 是函数的命名空间, func 是函数的名称, param1 是第一个参数值.例如,函数 fn:length ,它是JSTL库的一部分.此函数可用于获取字符串的长度.
${fn:length("Get my length")}
要使用任何标记库(标准或自定义)中的函数,必须在服务器上安装该库,并且必须使用
JSP表达式语言支持跟随隐含对象 :
S.No | 隐含对象&描述 |
---|---|
1 | pageScope 来自页面范围的范围变量 |
2 | requestScope 来自请求范围的范围变量 |
3 | sessionScope 会话范围中的范围变量 |
4 | applicationScope 来自应用范围的范围变量 |
5 | param 请求参数为字符串 |
6 | paramValues 请求参数作为字符串集合 |
7 | 标题 HTTP请求标题为字符串 |
8 | headerValues HTTP请求标头作为字符串集合 |
9 | initParam 上下文初始化参数 |
10 | cookie Cookie值 |
11 | pageContext 当前页面的JSP PageContext对象 |
您可以在表达式中使用这些对象,就好像它们是变量一样.以下示例将帮助您理解概念 :
pageContext对象使您可以访问pageContext JSP对象.通过pageContext对象,您可以访问请求对象.例如,要访问请求的传入查询字符串,可以使用以下表达式 :
${pageContext.request.queryString}
pageScope,requestScope,sessionScope 和 applicationScope 变量提供对存储在每个范围级别的变量的访问.
例如,如果您需要显式访问应用程序范围中的box变量,则可以通过applicationScope变量为 applicationScope.box .
param和paramValues对象可让您访问通常可通过 request.getParameter 和 request.getParameterValues 方法获得的参数值.
例如,访问名为order的参数,使用表达式 $ {param.order} 或 $ {param ["order"]} .
以下是示例访问请求est参数名为username :
<%@ page import = "java.io.*,java.util.*" %> <%String title = "Accessing Request Param";%> <html> <head> <title><% out.print(title); %></title> </head> <body> <center> <h1><% out.print(title); %></h1> </center> <div align = "center"> <p>${param["username"]}</p> </div> </body> </html>
param对象返回单个字符串值,而paramValues对象返回字符串数组.
header和headerValues对象使您可以访问通常通过 request.getHeader 和 request.getHeaders 方法获得的标头值.
例如,要访问名为user-agent的标头,请使用表达式 $ {header.user-agent} 或 $ {header [" user-agent"]} .
以下是访问名为user-agent : 的标头参数的示例;
<%@ page import = "java.io.*,java.util.*" %> <%String title = "User Agent Example";%> <html> <head> <title><% out.print(title); %></title> </head> <body> <center> <h1><% out.print(title); %></h1> </center> <div align = "center"> <p>${header["user-agent"]}</p> </div> </body> </html>
输出以下 :
User Agent ExampleMozilla/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)
header对象返回单个字符串值,而headerValues对象返回字符串数组.