在本章中,我们将了解JSP中的不同标签。JSP标准标签库(JSTL)是一个有用的JSP标签的集合,它封装了许多JSP应用程序通用的核心功能。
JSTL支持常见的结构性任务,如迭代和条件,用于处理XML文档的标签,国际化标签和SQL标签。 它还提供了一个框架,用于将现有的自定义标签与JSTL标签集成。
安装JSTL库
要开始使用JSP标签,需要先安装JSTL库。如果使用的是Apache Tomcat容器,请按照以下两个步骤进行操作:
步骤1 - 从Apache Standard Taglib下载二进制文件并解压缩压缩文件。
步骤2 - 要从Jakarta Taglibs发行版中使用标准Taglib,只需将发行版“lib”
目录中的JAR文件复制到应用程序的`webapps\ROOT\WEB-INF\lib目录中即可。
要使用JSTL的任何库,必须在使用该库的每个JSP的顶部包含一个<taglib>
指令。例如 -
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
JSTL标签的分类
根据JSTL标签的功能,JSTL标签可以分为以下JSTL标签库组,可以在创建JSP页面中使用 -
- 核心标签
- 格式化标签
- SQL标签
- XML标签
- JSTL函数
1. 核心标签
核心组标签是最常用的JSTL标签。 以下是在JSP中包含JSTL Core库的声明(导入)语法 -
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
下表列出了核心JSTL标签使用示例 -
编号 | 标签 | 描述 |
---|---|---|
1 | <c:out | 类似<%= ...> ,但仅对于表达式使用。 |
2 | <c:set | 在“范围”中设置表达式求值的结果 |
3 | <c:remove | 删除范围变量(从指定的特定范围中)。 |
4 | <c:catch | 捕捉发生在其主体中的任何可抛出对象,并可选地暴露它。 |
5 | <c:if | 简单的条件标签,如果提供的条件为真,则对其主体进行评估。 |
6 | <c:choose | 简单的条件标签,用于建立互斥条件操作的上下文,标记为<when> 和<otherwise> 。 |
7 | <c:when | 如果条件评估为true ,则包含<choose> 的子标签。 |
8 | <c:otherwise | <when> 标签之后的<choose> 子标签,只有当所有先前条件都被评估为false 时才运行。 |
9 | <c:import | 检索绝对或相对URL,并将其内容公开到页面,"var" 中的字符串或"varReader" 中的"Reader" 。 |
10 | <c:forEach | 基本的迭代标签,接受许多不同的集合类型,并支持子集和其他功能。 |
11 | <c:forTokens | 迭代令牌,由指定的分隔符来分隔。 |
12 | <c:param | 将参数添加到包含“import” 标签的URL。 |
13 | <c:redirect | 重定向到新的URL。 |
14 | <c:url | 创建可选查询参数的URL |
2. 格式化标签
JSTL格式化标签用于格式化和显示国际化网站的文本,日期,时间和数字。 以下是在JSP中包含格式化库的语法 -
<%@ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt" %>
下表列出了格式化JSTL标签 -
编号 | 标签 | 描述 |
---|---|---|
1 | <fmt:formatNumber | 以特定精度或格式呈现数值。 |
2 | <fmt:parseNumber | 解析数字,货币或百分比的字符串表示形式。 |
3 | <fmt:formatDate | 使用提供的样式和模式格式化日期和/或时间。 |
4 | <fmt:parseDate | 解析日期和/或时间的字符串表示形式 |
5 | <fmt:bundle | 加载到其标签体中使用资源包。 |
6 | <fmt:setLocale | 在locale配置变量中存储给定的区域设置。 |
7 | <fmt:setBundle | 加载资源包并将其存储在命名作用域变量或包配置变量中。 |
8 | <fmt:timeZone | 指定嵌套在其正文中的任何时间格式化或解析操作的时区。 |
9 | <fmt:setTimeZone | 在时区配置变量中存储给定的时区 |
10 | <fmt:message | 显示国际化消息。 |
11 | <fmt:requestEncoding | 设置请求字符编码 |
3. SQL标签
JSTL SQL标签库提供与关系数据库(RDBMS)进行交互的标记,如:Oracle,MySQL或Microsoft SQL Server。
以下是在JSP中包含JSTL SQL库的语法 -
<%@ taglib prefix = "sql" uri = "http://java.sun.com/jsp/jstl/sql" %>
下表列出了JSTL的SQL标签 -
编号 | 标签 | 描述 |
---|---|---|
1 | <sql:setDataSource | 创建一个仅适用于原型设计的简单DataSource |
2 | <sql:query | 执行在其正文中或通过sql属性定义的SQL查询。 |
3 | <sql:update | 执行在其正文中或通过sql属性来定义SQL更新。 |
4 | <sql:param | 将SQL语句中的参数设置为指定的值。 |
5 | <sql:dateParam | 将SQL语句中的参数设置为指定的java.util.Date 值。 |
6 | <sql:transaction | 提供了一个共享的连接,设置为执行所有语句作为一个事务嵌套数据库动作要素。 |
4. XML标签
JSTL XML标签提供了一种以JSP为中心的创建和操作XML文档的方法。 以下是在JSP中包含JSTL XML库的语法。
JSTL XML标记库具有与XML数据交互的自定义标签。 这包括解析XML,转换XML数据以及基于XPath表达式的流控制。语法如下所示 -
<%@ taglib prefix = "x" uri = "http://java.sun.com/jsp/jstl/xml" %>
在继续执行示例之前,需要将以下两个XML和XPath相关的库复制到<Tomcat安装目录>\lib
中 -
- XercesImpl.jar − 下载地址: http://www.apache.org/dist/xerces/j/
- xalan.jar − 下载地址: http://xml.apache.org/xalan-j/index.html
以下是关于XML的JSTL标签的列表 -
编号 | 标签 | 描述 |
---|---|---|
1 | <x:out | 类似于<%=...> ,但对于XPath表达式。 |
2 | <x:parse | 用于解析通过属性或标签体指定的XML数据。 |
3 | <x:set | 将一个变量设置为XPath表达式的值。 |
4 | <x:if | 评估一个测试XPath表达式,如果结果为true ,它处理其主体。如果测试条件为false ,则主体被忽略。 |
5 | <x:forEach | 循环XML文档中的节点。 |
6 | <x:choose | 简单的条件标签,用于为相互排斥的条件操作建立上下文,由<when> 和<otherwise> 标签标记。 |
7 | <x:when | 如果<select> 的表达式计算为true ,则包含其主体的子标签。 |
8 | <x:otherwise | 只有当所有先前的条件评估为true 时,<choose> 标签才能跟随<when> 标签。 |
9 | <x:transform | 在XML文档上应用XSL转换 |
10 | <x:param | 与变形标签一起使用,以在XSLT样式表中设置参数 |
5. JSTL函数
JSTL包括许多标准函数,其中大部分是常见的字符串操作功能。 以下是在JSP中包含JSTL函数库的语法 -
<%@ taglib prefix = "fn" uri = "http://java.sun.com/jsp/jstl/functions" %>
下表列出了各种JSTL函数 -
编号 | 标签 | 描述 |
---|---|---|
1 | fn:contains() | 测试输入字符串是否包含指定的子字符串。 |
2 | fn:containsIgnoreCase() | 测试输入字符串是否以不区分大小写的方式包含指定的子字符串。 |
3 | fn:escapeXml() | 转义可解释为XML标记的字符。 |
4 | fn:indexOf() | 返回指定子字符串第一次出现在字符串中的索引。 |
5 | fn:endsWith() | 测试输入字符串是否以指定的后缀结尾。 |
6 | fn:join() | 将数组的所有元素连接到字符串中。 |
7 | fn:length() | 返回集合中的项目数,或字符串中的字符数。 |
8 | fn:replace() | 返回一个由输入字符串替换所有出现的字符串所引起的字符串。 |
9 | fn:split() | 将一个字符串拆分成一个子字符串数组 |
10 | fn:startsWith() | 测试输入字符串是否以指定的前缀开头。 |
11 | fn:substring() | 返回字符串的一个子集。 |
12 | fn:substringAfter() | 返回特定子字符串后面的字符串的子集。 |
13 | fn:substringBefore() | 返回字符串在特定子字符串之前的子集。 |
14 | fn:toLowerCase() | 将字符串的所有字符转换为小写。 |
15 | fn:toUpperCase() | 将字符串的所有字符转换为大写。 |
16 | fn:trim() | 从字符串的两端删除空格。 |