- JSP 基础教程
- JSP - 主页
- JSP - 概述
- JSP - 环境设置
- JSP-架构
- JSP-生命周期
- JSP - 语法
- JSP - 指令
- JSP - 操作
- JSP - 隐式对象
- JSP - 客户请求
- JSP——服务器响应
- JSP - HTTP 状态代码
- JSP - 表单处理
- JSP - 编写过滤器
- JSP - Cookie 处理
- JSP - 会话跟踪
- JSP-文件上传
- JSP - 处理日期
- JSP - 页面重定向
- JSP - 点击计数器
- JSP - 自动刷新
- JSP - 发送电子邮件
- 高级 JSP 教程
- JSP - 标准标签库
- JSP - 数据库访问
- JSP - XML 数据
- JSP-Java Bean
- JSP - 自定义标签
- JSP——表达式语言
- JSP——异常处理
- JSP-调试
- JSP-安全性
- JSP-国际化
- JSP 有用资源
- JSP - 问题与解答
- JSP - 快速指南
- JSP - 有用的资源
- JSP - 讨论
JSP - 表达式语言 (EL)
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 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 表达式的求值,我们指定页面指令的isELIgnored属性,如下所示 -
<%@ page isELIgnored = "true|false" %>
该属性的有效值为 true 和 false。如果为 true,则 EL 表达式出现在静态文本或标记属性中时将被忽略。如果为 false,则由容器计算 EL 表达式。
EL 中的基本运算符
JSP 表达式语言 (EL) 支持 Java 支持的大多数算术和逻辑运算符。下表列出了最常用的运算符 -
编号 | 运算符及描述 |
---|---|
1 | 。 访问 bean 属性或 Map 条目 |
2 | [] 访问数组或列表元素 |
3 | ( ) 对子表达式进行分组以更改计算顺序 |
4 | + 添加 |
5 | - 减法或求负值 |
6 | * 乘法 |
7 | / 或 div 分配 |
8 | %或模 模(余数) |
9 | == 或 eq 测试相等性 |
10 | != 或 ne 检验不平等 |
11 | < 或 lt 测试小于 |
12 | > 或 GT 测试是否大于 |
13 | <= 或 le 测试小于或等于 |
14 | >= 或 ge 测试是否大于或等于 |
15 | && 或和 测试逻辑与 |
16 | || 或或 测试逻辑或 |
17 号 | !或不 一元布尔补码 |
18 | 空的 测试空变量值 |
JSP EL 中的函数
JSP EL 还允许您在表达式中使用函数。这些函数必须在自定义标签库中定义。函数用法具有以下语法 -
${ns:func(param1, param2, ...)}
其中ns是函数的命名空间,func是函数的名称,param1是第一个参数值。例如,函数fn:length是 JSTL 库的一部分。可以如下使用该函数来获取字符串的长度。
${fn:length("Get my length")}
要使用任何标记库(标准或自定义)中的函数,您必须在服务器上安装该库,并且必须使用<taglib>指令将该库包含在 JSP 中,如 JSTL 章节中所述。
JSP EL 隐式对象
JSP 表达式语言支持以下隐式对象 -
序列号 | 隐式对象和描述 |
---|---|
1 | 页面范围 页面范围内的范围变量 |
2 | 请求范围 请求范围内的范围变量 |
3 | 会话范围 会话范围内的范围变量 |
4 | 适用范围 应用程序范围内的作用域变量 |
5 | 参数 请求参数为字符串 |
6 | 参数值 作为字符串集合的请求参数 |
7 | 标头 作为字符串的 HTTP 请求标头 |
8 | 标头值 作为字符串集合的 HTTP 请求标头 |
9 | 初始化参数 上下文初始化参数 |
10 | 曲奇饼 Cookie 值 |
11 | 页面上下文 当前页面的 JSP PageContext 对象 |
您可以在表达式中使用这些对象,就像它们是变量一样。下面的示例将帮助您理解这些概念 -
pageContext 对象
pageContext 对象使您可以访问 pageContext JSP 对象。通过pageContext对象,可以访问request对象。例如,要访问请求的传入查询字符串,您可以使用以下表达式 -
${pageContext.request.queryString}
范围对象
pageScope 、requestScope、sessionScope和applicationScope变量提供对存储在每个范围级别的变量的访问。
例如,如果您需要显式访问应用程序范围内的 box 变量,则可以通过 applicationScope 变量作为applicationScope.box来访问它。
param 和 paramValues 对象
param 和 paramValues 对象使您可以访问通常通过request.getParameter和request.getParameterValues方法可用的参数值。
例如,要访问名为 order 的参数,请使用表达式${param.order}或${param["order"]}。
以下是访问名为 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 对象
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 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)
header 对象返回单个字符串值,而 headerValues 对象返回字符串数组。