jsp标准标签库(jstl)是一个JSP标签集合,它封装了jsp应用的通用核心功能。
JSTL支持通用的、格式化的任务。比如:迭代、条件判断、XML文档操作、国际化标签、SQL标签。除了这些它还提供了一个框架来使用集成JSTL的自定义标签。
根据JSTL标签所提供的功能,可以将其分为5个类别:
使用任何库,你必须在每个JSP文件中的头部包含
核心标签是最常用的JSTL标签。引用核心标签库的语法:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
标签 | 描述 |
---|---|
|
用于在JSP中显示数据,就像<%= … > |
|
用于保存数据 |
|
用于删除数据 |
|
用来处理产生错误的异常状况,并且将错误信息储存起来 |
|
与我们在一般程序中用的if一样 |
|
本身只当做 和 的父标签 |
|
的子标签,用来判断条件是否成立 |
|
的子标签,接在 标签后,当 标签判断为false时被执行 |
|
检索一个绝对或相对 URL,然后将其内容暴露给页面 |
|
基础迭代标签,接受多种集合类型 |
|
根据指定的分隔符来分隔内容并迭代输出 |
|
用来给包含或重定向的页面传递参数 |
|
重定向至一个新的URL |
|
使用可选的查询参数来创造一个URL |
标签用来显示一个表达式的结果,与<%= %>作用相似,它们的区别就是标签可以直接通过"."操作符来访问属性。
语法格式:
out value="" default="" escapeXml="" />
属性
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
value | 要输出的内容 | 是 | 无 |
default | 输出的默认值 | 否 | 主体中的内容 |
escapeXml | 是否忽略XML特殊字符 | 否 | true |
标签标签用于设置变量值和对象属性.
语法格式:
set var="" value="" target="" property="" scope="" />
属性
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
value | 要存储的内容 | 否 | 主体中的内容 |
target | 要修改的属性所属的对象 | 否 | 无 |
property | 要修改的属性 | 否 | 无 |
var | 存储数据的变量 | 否 | 无 |
scope | var属性的作用域 | 否 | Page |
标签用于移除一个变量,可以指定这个变量的作用域,若未指定,则默认为变量第一次出现的作用域。
语法格式:
var="" scope="" />
属性
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
var | 要移除的变量名称 | 是 | 无 |
scope | var属性的作用域 | 否 | 所有作用域 |
标签主要用来处理产生错误的异常状况,并且将错误信息储存起来。
语法格式:
""> ...
属性
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
var | 用来储存错误信息的变量 | 否 | None |
标签判断表达式的值,如果表达式的值为 true 则执行其主体内容。
语法格式:
if test="" var="" scope="" > ... if>
属性
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
test | 条件 | 是 | 无 |
var | 用于存储条件结果的变量 | 否 | 无 |
scope | var属性的作用域 | 否 | Page |
标签与Java switch语句的功能一样,用于在众多选项中做出选择。
switch语句中有case,而标签中对应有,switch语句中有default,而标签中有。
语法格式:
""/>
...
""/>
...
...
...
...
属性
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
test | 条件 | 是 | 无 |
标签提供了所有行为标签所具有的功能,同时也允许包含绝对URL.
语法格式:
import
url=""
var=""
scope=""
varRender=""
context=""
charEncoding="" />
属性
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
url | 待导入资源的URL,可以是相对路径和绝对路径,并且可以导入其他主机资源 | 是 | 无 |
context | 当使用相对路径访问外部context资源时,context指定了这个资源的名字。 | 否 | 当前应用程序 |
charEncoding | 所引入的数据的字符编码集 | 否 | ISO-8859-1 |
var | 用于存储所引入的文本的变量 | 否 | 无 |
scope | var属性的作用域 | 否 | Page |
varReader | 可选的用于提供java.io.Reader对象的变量 | 否 | 无 |
这些标签封装了Java中的for,while,do-while循环。
相比而言,标签是更加通用的标签,因为它迭代一个集合中的对象。
标签通过指定分隔符将字符串分隔为一个数组然后迭代它们。
语法格式:
Each
items="
begin=""
end=""
step=""
var=""
varStatus="" >
Tokens
items=""
delims=""
begin=""
end=""
step=""
var=""
varStatus="" >
属性
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
items | 要被循环的信息 | 是 | 无 |
begin | 开始的元素(0=第一个元素,1=第二个元素) | 否 | 0 |
end | 最后一个元素(0=第一个元素,1=第二个元素) | 否 | Last element |
step | 每一次迭代的步长 | 否 | 1 |
var | 代表当前条目的变量名称 | 否 | 无 |
varStatus | 代表循环状态的变量名称 | 否 | 无 |
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
delims | 分隔符 | 是 | 无 |
标签用于在标签中指定参数,而且与URL编码相关。
在标签内,name属性表明参数的名称,value属性表明参数的值。
语法格式:
param name="" value="" />
属性
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
name | URL中要设置的参数的名称 | 是 | 无 |
value | 参数的值 | 否 | Body |
标签通过自动重写URL来将浏览器重定向至一个新的URL,它提供内容相关的URL,并且支持c:param标签。
语法格式:
<c:redirect url="" context="" />
属性
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
url | 目标URL | 是 | 无 |
context | 紧接着一个本地网络应用程序的名称 | 否 | 当前应用程序 |
标签将URL格式化为一个字符串,然后存储在一个变量中。
标签只是用于调用response.encodeURL()方法的一种可选的方法。它真正的优势在于提供了合适的URL编码,包括中指定的参数。
语法格式:
var=""
scope=""
value=""
context="" />
属性
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
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=""
pattern=""
currencyCode=""
currencySymbol=""
groupingUsed=""
maxIntegerDigits=""
minIntegerDigits=""
maxFractionDigits=""
minFractionDigits=""
var=""
scope="" />
属性
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
value | 要显示的数字 | 是 | 无 |
type | NUMBER,CURRENCY,或 PERCENT类型 | 否 | Number |
pattern | 指定一个自定义的格式化模式用与输出 | 否 | 无 |
currencyCode | 货币码(当type=”currency”时) | 否 | 取决于默认区域 |
currencySymbol | 货币符号(当type=”currency”时) | 否 | 取决于默认区域 |
groupingUsed | 是否对数字分组 (TRUE 或 FALSE) | 否 | true |
maxIntegerDigits | 整型数最大的位数 | 否 | Print to page |
minIntegerDigits | 整型数最小的位数 | 否 | Page |
maxFractionDigits | 小数点后最大的位数 | 否 | 无 |
minFractionDigits | 小数点后最小的位数 | 否 | 当前应用程序 |
var | 存储格式化数字的变量 | 否 | Print to page |
scope | var属性的作用域 | 否 | Page |
pattern属性
符号 | 描述 |
---|---|
0 | 代表一位数字 |
E | 使用指数格式 |
# | 代表一位数字,若没有则显示0 |
. | 小数点 |
, | 数字分组分隔符 |
; | 分隔格式 |
- | 使用默认负数前缀 |
% | 百分数 |
? | 千分数 |
X | 指定可以作为前缀或后缀的字符 |
‘ | 在前缀或后缀中引用特殊字符 |
标签用来解析数字,百分数,货币。
语法格式:
value=""
type=""
pattern=""
parseLocale=""
integerOnly=""
var=""
scope="" />
属性
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
value | 要显示的数字 | 是 | 无 |
type | NUMBER,CURRENCY,或 PERCENT类型 | 否 | Number |
parseLocale | 解析数字时所用的区域 | 否 | 默认区域 |
integerOnly | 是否只解析整型数(true)或浮点数(false) | 否 | false |
pattern | 自定义解析模式(同formatNumber中的使用) | 否 | 无 |
var | 存储格式化数字的变量 | 否 | Print to page |
scope | var属性的作用域 | 否 | Page |
标签用于使用不同的方式格式化日期。
语法格式:
value=""
type=""
dateStyle=""
timeStyle=""
pattern=""
timeZone=""
var=""
scope="" />
属性
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
value | 要显示的数字 | 是 | 无 |
type | DATE, TIME, 或 BOTH | 否 | date |
dateStyle | FULL, LONG, MEDIUM, SHORT, 或 DEFAULT | 否 | default |
timeStyle | FULL, LONG, MEDIUM, SHORT, 或 DEFAULT | 否 | default |
pattern | 指定一个自定义的格式化模式用与输出 | 否 | 无 |
timeZone | 显示日期的时区 | 否 | 默认时区 |
var | 存储格式化日期的变量名 | 否 | Print to page |
scope | var属性的作用域 | 否 | Page |
日期格式
符号 | 描述 | 实例 |
---|---|---|
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 | 一年中的第几天 | 189 |
F | 一个月中的第几个周几 | 2 (一个月中的第二个星期三) |
w | 一年中的第几周 | 27 |
W | 一个月中的第几周 | 2 |
a | a.m./p.m. 指示符 | PM |
k | 小时(12 小时制的小时) | 24 |
K | 小时(24 小时制的小时) | 0 |
z | 时区 | 中部标准时间 |
‘ | 转义文本 | |
“ | 单引号 |
标签用于解析日期。
语法格式:
value=""
type=""
dateStyle=""
timeStyle=""
pattern=""
timeZone=""
parseLocale=""
var=""
scope="" />
属性
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
value | 要显示的数字 | 是 | 无 |
type | DATE, TIME, 或 BOTH | 否 | date |
dateStyle | FULL, LONG, MEDIUM, SHORT, 或 DEFAULT | 否 | default |
timeStyle | FULL, LONG, MEDIUM, SHORT, 或 DEFAULT | 否 | default |
pattern | 指定一个自定义的格式化模式用与输出 | 否 | 无 |
timeZone | 显示日期的时区 | 否 | 默认时区 |
var | 存储格式化日期的变量名 | 否 | Print to page |
scope | var属性的作用域 | 否 | Page |
标签用来将给定的区域存储在locale配置变量中。
语法格式:
setLocale value="" variant="" scope="" />
属性
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
value | 指定ISO-639 语言码和ISO-3166 国家码 | ||
variant | 特定浏览器变体 | 否 | 无 |
scope | Locale配置变量的作用域 | 否 | Page |
JSTL SQL标签库提供了与关系型数据库(Oracle、mysql、sqlserver等等)进行交互的标签。引用SQL标签的语法:
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
标签 | 描述 |
---|---|
|
指定数据源 |
|
运行SQL查询语句 |
|
运行SQL更新语句 |
|
将SQL语句中的参数设为指定值 |
|
将SQL语句中的日期参数设为指定的java.util.Date 对象值 |
|
在共享数据库连接中提供嵌套的数据库行为元素,将所有语句以一个事务的形式来运行 |
用的较少不做详细讲解
JSTL XML标签库提供了创建和操作XML文件的标签。引用XML标签的语法:
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
标签 | 描述 |
---|---|
|
与<%= … >,类似,不过只用于XPath表达式 |
|
解析 XML 数据 |
|
设置XPath表达式 |
|
判断XPath表达式,若为真,则执行本体中的内容,否则跳过本体 |
|
迭代XML文档中的节点 |
|
本身只当做 和 的父标签 |
|
的子标签,用来判断条件是否成立 |
|
的子标签,接在 标签后,当 标签判断为false时被执行 |
用的较少不做详细讲解
JSTL包含一系列函数,大部分是通用的字符串处理函数。引用JSTL函数的语法:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
标签 | 描述 | 示例 |
---|---|---|
|
测试输入的字符串是否包含指定的子串 | |
|
测试输入的字符串是否包含指定的子串,大小写不敏感 | 同上 |
|
测试输入的字符串是否以指定的后缀结尾 | |
|
跳过可以作为XML标记的字符 | ${fn:escapeXml(<要转义标记的文本>)} |
|
返回指定字符串在输入字符串中出现的位置 | ${fn:indexOf(<原始字符串>,<子字符串>)} |
|
将数组中的元素合成一个字符串然后输出 | ${fn:join([数组], <分隔符>)} |
|
返回字符串长度 | ${fn:length(collection |
|
将输入字符串中指定的位置替换为指定的字符串然后返回 | ${fn:replace(<原始字符串>, <被替换的字符串>, <要替换的字符串>)} |
|
将字符串用指定的分隔符分隔然后组成一个子字符串数组并返回 | ${fn:split(<带分隔符的字符串>, <分隔符>)} |
|
测试输入字符串是否以指定的前缀开始 | 同fn:endsWith() |
|
返回字符串的子集 | ${fn:substring( |
|
返回字符串在指定子串之后的子集 | ${fn:substringAfter( |
|
返回字符串在指定子串之前的子集 | ${fn:substringBefore( |
|
将字符串中的字符转为小写 | ${fn.toLowerCase( |
|
将字符串中的字符转为大写 | ${fn.toUpperCase( |
|
移除首位的空白符 | ${fn.trim( |
自定义标签是用户自定义的jsp语言元素。当jsp包含一个自定义的标签时将被转为servlet。标签转化为对被 称为tag handler的对象的操作,即当servlet执行时Web container调用那些操作。
JSP标签扩展可以让你创建新的标签并且可以直接插入到一个JSP页面。 JSP 2.0规范中引入Simple Tag Handlers来编写这些自定义标记。
你可以继承SimpleTagSupport类并重写的doTag()方法来开发一个最简单的自定义标签。
创建“Hello”标签
我们创建一个自定义标签
,标签格式为:
<ex:Hello />
要创建自定义的JSP标签,首先需创建处理该标签的java类,创建一个HelloTag类,如下:
public class HelloTag extends SimpleTagSupport {
//重写父类的方法
public void doTag() throws JspException,IOException{
JspWriter out = getJspContext().getOut();
out.println("Hello Custom Tag!");
}
}
以上代码重写了doTag()方法,方法中使用了getJSPContext()方法来获取当前的JspContext对象,并将“Hello Custom Tag!”传递给JspWriter对象。
编译以上类,并将其复制到环境变量CLASSPATH目录中。最后创建如下标签库:
。
<taglib>
<tlib-version>1.0tlib-version>
<jsp-version>2.0jsp-version>
<short-name>Example TLDshort-name>
<tag>
<name>Helloname>
<tag-class>com.runoob.HelloTagtag-class>
<body-content>emptybody-content>
tag>
taglib>
接下来我们可以在jsp中使用自定义的标签:
<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%>
<html>
<head>
<title>A sample custom tagtitle>
head>
<body>
<ex:Hello/>
body>
html>
以上程序输出结果:
Hello Custom Tag!
自定义标签属性
你可以在自定义标准中设置各种属性,要接收属性,值自定义标签类必须实现setter方法, JavaBean 中的setter方法如下所示:
public class HelloTag extends SimpleTagSupport {
private String message;
public void setMessage(String msg) {
this.message = msg;
}
StringWriter sw = new StringWriter();
public void doTag()
throws JspException, IOException
{
if (message != null) {
/* 从属性中使用消息 */
JspWriter out = getJspContext().getOut();
out.println( message );
}
else {
/* 从内容体中使用消息 */
getJspBody().invoke(sw);
getJspContext().getOut().println(sw.toString());
}
}
}
属性的名称是”message”,所以setter方法是的setMessage()。我们在TLD文件中使用的
元素添加此属性:
<taglib>
<tlib-version>1.0tlib-version>
<jsp-version>2.0jsp-version>
<short-name>Example TLD with Bodyshort-name>
<tag>
<name>Helloname>
<tag-class>com.runoob.HelloTagtag-class>
<body-content>scriptlessbody-content>
<attribute>
<name>messagename>
attribute>
tag>
taglib>
我们在JSP文件中使用message属性:
<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%>
<html>
<head>
<title>A sample custom tagtitle>
head>
<body>
<ex:Hello message="This is custom tag" />
body>
html>
注:还可以使用的属性
属性 | 描述 |
---|---|
name | 定义属性的名称。每个标签的属性名称必须是唯一的 |
required | 指定属性是否是必须的或者可选的,如果设置为false为可选。 |
type | 定义该属性的Java类类型 。默认指定为 String |
description | 描述信息 |
相关实例:
.....
<attribute>
<name>attribute_namename>
<required>falserequired>
<type>java.util.Datetype>
<description>......fragment>
attribute>
.....