JSP - 标准标记库( Standard Tag Library)
在本章中,我们将了解JSP中的不同标记。 JavaServer Pages标准标记库(JSTL)是有用的JSP标记的集合,它封装了许多JSP应用程序通用的核心功能。
JSTL支持常见的结构任务,例如迭代和条件,用于操作XML文档的标记,国际化标记和SQL标记。 它还提供了一个框架,用于将现有自定义标记与JSTL标记集成。
安装JSTL库
要开始使用JSP tages,首先需要安装JSTL库。 如果您使用的是Apache Tomcat容器,请按照以下两个步骤进行操作 -
Step 1 - 从Apache Standard Taglib下载二进制发行版并解压缩压缩文件。
Step 2 - 要从其Jakarta Taglibs distribution使用标准Taglib,只需将发行版'lib'目录中的JAR文件复制到应用程序的webapps\ROOT\WEB-INF\lib目录中。
要使用任何库,必须在使用该库的每个JSP的顶部包含
JSTL标签的分类
JSTL标记可以根据其功能分类到以下可在创建JSP页面时使用的JSTL标记库组中 -
Core Tags
Formatting tags
SQL tags
XML tags
JSTL Functions
核心标签
核心标签组是最常用的JSTL标签。 以下是在JSP中包含JSTL核心库的语法 -
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
下表列出了核心JSTL标签 -
S.No. | 标签和说明 |
---|---|
1 | <c:out> 像,但对于表达式。 |
2 | <c:设置> 在'scope'设置表达式求值的结果 |
3 | <c:删除> 删除scoped variable (来自特定范围,如果指定)。 |
4 | <c:catch> 捕获其体内发生的任何Throwable并可选择暴露它。 |
5 | <c:if> 简单条件标记,如果提供的条件为真,则评估其正文。 |
6 | <c:choose> 简单条件标记,用于为互斥条件操作建立上下文,标记为《when》和《otherwise》 。 |
7 | <c:when> 如果条件评估为'true' ,则《choose》标签包括其正文。 |
8 | <c:否则> 《choose》标签位于《when》标签之后,仅在所有先前条件评估为'false' 。 |
9 | <c:import> 检索绝对或相对URL,并将其内容公开给页面, 'var'的String或'varReader'的Reader。 |
10 | <c:forEach> 基本迭代标记,接受许多不同的集合类型并支持子集和其他功能。 |
11 | <c:forTokens> 迭代令牌,由提供的分隔符分隔。 |
12 | <c:param> 将参数添加到包含'import'标记的URL。 |
13 | <c:重定向> 重定向到新的URL。 |
14 | <c:url> 使用可选的查询参数创建URL |
格式化标签
JSTL格式标签用于格式化和显示国际化网站的文本,日期,时间和数字。 以下是在JSP中包含格式化库的语法 -
<%@ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt" %>
下表列出了格式化JSTL标签 -
S.No. | 标签和说明 |
---|---|
1 | <fmt:formatNumber> 以特定精度或格式呈现数值。 |
2 | <fmt:parseNumber> 解析数字,货币或百分比的字符串表示形式。 |
3 | <fmt:formatDate> 使用提供的样式和模式格式化日期和/或时间。 |
4 | <fmt:parseDate> 解析日期和/或时间的字符串表示 |
5 | <fmt:bundle> 加载要由其标记主体使用的资源包。 |
6 | <fmt:setLocale> 将给定的语言环境存储在语言环境配置变量中。 |
7 | <fmt:setBundle> 加载资源包并将其存储在指定的范围变量或包配置变量中。 |
8 | <fmt:timeZone> 指定嵌套在其正文中的任何时间格式化或解析操作的时区。 |
9 | <fmt:setTimeZone> 在时区配置变量中存储给定时区 |
10 | <fmt:message> 显示国际化消息。 |
11 | <fmt:requestEncoding> 设置请求字符编码 |
SQL Tags
JSTL SQL标记库提供用于与关系数据库(RDBMS)(如Oracle, mySQL或Microsoft SQL Server )交互的标记。
以下是在JSP中包含JSTL SQL库的语法 -
<%@ taglib prefix = "sql" uri = "http://java.sun.com/jsp/jstl/sql" %>
下表列出了SQL JSTL标签 -
S.No. | 标签和说明 |
---|---|
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> 提供具有共享Connection的嵌套数据库操作元素,设置为将所有语句作为一个事务执行。 |
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 Installation Directory》\lib -
XercesImpl.jar - 从https://www.apache.org/dist/xerces/j/下载
xalan.jar - 从https://xml.apache.org/xalan-j/index.html下载
以下是XML JSTL标签列表 -
S.No. | 标签和说明 |
---|---|
1 | <x:out> 像,但对于XPath表达式。 |
2 | <x:parse> 用于解析通过属性或标记正文中指定的XML数据。 |
3 | <x:set> 将变量设置为XPath表达式的值。 |
4 | <x:if> 计算测试XPath表达式,如果为true,则处理其正文。 如果测试条件为假,则忽略正文。 |
5 | <x:forEach> 循环遍历XML文档中的节点。 |
6 | <x:choose> 简单条件标记,用于为互斥条件操作建立上下文,标记为《when》和《otherwise》标记。 |
7 | <x:when> 《choose》标签,如果其表达式评估为《choose》 ,则包括其正文。 |
8 | <x:否则> 《choose》标签位于《when》标签之后,仅在所有先前条件评估为“false”时运行。 |
9 | <x:transform> 在XML文档上应用XSL转换 |
10 | <x:param> 与transform标记一起使用以在XSLT样式表中设置参数 |
JSTL 函数
JSTL包含许多标准函数,其中大多数是常见的字符串操作函数。 以下是在JSP中包含JSTL函数库的语法 -
<%@ taglib prefix = "fn"
uri = "http://java.sun.com/jsp/jstl/functions" %>
下表列出了各种JSTL函数 -
S.No. | 功能说明 |
---|---|
1 | fn:contains() 测试输入字符串是否包含指定的子字符串。 |
2 | fn:containsIgnoreCase() 测试输入字符串是否以不区分大小写的方式包含指定的子字符串。 |
3 | fn:endsWith() 测试输入字符串是否以指定的后缀结尾。 |
4 | fn:escapeXml() 转义可以解释为XML标记的字符。 |
5 | fn:indexOf() 返回带有第一次出现的指定子字符串的字符串的索引。 |
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() 从字符串的两端删除空格。 |