JSP 表达式语言

JSP 表达式语言 ( Expression Language,简称 EL) 可以访问 JavaBean 中的数据

JSP 表达式既可以用来创建算术表达式也可以用来创建逻辑表达式

JSP 表达式内还可以使用整型数,浮点数,字符串,常量true、false,还有null

JSP EL 简单使用

属性赋值时使用 EL

通常,我们在 JSP 页面中使用 <jsp:setProperty>动作设置属性的语法如下

<jsp:setProperty name="site" name="site" property="perimeter"/>

这其实就是一个简单的字符串赋值

如果使用 JSP 表达式(EL) 来表示属性值,语法可能如下

${expr}

其中,expr 指的是表达式

在 JSP EL 中通用的操作符是点(.)和大括号({})

这两个操作符允许我们通过内嵌的 JSP 对象访问各种各样的 JavaBean 属性

举例来说,上面的 <jsp:setProperty> 动作可以使用表达式语言改写成如下形式:

<jsp:setProperty name="site" property="perimeter" 
                 value="${2*box.width+2*box.height}"/>

JSP 编译器在属性中见到 "${}"格式后,它会产生代码来计算这个表达式,并且产生一个替代品来代替表达式的值

JSP 标签中使用 EL

您也可以在标签的模板文本中使用表达式语言

比如 <jsp:text>标签简单地将其主体中的文本插入到JSP输出中:

<jsp:text>
<h1>Hello JSP!</h1>
</jsp:text>

现在,在 <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 表达式

想要停用对 EL 表达式的评估的话,需要将 page 指令的 isELIgnored 属性值设为 true

<%@ page isELIgnored ="true|false" %>

这样,EL表达式就会被忽略。若设为 false,则容器将会计算 EL 表达式

EL中的基础操作符

JSP EL 表达式支持大部分 Java 所提供的算术和逻辑操作符

操作符 描述
. 访问一个Bean属性或者一个映射条目
[] 访问一个数组或者链表的元素
( ) 组织一个子表达式以改变优先级
+
- 减或负
*
/ or div
% or mod 取模
== or eq 测试是否相等
!= or ne 测试是否不等
< or lt 测试是否小于
> or gt 测试是否大于
<= or le 测试是否小于等于
>= or ge 测试是否大于等于
&& or and 测试逻辑与
|| or or 测试逻辑或
! or not 测试取反
empty 测试是否空值

JSP EL中的函数

JSP EL 允许在表达式中使用函数

但这些函数必须被定义在自定义标签库中

JSP EL 函数的使用语法如下:

${ns:func(param1, param2, ...)}
  • ns 指的是命名空间(namespace)
  • func 指的是函数的名称
  • param1 指的是第一个参数
  • param2 指的是第二个参数,以此类推

比如,有函数 fn:length,在 JSTL 库中定义,可以像下面这样来获取一个字符串的长度:

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

想要使用任何标签库中的函数,需要将这些库安装在服务器中,然后使用 <taglib>标签在 JSP 文件中包含这些库

JSP EL 隐含对象

JSP EL 支持下表列出的隐含对象

隐含对象 描述
pageScope page 作用域
requestScope request 作用域
sessionScope session 作用域
applicationScope application 作用域
param Request 对象的参数,字符串
paramValues Request对象的参数,字符串集合
header HTTP 信息头,字符串
headerValues HTTP 信息头,字符串集合
initParam 上下文初始化参数
cookie Cookie值
pageContext 当前页面的pageContext

我们可以在表达式中使用这些对象,就像使用变量一样

pageContext对象

EL pageContext 对象是 JSP 中 pageContext 对象的引用

通过 pageContext 对象,我们可以访问 request 对象

比如,访问 request 对象传入的查询字符串

${pageContext.request.queryString}

Scope 对象

pageScope,requestScope,sessionScope,applicationScope 变量用来访问存储在各个作用域层次的变量

如果我们需要显式访问在 applicationScope 层的 box 变量,可以这样来访问:

${applicationScope.box}

param 和 paramValues 对象

param 和 paramValues 对象用来访问参数值,通过使用 request.getParameter 方法和 request.getParameterValues 方法

比如访问一个名为 order 的参数,可以这样使用表达式

${param.order}

或者

${param["order"]}

下面的范例演示了如何使用 EL 访问 request 中的 username 参数

webapp/el_param.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.io.*,java.util.*" %>
<!DOCTYPE html>
<meta charset="utf-8"/>
<title>Accessing Request Param | JSP 基础教程 | 简单教程(www.twle.cn)</title>
<p>${param["username"]}</p>
<BR/>
<p>Accessing Request Param | JSP 基础教程 | 简单教程(www.twle.cn)</p>

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

在浏览器上输入 http://localhost:8080/jsp/el_param.jsp 显示结果如下

header和headerValues对象

header和headerValues对象用来访问信息头,通过使用 request.getHeader 方法和 request.getHeaders方法

比如,要访问一个名为 user-agent 的信息头,可以这样使用表达式:

${header.user-agent}

或者

${header["user-agent"]}

下面这个范例演示了如何访问 user-agent 信息头

el_header.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.io.*,java.util.*" %>
<!DOCTYPE html>
<meta charset="utf-8"/>
<title>User Agent Example | JSP 基础教程 | 简单教程(www.twle.cn)</title>
<p>${header["user-agent"]}</p>
<BR/>
<p>User Agent Example | JSP 基础教程 | 简单教程(www.twle.cn)</p>

header 对象返回单一值,而 headerValues 则返回一个字符串数组

在浏览器上输入 http://localhost:8080/jsp/el_header.jsp 显示结果如下

JSP 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.