JSTL 标准标签库的使用与整理

文前说明

作为码农中的一员,需要不断的学习,我工作之余将一些分析总结和学习笔记写成博客与大家一起交流,也希望采用这种方式记录自己的学习之旅。

本文仅供学习交流使用,侵权必删。
不用于商业目的,转载请注明出处。

JSP 标准标签库(JSTL)是一个 JSP 标签集合,它封装了 JSP 应用的通用核心功能。JSTL 支持通用的、结构化的任务,比如迭代,条件判断。

根据 JSTL 标签所提供的功能,可以分为 5 个类别。

  • 核心标签
  • 格式化标签
  • SQL 标签
  • XML 标签
  • JSTL 函数

JSTL 库安装

  • pom.xml 文件中添加配置。

   org.jboss.spec.javax.servlet.jstl
   jboss-jstl-api_1.2_spec
   ${javax.jstl.api.version}
   provided

  • 也可以从 Apache 的标准标签库中下载的二进包(jakarta-taglibs-standard-current.zip)。
  • 官方下载地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/

核心标签

  • 核心标签是最常用的JSTL标签。
<%@ taglib prefix="c"  uri="http://java.sun.com/jsp/jstl/core" %>
标签 描述
用于在 JSP 中显示数据,就像 <%= ... >
用于保存数据
用于删除数据
用来处理产生错误的异常状况,并且将错误信息储存起来
与我们在一般程序中用的 if 一样
本身只当做 的父标签
的子标签,用来判断条件是否成立
的子标签,接在 标签后,当 标签判断为 false 时被执行
检索一个绝对或相对 URL,然后将其内容暴露给页面
基础迭代标签,接受多种集合类型
根据指定的分隔符来分隔内容并迭代输出
用来给包含或重定向的页面传递参数
重定向至一个新的 URL
使用可选的查询参数来创造一个 URL

标签

  • 标签用来显示一个表达式的结果,与 <%= %> 作用相似,它们的区别就是 标签可以直接通过 "." 操作符来访问属性。
  • 标签会自动忽略 XML 标记字符,所以它们不会被当做标签来处理。

属性 描述 是否必要 默认值
value 要输出的内容
default 输出的默认值 主体中的内容
escapeXml 是否忽略 XML 特殊字符 true

标签

  • 标签用于设置变量值和对象属性。
  • 行为标签效果一致。
  • 标签可以计算表达式的值。

属性 描述 是否必要 默认值
value 要存储的值 主体的内容
target 要修改的属性所属的对象
property 要修改的属性
var 存储信息的变量
scope var 属性的作用域 Page

标签

  • 标签用于移除一个变量,可以指定这个变量的作用域,若未指定,则默认为变量第一次出现的作用域。
  • 可以用来确保 JSP 完成清理工作。

属性 描述 是否必要 默认值
var 要移除的变量名称
scope 变量所属的作用域 所有作用域

标签

  • 标签主要用来处理产生错误的异常状况,并且将错误信息储存起来。

...

属性 描述 是否必要 默认值
var 用来储存错误信息的变量 None

标签

  • 标签判断表达式的值,如果表达式的值为 true 则执行其主体内容。

   ...

属性 描述 是否必要 默认值
test 条件
var 用于存储条件结果的变量
scope var 属性的作用域 page

, , 标签

  • 标签与 Java switch 语句的功能一样,用于在众多选项中做出选择。
  • switch 语句中有 case,而 标签中对应有 ,switch 语句中有 default,而 标签中有
  • 标签和 标签没有属性。

    
        ...
    
    
        ...
    
    ...
    ...
    
        ...
    

c:when 属性 描述 是否必要 默认值
test 条件

标签

  • 标签提供了所有 行为标签所具有的功能,同时也允许包含绝对 URL。

属性 描述 是否必要 默认值
url 待导入资源的 URL,可以是相对路径和绝对路径,并且可以导入其他主机资源
context 当使用相对路径访问外部 context 资源时,context 指定了这个资源的名字。 当前应用程序
charEncoding 所引入的数据的字符编码集 ISO-8859-1
var 用于存储所引入的文本的变量
scope var 属性的作用域 page
varReader 可选的用于提供 java.io.Reader 对象的变量

标签

  • 标签是通用的标签,因为它迭代一个集合中的对象。

    ...
属性 描述 是否必要 默认值
items 要被循环的信息
begin 开始的元素(0=第一个元素,1=第二个元素) 0
end 最后一个元素(0=第一个元素,1=第二个元素) Last element
step 每一次迭代的步长 1
var 代表当前条目的变量名称
varStatus 代表循环状态的变量名称

标签

  • 标签通过指定分隔符将字符串分隔为一个数组然后进行迭代。

属性 描述 是否必要 默认值
items 要被循环的信息
begin 开始的元素(0=第一个元素,1=第二个元素) 0
end 最后一个元素(0=第一个元素,1=第二个元素) Last element
step 每一次迭代的步长 1
var 代表当前条目的变量名称
varStatus 代表循环状态的变量名称
delims 分隔符

标签

  • 标签用于在 标签中指定参数,而且与URL编码相关。
  • 标签内,name 属性表明参数的名称,value 属性表明参数的值。

属性 描述 是否必要 默认值
name URL 中要设置的参数的名称
value 参数的值 Body

标签

  • 标签通过自动重写 URL 来将浏览器重定向至一个新的 URL,它提供内容相关的 URL,并且支持 c:param 标签。

属性 描述 是否必要 默认值
url 目标 URL
context 紧接着一个本地网络应用程序的名称 当前应用程序

标签

  • 标签将 URL 格式化为一个字符串,然后存储在一个变量中。这个标签在需要的时候会自动重写 URL。
  • var 属性用于存储格式化后的 URL。
  • 标签只是用于调用 response.encodeURL() 方法的一种可选的方法。它真正的优势在于提供了合适的 URL编码,包括 中指定的参数。

属性 描述 是否必要 默认值
value 基础 URL
context 本地网络应用程序的名称 当前应用程序
var 代表 URL 的变量名 Print to page
scope var 属性的作用域 Page

格式化标签

  • 格式化标签用来格式化并输出文本、日期、时间、数字。
<%@ taglib prefix="fmt"  uri="http://java.sun.com/jsp/jstl/fmt" %>
标签 描述
使用指定的格式或精度格式化数字
解析一个代表着数字,货币或百分比的字符串
使用指定的风格或模式格式化日期和时间
解析一个代表着日期或时间的字符串
绑定资源
指定地区
绑定资源
指定时区
指定时区
显示资源配置文件信息
设置 request 的字符编码

标签

  • 标签用于格式化数字,百分比,货币。

属性 描述 是否必要 默认值
value 要显示的数字
type NUMBER,CURRENCY,或 PERCENT 类型 Number
pattern 指定一个自定义的格式化模式用与输出
currencyCode 货币码(当 type= "currency" 时) 取决于默认区域
currencySymbol 货币符号 (当 type= "currency" 时) 取决于默认区域
groupingUsed 是否对数字分组 (TRUE 或 FALSE) true
maxIntegerDigits 整型数最大的位数
minIntegerDigits 整型数最小的位数
maxFractionDigits 小数点后最大的位数
minFractionDigits 小数点后最小的位数
var 存储格式化数字的变量 Print to page
scope var 属性的作用域 page
  • pattern 属性
符号 描述
0 代表一位数字
E 使用指数格式
# 代表一位数字,若没有则显示 0,前导 0 和追尾 0 不显示。
. 小数点
, 数字分组分隔符
; 分隔格式
- 使用默认负数前缀
% 百分数
? 千分数
¤ 货币符号,使用实际的货币符号代替
X 指定可以作为前缀或后缀的字符
' 在前缀或后缀中引用特殊字符

标签

  • 标签用来解析数字,百分数,货币。
  • pattern 属性与 标签中的 pattern 有相同的作用。在解析时,pattern 属性告诉解析器期望的格式。

属性 描述 是否必要 默认值
value 要解析的数字 Body
type NUMBER,CURRENCY,或 PERCENT number
parseLocale 解析数字时所用的区域 默认区域
integerOnly 是否只解析整型数(true)或浮点数(false) false
pattern 自定义解析模式
timeZone 要显示的日期的时区 默认时区
var 存储待解析数字的变量 Print to page
scope var 属性的作用域 page

标签

  • 标签用于使用不同的方式格式化日期。

属性 描述 是否必要 默认值
value 要显示的日期
type DATE, TIME, 或 BOTH date
dateStyle FULL, LONG, MEDIUM, SHORT, 或 DEFAULT default
timeStyle FULL, LONG, MEDIUM, SHORT, 或 DEFAULT default
pattern 自定义格式模式
timeZone 显示日期的时区 默认时区
var 存储格式化日期的变量名 显示在页面
scope 存储格式化日志变量的范围 页面
  • 标签格式模式
代码 描述 实例
G 时代标志 AD
y 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示不具有前导零的年份。 2002
M 月份数字。一位数的月份没有前导零。 April & 04
d 月中的某一天。一位数的日期没有前导零。 20
h 12 小时制的小时。一位数的小时数没有前导零。 12
H 24 小时制的小时。一位数的小时数没有前导零。 0
m 分钟。一位数的分钟数没有前导零。 45
s 秒。一位数的秒数没有前导零。 52
S 毫秒 970
E 周几 Tuesday
D 一年中的第几天 180
F 一个月中的第几个周几 2 (一个月中的第二个星期三)
w 一年中的第几周 27
W 一个月中的第几周 2
a a.m./p.m. 指示符 PM
k 小时(12 小时制的小时) 24
K 小时(24 小时制的小时) 0
z 时区 中部标准时间
' 转义文本
'' 单引号

标签

  • 标签用于解析日期。
  • 属性设置为输出的时间格式。

属性 描述 是否必要 默认值
value 要显示的日期
type DATE, TIME, 或 BOTH date
dateStyle FULL, LONG, MEDIUM, SHORT, 或 DEFAULT default
timeStyle FULL, LONG, MEDIUM, SHORT, 或 DEFAULT default
pattern 自定义格式模式
timeZone 显示日期的时区 默认时区
var 存储格式化日期的变量名 显示在页面
scope 存储格式化日志变量的范围 页面

标签

  • 标签将指定的资源束对出现在 标签中的 标签可用。这可以使得省去为每个 标签指定资源束的很多步骤。

属性 描述 是否必要 默认值
basename 指定被载入的资源束的基础名称
prefix 指定 标签 key 属性的前缀

标签

  • 标签用来指定时区,供其它标签使用。

属性 描述 是否必要 默认值
value 时区

标签

  • 标签用来复制一个时区对象至指定的作用域。

属性 描述 是否必要 默认值
value 时区
var 存储新时区的变量名 Replace default
scope 变量的作用域 Page

标签

  • 标签映射一个关键字给局部消息,然后执行参数替换。

属性 描述 是否必要 默认值
key 要检索的消息关键字 Body
bundle 要使用的资源束 默认资源束
var 存储局部消息的变量名 Print to page
scope var属性的作用域 Page

标签

  • 标签用来指定返回给 Web 应用程序的表单编码类型。

属性 描述 是否必要 默认值
key 字符编码集的名称,用于解码 request 参数
  • 使用 标签来指定字符集,用于解码来自表单的数据。在字符集不是ISO-8859-1 时必须使用这个标签。由于大多数浏览器在请求中不包含 Content-Type 头,所以需要这个标签。

  • 标签的目的就是用来指定请求的 Content-Type。必须指定一个Content-Type,就算 response 是通过 Page 指令的 contentType 属性来编码。这是因为response 的实际区域可能与 Page 指令所指定的不同。

  • 如果页面包含 I18N-capable 格式行为用于设置 response 的 locale 属性(通过调用ServletResponse.setLocale() 方法),任何在页面中指定的编码集将会被覆盖。

JSTL 函数

  • JSTL 包含一系列标准函数,大部分是通用的字符串处理函数。
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
函数 描述
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() 移除首位的空白符

fn:contains() 函数

  • 用于确定一个字符串是否包含指定的子串。

...

fn:containsIgnoreCase() 函数

  • 用于确定一个字符串是否包含指定的子串,忽略大小写。

...

fn:endsWith() 函数

  • 用于确定一个字符串是否以指定后缀结尾。

...

fn:escapeXml() 函数

  • 忽略用于 XML 标记的字符。
${fn:escapeXml(<要转义标记的文本>)} 

fn:indexOf() 函数

  • 函数返回一个字符串中指定子串的位置。
${fn:indexOf(<原始字符串>,<子字符串>)}

fn:join() 函数

  • 将一个数组中的所有元素使用指定的分隔符来连接成一个字符串。
${fn:join([数组], <分隔符>)}

fn:length() 函数

  • 函数返回字符串长度或集合中元素的数量。
${fn:length(collection | string)}

fn:replace() 函数

  • 将字符串中所有指定的子串用另外的字符串替换。
${fn:replace(<原始字符串>, <被替换的字符串>, <要替换的字符串>)}

fn:split() 函数

  • 将一个字符串用指定的分隔符分裂为一个子串数组。
${fn:split(<带分隔符的字符串>, <分隔符>)}

fn:startsWith() 函数

  • 用于确定一个字符串是否以指定的前缀开始。

            ...

fn:substring() 函数

  • 函数返回字符串中指定开始和结束索引的子串。
${fn:substring(, , )}

fn:substringAfter() 函数

  • 函数返回字符串中指定子串后面的部分。
${fn:substringAfter(, )}

fn:substringBefore() 函数

  • 函数返回一个字符串中指定子串前面的部分。
${fn:substringBefore(, )}

fn:toLowerCase() 函数

  • 函数将字符串中的所有字符转为小写。
${fn.toLowerCase()}

fn:toUpperCase() 函数

  • 函数将一个字符串中的所有字符转为大写。
${fn.toUpperCase()}

fn:trim() 函数

  • 函数将字符串两端的空白符移除。
${fn.trim()}

SQL 标签

  • JSTL SQL 标签库提供了与关系型数据库(Oracle,MySQL,SQL Server 等等)进行交互的标签。
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
标签 描述
指定数据源
运行 SQL 查询语句
运行 SQL 更新语句
将 SQL 语句中的参数设为指定值
将 SQL 语句中的日期参数设为指定的 java.util.Date 对象值
在共享数据库连接中提供嵌套的数据库行为元素,将所有语句以一个事务的形式来运行

标签

  • 标签用来配置数据源或者将数据源信息存储在某作用域的变量中,用来作为其它 JSTL 数据库操作的数据源。

属性 描述 是否必要 默认值
driver 要注册的 JDBC 驱动
url 数据库连接的 JDBC URL
user 数据库用户名
password 数据库密码
dataSource 事先准备好的数据库
var 代表数据库的变量 默认设置
scope var 属性的作用域 Page

标签

  • 标签用来运行 SQL SELECT 语句,还有就是将结果存储在作用域变量中。

属性 描述 是否必要 默认值
sql 需要执行的 SQL 命令(返回一个 ResultSet 对象) Body
dataSource 所使用的数据库连接(覆盖默认值) 默认数据库
maxRows 存储在变量中的最大结果数 无穷大
startRow 开始记录的结果的行数 0
var 代表数据库的变量 默认设置
scope var 属性的作用域 Page

标签

  • 标签用来执行一个没有返回值的 SQL 语句,比如 SQL INSERT,UPDATE,DELETE 语句。

属性 描述 是否必要 默认值
sql 需要执行的 SQL 命令(不返回 ResultSet 对象) Body
dataSource 所使用的数据库连接(覆盖默认值) 默认数据库
var 用来存储所影响行数的变量
scope var 属性的作用域 Page

标签

  • 标签与 标签和 标签嵌套使用,用来提供一个值占位符。如果是一个 null 值,则将占位符设为 SQL NULL。

属性 描述 是否必要 默认值
value 需要设置的参数值 Body

标签

  • 标签与 标签和 标签嵌套使用,用来提供日期和时间的占位符。如果是一个 null 值,则将占位符设为 SQL NULL。

属性 描述 是否必要 默认值
value 需要设置的日期参数(java.util.Date) Body
type DATE(只有日期),TIME(只有时间), TIMESTAMP(日期和时间) TIMESTAMP

标签

  • 标签用来将 标签和 标签封装至事务中。可以将大量的 操作装入 中,使它们成为单一的事务。
  • 确保对数据库的修改不是被提交就是被回滚。

属性 描述 是否必要 默认值
dataSource 所使用的数据库(覆盖默认值) 默认数据库
isolation 事务隔离等级 (READ_COMMITTED,READ_UNCOMMITTED, REPEATABLE_READ 或 SERIALIZABLE) 数据库默认

XML 标签

  • JSTL XML 标签库提供了创建和操作 XML 文档的标签。
<%@ taglib prefix="x"  uri="http://java.sun.com/jsp/jstl/xml" %>
  • 使用 xml 标签前,需要 XML 和 XPath 的相关包。
  • XercesImpl.jar

    下载地址: http://www.apache.org/dist/xerces/j/

  • xalan.jar

    下载地址: http://xml.apache.org/xalan-j/index.html

标签 描述
与 <%= ... > 类似,不过只用于 XPath 表达式
解析 XML 数据
设置 XPath 表达式
判断 XPath 表达式,若为真,则执行本体中的内容,否则跳过本体
迭代 XML 文档中的节点
的父标签
的子标签,用来进行条件判断
的子标签,当 判断为 false 时被执行
将 XSL 转换应用在 XML 文档中
共同使用,用于设置 XSL 样式表

标签

  • 显示 XPath 表达式的结果,与 <%= %> 功能相似。

属性 描述 是否必要 默认值
select 需要计算的 XPath 表达式,通常使用 XPath 变量
escapeXml 是否忽略 XML 特殊字符 true

标签

  • 标签用来解析属性中或标签主体中的 XML 数据。

属性 描述 是否必要 默认值
var 包含已解析 XML 数据的变量
xml 需要解析的文档的文本内容(String 或 Reader) Body
systemId 系统标识符 URI,用来解析文档
filter 应用于源文档的过滤器
doc 需要解析的 XML 文档 Page
scope var 属性的作用域 Page
varDom 包含已解析 XML 数据的变量 Page
scopeDom varDom 属性的作用域 Page

标签

  • 标签为 XPath 表达式的值设置一个变量。
  • 如果 XPath 表达式的值是 boolean 类型,则 将会设置一个 java.lang.Boolean 对象,若是字符串,则设置一个 java.lang.String 对象,若是数字,则设置一个 java.lang.Number 对象。

属性 描述 是否必要 默认值
var 代表 XPath 表达式值得变量 Body
select 需要计算的 XPath 表达式
scope var 属性的作用域 Page

标签

  • 用于判断一个 XPath 表达式的值,若为真,则执行其主体中的内容,若为假则其主体的内容将会被忽略。
   
   ...

属性 描述 是否必要 默认值
select 需要计算的 XPath 表达式
var 存储条件结果的变量
scope var 属性的作用域 Page

标签

  • 标签用来循环遍历 XML 文档的节点。

属性 描述 是否必要 默认值
select 需要计算的 XPath 表达式
var 用于存储当前项目的变量
begin 迭代器的开始索引
end 迭代器的结束索引
step 迭代的步长
varStatus 代表迭代器所存储的状态的变量

, , 标签

  • 标签与 Java switch 语句有相同的功能。switch 语句有 case 语句,而 标签有 标签。switch 语句有 default 语句,而 标签有 标签。
  • 没有属性。
  • 没有属性。

 
     ...
 
 
     ...
 
     ...
     ...
 
     ...
 

x:when 属性 描述 是否必要 默认值
select 条件

标签

  • 标签在 XML 文档中应用 XSL。

属性 描述 是否必要 默认值
doc 源 XML 文档 Body
docSystemId 源 XML 文档的 URI
xslt XSLT 样式表
xsltSystemId 源 XSLT 文档的 URI
result 接收转换结果的对象 Print to page
var 代表被转换的 XML 文档的变量 Print to page
scope var 属性的作用域

标签

  • 标签与 标签一同使用,用于设置 XSLT 样式表的参数。

属性 描述 是否必要 默认值
name XSLT 参数的名称 Body
value XSLT 参数的值

你可能感兴趣的:(JSTL 标准标签库的使用与整理)