JSP表达式语言(EL)使得可以轻松访问存储在JavaBeans组件中的应用程序数据。JSP EL允许用来创建算术和逻辑表达式。 在JSP EL表达式中,可以使用整数,浮点数,字符串,布尔值的内置常量为true
和false
,以及null
值。
简单语法
通常,当在JSP标记中指定属性值时,只需使用字符串即可。 例如 -
<jsp:setProperty name = "box" property = "perimeter" value = "100"/>
JSP EL允许为这些属性值指定一个表达式。JSP EL的简单语法如下 -
${expr}
这里expr
指定表达式本身。JSP EL中最常见的操作符是:.
和[]
。 这两个运算符用来访问Java Beans和内置JSP对象的各种属性。
例如,上面的语法<jsp:setProperty>
标签可以写成一个表达式,如 -
<jsp:setProperty name = "box" property = "perimeter"
value = "${2*box.width+2*box.height}"/>
当JSP编译器在属性中遇到${}
形式时,它会生成代码以评估表达式并替换expresson
的值。
还可以在标签的模板文本中使用JSP EL表达式。 例如,<jsp:text>
标签只是将其内容插入到JSP的正文内。以下<jsp:text>
声明将<h1> Hello JSP!</ h1>
插入JSP输出 -
<jsp:text>
<h1>Hello JSP!</h1>
</jsp:text>
现在,可以使用与属性相同的${}
语法,将JSP EL表达式包含在<jsp:text>
标签(或任何其他标记)的正文中。 例如 -
<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" %>
此属性的有效值为true
和false
。 如果设置为true
,EL表达式在静态文本或标签属性中显示时将被忽略。 如果为false
,EL表达式将由容器进行评估。
EL中的基本运算符
JSP表达式语言(EL)支持Java支持的大多数算术和逻辑运算符。下表列出了最常用的运算符 -
编号 | 运算符 | 描述 |
---|---|---|
1 | . |
访问一个bean属性或Map的项 |
2 | [] |
访问数组或List元素 |
3 | () |
组合子表达式以更改评估顺序 |
4 | + |
相加 |
5 | - |
减去或取反一个值 |
6 | * |
乘法 |
7 | / 或 div |
除法 |
8 | % 或 mod |
求模 |
9 | == 或 eq |
测试等于 |
10 | != 或 ne |
测试不等于 |
11 | < 或 lt |
测试小于 |
12 | > 或 gt |
测试大于 |
13 | <= 或 le |
测试小于或等于 |
14 | >= 或 ge |
测试大于或等于 |
15 | && 或 and |
测试逻辑与 |
16 | or |
测试逻辑或 |
17 | ! 或 not |
一元布尔互补 |
18 | empty |
测试空变量值 |
JSP EL函数
JSP EL允许在表达式中使用函数。必须在自定义标签库中定义这些函数。函数用法具有以下语法 -
${ns:func(param1, param2, ...)}
其中ns
是函数的命名空间,func
是函数的名称,param1
是第一个参数值。 例如,函数fn:length
,它是JSTL库的一部分。 可以使用以下函数来获取字符串的长度。
${fn:length("Get my length")}
要使用任何标签库(标准或自定义)中的函数,必须在服务器上安装该库,并且必须使用JTAG代码中所述的<taglib>
指令将库包含在JSP中。
JSP EL隐式对象
JSP表达式语言支持以下隐式对象 -
编号 | 隐式对象 | 描述 |
---|---|---|
1 | pageScope |
来自页面范围的范围变量 |
2 | requestScope |
来自请求范围的范围变量 |
3 | sessionScope |
会话范围的范围变量 |
4 | applicationScope |
应用范围的范围变量 |
5 | param |
请求参数作为字符串 |
6 | paramValues |
请求参数作为字符串集合 |
7 | header |
HTTP请求标头作为字符串 |
8 | headerValues |
HTTP请求标头作为字符串集合 |
9 | initParam |
上下文初始化参数 |
10 | cookie |
Cookie值 |
11 | pageContext |
当前页面的JSP PageContext对象 |
可以在表达式中使用这些对象,就像它们是变量一样。以下示例将帮助了解这些概念 -
pageContext对象
pageContext
对象可以访问pageContext JSP对象。 通过pageContext
对象,可以访问请求对象。 例如,要访问请求的传入查询字符串,可以使用以下表达式 -
${pageContext.request.queryString}
范围对象
pageScope
,requestScope
,sessionScope
和applicationScope
变量提供对存储在每个范围级别的变量的访问。
例如,如果需要显式访问应用程序范围中的变量,则可以通过applicationScope
变量 - applicationScope.box
来访问它。
param和paramValues对象
可以通过param
和paramValues
对象的request.getParameter
和request.getParameterValues
方法来访问参数值。
例如,要访问order
参数,请使用表达式${param.order}
或${param [“order”]}
。
以下是访问username
请求参数的示例。文件:getParameter.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*"%>
<%
String title = "Accessing Request Param";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>
<%
out.print(title);
%>
</title>
</head>
<body>
<div style="margin: auto; width: 100%">
<center>
<h2>
<%
out.print(title);
%>
</h2>
</center>
<div align="center">
<p>username参数值:${param["username"]}</p>
</div>
</div>
</body>
</html>
在编写上面文件以后,部署项目文件,打开浏览器访问:http://localhost:8080/jspEL/getParameter.jsp?username=maxsu
,得到以下结果 -
param
对象返回单个字符串值,而paramValues
对象返回字符串数组。
header和headerValues对象
header
和headerValues
对象可以访问通过request.getHeader
和request.getHeaders
方法通常可用的头值。
例如,要访问user-agent
头,可使用${header.user-agent}
或${header [“user-agent”]}
表达式。
以下是访问user-agent
头参数的示例,文件:**
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*"%>
<%
String title = "User Agent Example";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>
<%
out.print(title);
%>
</title>
</head>
<body>
<div style="margin: auto; width: 100%">
<center>
<h1>
<%
out.print(title);
%>
</h1>
</center>
<div align="center">
<p>${header["user-agent"]}</p>
</div>
</div>
</body>
</html>
打开浏览器访问URL:http://localhost:8080/jspEL/header.jsp
,输出以下结果 -
header
对象返回单个字符串值,而headerValues
对象返回字符串数组。