1 EL
随着 JSP 技术的广泛应用,一些问题也随之而来:JSP 主要用于内容的显示,如果嵌入大量的 Java 代码以完成复杂的功能,会使得 JSP 页面难以维护,虽然可以将尽可能多的 Java 代码放到 Servlet 或者 JavaBean 中,但是对于 JavaBean 的操作及集合对象的遍历访问等还是不可避免地会用到 Java 代码。
为了简化 JSP 页面中对象的访问方式,JSP2.0 引入了一种简捷的语言——表达式语言(Expression Language,EL)。
EL 表达式可以使 JSP 写起来更加简单,它基于可用的命名空间,嵌套属性和对集合、操作符的访问符,映射到 Java 类中静态方法的可扩展函数以及一组隐式对象。
在使用 EL 从 scope 中得到参数时可以自动转换类型,因此对于类型的限制更加宽松。Web 服务器对于 request 请求参数通常以字符串类型来发送,在获取时需要使用 Java API 类操作,而且还需要进行强制类型转换,而 EL 可以避免这些类型转换工作,允许用户直接使用 EL 表达式获取值,而不必关心数据类型。
1.1 EL 基础语法
${EL表达式}
${person.name}
上述 EL 表达式由两部分组组成:
- “.”操作符左边是一个 JavaBean 对象或 EL 隐含对象。
- “.”操作符右边是一个 JavaBean 属性名或映射键。
与其等价的是:
${person["name"]}
上述 EL 表达式中使用了“[]”操作符,与“.”相比,“[]”操作符更加灵活。
- “.”操作符要求左边是 JavaBean 对象或 EL 隐含对象,不能是数组或集合元素。
- “[]”可以是 JavaBean 对象或 EL 隐含对象或数组或集合元素。
例如访问数组 a 中的第一个元素:
${a[0]}
“[]”中可以是属性、映射键或索引下标,并使用双括号括起来。
注意:大部分情况下,使用“.”的 方式更加简捷方便,但当要访问的内容只有在运行时才能决定时,就只能使用“[]”的方式,因为“.”后面只能是字面值,而“[]”中的内容可以是一个变量。
1.2 EL 隐含对象
类别 | 对象 | 描述 |
---|---|---|
JSP | pageContext | 引用当前JSP页面的pageContext内置对象 |
作用域 | pageScope | 获得页面作用范围中的属性值,相当于pageContext.getAttribute() |
requestScope | 获得请求作用范围中的属性值,相当于request.getAttribute() | |
sessionScope | 获得会话作用范围中的属性值,相当于session.getAttribute() | |
applicationScpe | 获得应用程序作用范围中的属性值,相当于application.getAttribute() | |
请求参数 | param | 获得请求参数的单个值,相当于request.getParameter() |
paramValues | 获得请求参数的一组值,相当于request.getParameterValues() | |
HTTP请求头 | header | 获得HTTP请求头中的单个值,相当于request.getHeader() |
headerValues | 获得HTTP请求头中的一组值,相当于request.getHeadersValues() | |
Cookie | cookie | 获得请求中的Cookie值 |
初始化参数 | initParam | 获得上下文的初始参数值 |
1.3 EL 运算符
1.3.1 算术运算符
算术运算符 | 说明 | 范例 | 运算结果 |
---|---|---|---|
+ | 加 | ${1+2} | 3 |
- | 减 | ${2-1} | 1 |
* | 乘 | ${2*3} | 6 |
/ 或 div | 除 | ${16 / 5}或${16 div 5} | 3 |
% 或 mod | 取余 | ${16 % 5}或${16 mod 5} | 1 |
1.3.2 关系运算符
关系运算符 | 说 明 | 范 例 | 运算结果 |
---|---|---|---|
== 或 eq | 等于 | ${1==2}或${1 eq 2} | false |
!= 或 ne | 不等于 | ${2!=1}或${1 ne 2} | true |
< 或 lt | 小于 | ${2 < 3}或${2 lt 3 } | true |
> 或 gt | 大于 | ${16 > 5}或${16 gt 5} | true |
<= 或 le | 小于等于 | ${16 <= 5}或${16 le 5} | false |
>= 或 ge | 大于等于 | ${16 >= 5}或${16 ge 5} | true |
1.3.3 逻辑运算符
逻辑运算符 | 说明 | 范例 | 运算结果 |
---|---|---|---|
&& 或 and | 与运算 | ${true && true}或${true and true} | true |
|| 或or | 或运算 | ${ true || false}或${true or false} | true |
! 或not | 非运算 | ${! true}或${not true } | false |
2 JSTL
2.1 JSTL 简介
JSTL —Java Server Pages Standard Tag Library,JSP 标准标签库
JSTL 有以下优点:
- 针对JSP开发中频繁使用的功能提供了简单易用的标签,从而简化了JSP开发;
- 作为JSP规范,以统一的方式减少了JSP中的Java代码数量,力图提供一个无脚本环境;
- 在应用程序服务器之间提供了一致的接口,最大程度的提高了Web应用在各应用服务器之间的可移植性。
JSTL 提供的标签库分为5个部分:
- 核心标签库
- 国际化输出标签库
- XML 标签库
- SQL 标签库
-
2.2 核心标签库
在 JSP 页面中使用核心标签库,需要使用 taglib 指令导入,核心标签库通常使用前缀“c”,语法格式如下:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
2.2.1 通用标签
(1)
其语法格式如下:
<c:out value="value" />
其中,“value”表示要输出的数据,可以是一个 EL 表达式或静态值。
(2)
其语法格式如下:
<c:set var="name" value="value" scope="page|request|session|application" />
其中: