JSP 标准标记库(JSTL)

  • JSTL

    在本章中,我们将了解JSP中的不同标记。JavaServer Pages标准标记库(JSTL)是有用的JSP标记的集合,其中封装了许多JSP应用程序共有的核心功能。JSTL支持常见的结构性任务,例如迭代和条件,用于处理XML文档的标签,国际化标签和SQL标签。它还提供了一个框架,用于将现有的自定义标签与JSTL标签集成在一起。
  • 安装JSTL库

    要开始使用JSP标记,您需要首先安装JSTL库。如果您使用的是Apache Tomcat容器,请遵循以下两个步骤-
    • 步骤1-从Apache Standard Taglib下载二进制发行版并解压缩压缩文件。
    • 步骤2-要使用其Jakarta Taglibs发行版中的Standard Taglib ,只需将发行版“lib”目录中的JAR文件复制到应用程序的webapps\ROOT\WEB-INF\lib目录中。
    要使用任何库,必须在使用该库的每个JSP的顶部包含一个<taglib>指令。
  • JSTL标签的分类

    可以根据其功能将JSTL标记分类为以下JSTL标记库组,这些组可在创建JSP页面时使用-
    • 核心标签
    • 格式化标签
    • SQL标签
    • XML标签
    • JSTL函数
  • 核心标签

    标签的核心组是最常用的JSTL标签。以下是在JSP中包含JSTL Core库的语法-
    
    <%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
    
    下表列出了核心JSTL标签-
    标签 描述
    <c:out> 类似于<%= ...>,但用于表达式。
    <c:set > 在“作用域”中设置表达式求值的结果
    <c:remove > 删除范围变量(如果指定,则从特定范围删除)。
    <c:catch> 捕获其体内发生的任何Throwable并有选择地将其暴露。
    <c:if> 简单的条件标签,如果提供的条件为true,则评估其主体。
    <c:choose> 简单的条件标记,它为互斥的条件操作建立上下文,用<when>和<otherwise>标记。
    <c:when> <choose>的子标签,如果其条件评估为'true',则包括其主体。
    <c:otherwise > 紧随<when>标记的<choose>子标记,并且仅在所有先前条件评估为'false'时运行。
    <c:import> 检索绝对或相对URL,并将其内容公开到页面,“ var”中的String或“ varReader”中的Reader。
    <c:forEach > 基本的迭代标签,接受许多不同的集合类型并支持子集和其他功能。
    <c:forTokens> 遍历令牌,由提供的分隔符分隔。
    <c:param> 向包含“ import”标签的URL添加参数。
    <c:redirect > 重定向到新的URL。
    <c:url> 创建带有可选查询参数的URL。
  • 格式化标签

    JSTL格式标记用于格式化和显示国际化网站的文本,日期,时间和数字。以下是在JSP中包括Formatting库的语法-
    
    <%@ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt" %>
    
    下表列出了格式化JSTL标签-
    标签 描述
    <fmt:formatNumber> 以特定的精度或格式呈现数值。
    <fmt:parseNumber> 解析数字,货币或百分比的字符串表示形式。
    <fmt:formatDate> 使用提供的样式和样式格式化日期和/或时间。
    <fmt:parseDate> 解析日期和/或时间的字符串表示形式。
    <fmt:bundle> 加载要由其标记主体使用的资源束。
    <fmt:setLocale> 将给定的语言环境存储在语言环境配置变量中。
    <fmt:setBundle> 加载资源束并将其存储在命名作用域变量或束配置变量中。
    <fmt:timeZone> 指定嵌套在其主体中的任何时间格式或解析操作的时区。
    <fmt:setTimeZone> 将给定的时区存储在时区配置变量中。
    <fmt:message> 显示国际化消息。
    <fmt:requestEncoding> 设置请求字符编码
  • SQL标签

    JSTL SQL标记库提供用于与关系数据库(RDBMS)(例如Oracle,mySQL或Microsoft SQL Server)进行交互的标记。以下是在JSP中包含JSTL SQL库的语法--
    
    <%@ taglib prefix = "sql" uri = "http://java.sun.com/jsp/jstl/sql" %>
    
    下表列出了SQL JSTL标签-
    标签 描述
    <sql:setDataSource> 创建一个仅适用于原型的简单数据源。
    <sql:query> 执行在其主体中或通过sql属性定义的SQL查询。
    <sql:update> 执行在其主体中或通过sql属性定义的SQL更新。
    <sql:param> 将SQL语句中的参数设置为指定值。
    <sql:dateParam> 将SQL语句中的参数设置为指定的java.util.Date值。
    <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安装目录>\lib中 -
    以下是XML JSTL标签的列表-
    标签 描述
    <x:out> 类似于<%= ...>,但用于XPath表达式。
    <x:parse> 用于解析通过属性或在标记主体中指定的XML数据。
    <x:set > 将变量设置为XPath表达式的值。
    <x:if > 评估测试XPath表达式,如果该表达式为true,则处理其主体。 如果测试条件为假,则忽略主体。
    <x:forEach> 循环遍历XML文档中的节点。
    <x:choose> 简单的条件标签,为互斥条件操作建立上下文,用<when>和<otherwise>标签标记。
    <x:when > <choose>的子标记,如果表达式的表达式评估为'true',则包括其主体。
    <x:otherwise > 紧随<when>标记的<choose>子标记,并且仅在所有先前条件评估为'false'时运行。
    <x:transform > 在XML文档上应用XSL转换。
    <x:param > 与transform标记一起使用,以在XSLT样式表中设置参数。
  • JSTL函数

    JSTL包含许多标准函数,其中大多数是常见的字符串操作函数。以下是在JSP中包含JSTL Functions库的语法-
    
    <%@ taglib prefix = "fn"  uri = "http://java.sun.com/jsp/jstl/functions" %>
    
    下表列出了各种JSTL函数-
    标签 描述
    fn:contains() 测试输入字符串是否包含指定的子字符串。
    fn:containsIgnoreCase() 测试输入字符串是否以不区分大小写的方式包含指定的子字符串。
    fn:endsWith() 测试输入字符串是否以指定的后缀结尾。
    fn:escapeXml() 转义可以解释为XML标记的字符。
    fn:indexOf() 返回带有指定子字符串的第一次出现的字符串的索引。
    fn:join() 将数组的所有元素连接到字符串中。
    fn:length() 返回集合中的项目数或字符串中的字符数。
    fn:replace() 返回一个字符串,该字符串是通过用给定字符串替换所有出现的输入字符串而产生的。
    fn:split() 将字符串拆分为子字符串数组。
    fn:startsWith() 测试输入字符串是否以指定的前缀开头。
    fn:substring() 返回字符串的子集。
    fn:substringAfter() 返回特定子字符串之后的字符串子集。
    fn:substringBefore() 返回特定子字符串之前的字符串子集。
    fn:toLowerCase() 将字符串的所有字符转换为小写。
    fn:toUpperCase() 将字符串的所有字符转换为大写。
    fn:trim() 删除字符串两端的空格。