1 概述
JSTL(JSP Standard Tag Library),JSP标准标签库,可以嵌入在jsp页面中使用标签的形式完成业务逻辑等功能。jstl出现的目的同el一样也是要代替jsp页面中的脚本代码。JSTL标准标签库有5个子库,但随着发展,目前常使用的是他的核心库。
2 应用
2 .1 maven约束
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
3 jstl标签库
3.1 c 标签
3.1.1 导入URL
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
3.1.2 标签使用
- 1.表达式控制标签:out、set、remove、catch
(1) out 标签
<c:out value="value" default="default" escapeXml="false"></c:out>
属性 描述 用法 value 页面显示值 可设置 字符串 或 ${}表达式 default value为null时的默认值 同上;默认值也在设为标签体内容,但不可同时设置 escapeXml 是否采用转转译符 true 不使用转译符,false使用转译符 (2) set 标签
给jsp的范围变量赋值: <c:set value="value" var="变量名" scope="session"></c:set> 给javabean变量赋值: <c:set value="value" target="${javabean}" property="property"></c:set>
属性 描述 用法 value javabean或jsp范围设置的值 可设置 字符串 或 ${}表达式,等同于设置标签体内容 var 变量名,jsp范围,key值 可设置 字符串 或 ${}表达式 scope jsp范围 page | request | session | application target javabean ${}表达式 property javabean字段 (3) remove 标签
<c:remove var="变量名" scope="session"></c:remove>
属性 描述 用法 var 变量名,jsp范围,key值 可设置 字符串 或 ${}表达式 scope jsp范围 page | request | session | application (4) catch 标签
<c:catch var="name" >容易产生异常的代码</c:catch>
属性 描述 用法 var 储存异常信息变量名 ${name} 输出异常信息
- 2.流程控制标签:if、choose、when、otherwise
(1) if 标签
<c:if test="表达式" var="name" scope="session">表达式为true展示代码</c:if>
属性 描述 用法 test(必) 布尔表达式 结果为true|false的表达式 var 储存 test表达式结果 变量名 值为true|false,通过${name}获取 scope jsp范围 page | request | session | application (2) choose、when、otherwise 标签
<c:choose>
<c:when test="表达式1">满足 表达式1 的代码</c:when>
<c:when test="表达式2">满足 表达式2 的代码 </c:when>
<c:otherwise>以上表达式都不满足的代码</c:otherwise>
</c:choose>
属性 描述 用法 test(必) 布尔表达式 结果为true|false的表达式
- 3.循环标签:forEach、forTokens
(1) forEach 标签
<c:forEach var="name" items="${list}" varStatus="statusName" begin="begin" end="end" step="step"> 循环展示的代码 </c:forEach>
属性 描述 用法 var 储存 单个遍历结果 的 变量名 可用${name}获取并在 在forEach 标签体中进行输出 items 要遍历的集合,数组 用${list}获取session中数组,集合 varStatus 当前遍历状态名 ${statusName.index} 当前数据索引,0开头
${statusName.count} 总共迭代数,1开头
${statusName.frist} 是否是
${statusName.last} 是否是最后一个begin 指定循环的起始索引 一般使用 begin end step var varStatus 或 var items end 指定循环的结束索引 一般使用 begin end step var varStatus 或 var items step 指定步长 渐变值 一般使用 begin end step var varStatus 或 var items 两种遍历单列集合,数组方式:
<c:forEach begin="0" end="${list.size()-1}" var="i">${list[i].name}</c:forEach>
<c:forEach items="${list}" var="obj">${obj.name}</c:forEach>map集合遍历:
<c:forEach var="item" items="${map}">key值:${item.key } value值:${item.value }</c:forEach>
(2) forTokens 标签
<c:forTokens items="strings" delims="d" var="name" begin="begin" end="end" step="len" varStatus="statusName">
循环展示的代码
</c:forTokens>
属性 描述 用法 var 储存 单个遍历结果 的 变量名 可用${name}获取并在 在forTokens 标签体中进行输出 items 需要截取遍历的字符串 用${strings}获取session中字符串 delims(必) 分割符 varStatus 当前遍历状态名 ${statusName.index} 当前数据索引,0开头
${statusName.count} 总共迭代数,1开头
${statusName.frist} 是否是
${statusName.last} 是否是最后一个begin 指定循环的起始索引 一般使用 begin end step var varStatus 或 var items end 指定循环的结束索引 一般使用 begin end step var varStatus 或 var items step 指定步长 渐变值 一般使用 begin end step var varStatus 或 var items
- 4.URL操作标签:import、url、redirect
(1) import 标签
<c:import url="url" var="var" scope="scope" context="context" charEncoding="charEncoding"/>
属性 描述 用法 url(必) 待导入资源的URL 可以是相对路径和绝对路径 context 资源的名字。 当使用相对路径访问外部context资源时,指定资源名字。 charEncoding 所引入的数据的字符编码集 var 用于存储所引入的文本的变量 scope var属性的作用域 varReader 可选的用于提供java.io.Reader对象变量 (2) url 标签
<c:url var="var" value="value" context="context"/>
属性 描述 用法 value(必) 基础URL context 本地网络应用程序的名称 var 代表URL的变量名 scope var属性的作用域 (3) redirect 标签
<c:redirect url="url" context="context"/>
属性 描述 用法 url(必) 目标URL context 紧接着一个本地网络应用程序的名称 (4) param 标签
<c:param name="name1" value="value1">
为 redirect url 标签添加参数
属性 描述 用法 name(必) 参数name value(必) 参数value
3.2 fmt 标签
3.2.1 导入URL
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
3.2.2 标签的使用
(1) <frm:formatNumber/> 数字格式化
属性 描述 其他 value(必) 要格式化的数据 同标签体 内容 type 指定类型(单位、货币、百分比等)
number 数字格式
currency 当地货币
percent 百分比格式pattern 格式化的数据样式 ###.##
000:00
#.###E0currencyCode 货币单位代码 cuttencySymbol 货币符号
($、¥) groupingUsed 是否对整数部分进行分组
如(9,999) true|false maxIntergerDigits 整数部分最对显示多少位数
minIntergerDigits 整数部分最少显示多少位 maxFractionDigits 小数部分最多显示多少位 minFractionDigits 小数部分最少显示多少位 var 存储格式化后的数据 scope var的JSP范围
(2) <frm:parseNumber/> 格式化的数字转数字
属性 描述 其他 value(必) 被解析的字符串 同标签体 内容 type 指定单位
number 数字格式
currency 当地货币
percent 百分比格式pattern 格式样式 parseLocale 用来替代默认区域的设定 var 存储格式化后的数据 scope var的JSP范围
(3) <fmt:formatDate/> 日期格式化
属性 描述 其他 value(必) 将要格式化的日期对象 同标签体 内容 type 显示的部分
time 只显示时间
date 只显示时期
both 显示日期和时间pattern 格式化的样式 dateStyle 设定日期的显示方式 timeStyle 设定时间的显示方式 timeZone 设定使用的时区 var 存储已格式化的日期或时间 scope 指定var存储的JSP范围。
(4) <fmt:formatDate/> 字符串类型的时间或日期转化为时间或日期对象
属性 描述 其他 value(必) 将要格式化的日期时间 同标签体 内容 type 显示的部分
time 只显示时间
date 只显示时期
both 显示日期和时间pattern 字符串使用的时间样式
dateStyle 字符串使用的日期显示方式 timeStyle 字符串使用的时间显示格式 timeZone 设定使用的时区 var 存储已格式化的日期或时间 scope 指定var存储的JSP范围。
parseLocale 取代默认地区设定 (5) <fmt:setTimeZone/> 设定默认时区或者将时区存储在指定的JSP范围内。
属性 描述 其他 value(必) 使用的时区 同标签体 内容 var 使用var定义的参数名保存值
scope 存储var的JSP范围
(6) <fmt:timeZone> 主要用于设置标签体内使用的时区。
属性 描述 其他 value(必) 使用的时区 同标签体 内容 var 使用var定义的参数名保存值
scope 存储var的JSP范围
(7) <fmt:bundle> 主要用于将资源文件绑定于它的标签体中的显示。
属性 描述 其他 basename(必) 指定使用的资源文件的名称 prefix 前置关键字 (8) <fmt:setBundle> 主要用于绑定资源文件或者把资源文件保存在指定的JSP范围内。
属性 描述 其他 basename(必) 指定使用的资源文件的名称 var 指定将资源文件保存的名称 scope 设定将资源文件保存的JSP范围
(9) <fmt:message> 主要负责读取本地资源文件
属性 描述 其他 key(必) 指定键值的名称(索引)
bundle 指定消息文本的来源 LocalizationContext var 指定存储键值的变量名 scope 设定将资源文件保存的JSP范围
(10) <fmt:param> 主要用于当<fmt:message>中资源文件中获得键值时,动态的为资源文件中的变量赋值。
(11) <fmt:setLocale/> 用来设定用户语言区域。
属性 描述 其他 value(必) 指定区域代码
Locale variant 操作系统的类型 scope 设定时区的作用范围 (12) <fmt:requestEncoding> 用于设定请求的编码格式
属性 描述 其他 value 编码集 例如:gbk、gb2312等
3.3 fn 标签
3.3.1 导入URL
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions " prefix="fn"%>
3.3.2 常用函数
函数名 | 函数说明 | 使用举例 |
fn:contains | 判断字符串是否包含另外一个字符串 | ${fn:contains(name, searchString)} |
fn:containsIgnoreCase | 判断字符串是否包含另外一个字符串(大小写无关) | ${fn:containsIgnoreCase(name, searchString)} |
fn:endsWith | 判断字符串是否以另外字符串结束 | ${fn:endsWith(filename, '.txt')} |
fn:escapeXml | 把一些字符转成XML表示,例如<字符应该转为< | ${fn:escapeXml(param:info)} |
fn:indexOf | 子字符串在母字符串中出现的位置 | ${fn:indexOf(name, '-')} |
fn:join | 将数组中的数据联合成一个新字符串,并使用指定字符格开 | ${fn:join(array, ';')} |
fn:length | 获取字符串的长度,或者数组的大小 | ${fn:length(list)} |
fn:replace | 替换字符串中指定的字符 | ${fn:replace(text, '-','•')} |
fn:split | 把字符串按照指定字符切分 | ${fn:split(customerNames, ';')} |
fn:startsWith | 判断字符串是否以某个子串开始 | ${fn:startsWith(product.id, '100-')} |
fn:substring | 获取子串 | ${fn:substring(zip, 6, -1)} |
fn:substringAfter | 获取从某个字符所在位置开始的子串 | ${fn:substringAfter(zip, '-')} |
fn:substringBefore | 获取从开始到某个字符所在位置的子串 | ${fn:substringBefore(zip, '-')} |
fn:toLowerCase | 转为小写 | ${fn.toLowerCase(name)} |
fn:toUpperCase | 转为大写字符 | ${fn.UpperCase(name)} |
fn:trim | 去除字符串前后的空格 | ${fn.trim(name)} |
3.4 sql 标签
3.4.1 导入URL
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
3.4.2 使用
(1) <sql:setDataSource> 用来配置数据源或者将数据源信息存储在某作用域的变量中,用来作为其它JSTL数据库操作的数据源。
属性 描述 是否必要 默认值 driver 要注册的JDBC驱动 否 无 url 数据库连接的JDBC URL 否 无 user 数据库用户名 否 无 password 数据库密码 否 无 dataSource 事先准备好的数据库 否 无 var 代表数据库的变量 否 默认设置 scope var属性的作用域 否 Page (2) <sql:query> 用来运行SQL SELECT语句
属性 描述 是否必要 默认值 sql 需要执行的SQL命令(返回一个ResultSet对象) 否 标签体 dataSource 所使用的数据库连接(覆盖默认值) 否 默认数据库 maxRows 存储在变量中的最大结果数 否 无穷大 startRow 开始记录的结果的行数 否 0 var 代表数据库的变量 否 默认设置 scope var属性的作用域 否 Page (3) <sql:update> 标签用来执行一个没有返回值的SQL语句 ,增 删 改
属性 描述 是否必要 默认值 sql 需要执行的SQL命令(不返回ResultSet对象) 否 标签体 dataSource 所使用的数据库连接(覆盖默认值) 否 默认数据库 var 用来存储所影响行数的变量 否 无 scope var属性的作用域 否 Page (4) <sql:param> 用来提供一个值占位符
属性 描述 是否必要 默认值 value 需要设置的参数值 否 标签体 (5) <sql:dateParam> 用来提供日期和时间的占位符。
属性 描述 是否必要 默认值 value 需要设置的日期参数(java.util.Date) 否 Body type DATE (只有日期),TIME(只有时间), TIMESTAMP (日期和时间) 否 TIMESTAMP (6) <sql:transaction> 可以将大量的<sql:query>和<sql:update>操作装入<sql:transaction>中,使它们成为单一的事务。
属性 描述 是否必要 默认值 dataSource 所使用的数据库(覆盖默认值) 否 默认数据库 isolation 事务隔离等级
(READ_COMMITTED,READ_UNCOMMITTED, REPEATABLE_READ, SERIALIZABLE)否 数据库默认
3.5 x 标签
3.5.1 导入URL
<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x"%>
3.5.2 使用
(1) <x:out> 标签显示XPath表达式的结果,与<%= %>功能相似。
属性 描述 是否必要 默认值 select 需要计算的XPath表达式,通常使用XPath 变量 是 无 escapeXml 是否忽略XML 特殊字符 否 true (2) <x:parse>标签用来解析属性中或标签主体中的XML数据。
属性 描述 是否必要 默认值 var 包含已解析XML数据的变量 否 无 xml 需要解析的文档的文本内容(String或Reader) 否 Body systemId 系统标识符URI,用来解析文档 否 无 filter 应用于源文档的过滤器 否 无 doc 需要解析的XML文档 否 Page scope var属性的作用域 否 Page varDom 包含已解析XML数据的变量 否 Page scopeDom varDom属性的作用域 否 Page (3) <x:set> 标签为XPath表达式的值设置一个变量。
属性 描述 是否必要 默认值 var 代表XPath表达式值得变量 是 Body select 需要计算的XPath表达式 否 无 scope var属性的作用域 否 Page (4) <x:if>标签用于判断一个XPath表达式的值,若为真,则执行其主体中的内容,若为假则其主体的内容将会被忽略。
属性 描述 是否必要 默认值 select 需要计算的XPath表达式 是 无 var 存储条件结果的变量 否 无 scope var属性的作用域 否 Page (5) <x:forEach>标签用来循环遍历XML文档的节点。
属性 描述 是否必要 默认值 select 需要计算的XPath表达式 是 无 var 用于存储当前项目的变量 否 无 begin 迭代器的开始索引 否 无 end 迭代器的结束索引 否 无 step 迭代的步长 否 无 varStatus 代表迭代器所存储的状态的变量 否 无 (6) <x:choose>, <x:when>, <x:otherwise> 多判断标签
<x:choose> <x:when select="<string>"> ... </x:when> ... <x:otherwise> ... </x:otherwise> </x:choose>
属性 描述 是否必要 默认值 select 条件 是 无 (7) <x:transform>标签在XML文档中应用XSL。
属性 描述 是否必要 默认值 doc 源XML文档 否 Body docSystemId 源XML文档的URI 否 无 xslt XSLT 样式表 是 无 xsltSystemId 源XSLT文档的URI 否 无 result 接收转换结果的对象 否 Print to page var 代表被转换的XML文档的变量 否 Print to page scope var属性的作用域 否 无 (8) <x:param>标签与<x:transform>标签一同使用,用于设置XSLT样式表的参数。
属性 描述 是否必要 默认值 name XSLT参数的名称 是 Body value XSLT参数的值 否 无