JSP标准标签库(JSTL)是一个JSP标签集合,它封装了许多常用的函数,并且用xml标签的方式来调用。
它主要分为5类标签:
- 核心标签;
- 格式化标签;
- SQL 标签;
- XML 操作标签;
- 字符串操作标签。
MAVEN方式安装
在pom.xml
中加入以下内容:
<!-- jstl start -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<!-- jstl end -->
JSTL主要标签
核心标签
核心标签库中主要包含了进行基本操作方式的标签。
它的引用方式如下:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
它包括了以下标签:
标签 | 描述 |
---|---|
<c:out> |
用于在JSP中显示数据,就像<%= … > |
<c:set> |
用于保存数据 |
<c:remove> |
用于删除数据 |
<c:catch> |
用来处理产生错误的异常状况,并且将错误信息储存起来 |
<c:if> |
与我们在一般程序中用的if一样 |
<c:choose> |
本身只当做<c:when> 和<c:otherwise> 的父标签 |
<c:when> |
<c:choose> 的子标签,用来判断条件是否成立 |
<c:otherwise> |
<c:choose> 的子标签,接在<c:when> 标签后,当<c:when> 标签判断为false时被执行 |
<c:import> |
检索一个绝对或相对 URL,然后将其内容暴露给页面 |
<c:forEach> |
基础迭代标签,接受多种集合类型 |
<c:forTokens> |
根据指定的分隔符来分隔内容并迭代输出 |
<c:param> |
用来给包含或重定向的页面传递参数 |
<c:redirect> |
重定向至一个新的URL |
<c:url> |
使用可选的查询参数来创造一个URL |
格式化标签
格式化标签库主要包含了对数据进行格式化操作的标签。
它的引用方式如下:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
它包括了以下标签:
标签 | 描述 |
---|---|
<fmt:formatNumber> |
使用指定的格式或精度格式化数字 |
<fmt:parseNumber> |
解析一个代表着数字,货币或百分比的字符串 |
<fmt:formatDate> |
使用指定的风格或模式格式化日期和时间 |
<fmt:parseDate> |
解析一个代表着日期或时间的字符串 |
<fmt:bundle> |
绑定资源 |
<fmt:setLocale> |
指定地区 |
<fmt:setBundle> |
绑定资源 |
<fmt:timeZone> |
指定时区 |
<fmt:setTimeZone> |
指定时区 |
<fmt:message> |
显示资源配置文件信息 |
<fmt:requestEncoding> |
设置request 的字符编码 |
SQL标签
SQL标签库主要包含了与数据库交互的标签。
它的引用方式如下:
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
它包括了以下标签:
标签 | 描述 |
---|---|
<sql:setDataSource> |
指定数据源 |
<sql:query> |
运行SQL 查询语句 |
<sql:update> |
运行SQL 更新语句 |
<sql:param> |
将SQL 语句中的参数设为指定值 |
<sql:dateParam> |
将SQL 语句中的日期参数设为指定的java.util.Date 对象值 |
<sql:transaction> |
在共享数据库连接中提供嵌套的数据库行为元素,将所有语句以一个事务的形式来运行 |
XML 操作标签
XML 操作标签库主要包含了用于对.xml
文件进行操作的标签。
它的引用方式如下:
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
它包括了以下标签:
标签 | 描述 |
---|---|
<x:out> |
与<%= ... > ,类似,不过只用于XPath 表达式 |
<x:parse> |
解析XML 数据 |
<x:set> |
设置XPath 表达式 |
<x:if> |
判断XPath 表达式,若为真,则执行本体中的内容,否则跳过本体 |
<x:forEach> |
迭代XML 文档中的节点 |
<x:choose> |
<x:when> 和<x:otherwise> 的父标签 |
<x:when> |
<x:choose> 的子标签,用来进行条件判断 |
<x:otherwise> |
<x:choose> 的子标签,当<x:when> 判断为false 时被执行 |
<x:transform> |
将XSL 转换应用在XML 文档中 |
<x:param> |
与<x:transform> 共同使用,用于设置XSL 样式表 |
格式化标签
字符串操作标签库主要包含了对字符串做一些常用操作的标签。
它的引用方式如下:
<%@ 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() |
移除首位的空白符 |
自定义标签
创建一个标签类
自定义标签类需要继承SimpleTagSupport
类并重写的doTag()
方法:
package com.vingyun;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.SimpleTagSupport;
public class TagTest extends SimpleTagSupport {
// 自定义标签属性
private String custom;
public String getCustom() {
return custom;
}
public void setCustom(String custom) {
this.custom = custom;
}
@Override
public void doTag() throws JspException, IOException {
// TODO 自动生成的方法存根
JspWriter out = getJspContext().getOut();
out.println("Hello " + custom + ", This is TagTest!!");
}
}
创建.tld文件
.tld
文件作为自定义标签的说明文件,我们需要在里面对标签进行配置:
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>2.0</jsp-version>
<short-name>Tag Test TLD</short-name>
<tag>
<!-- 调用时的名称 -->
<name>tagTest</name>
<!-- 标签类的完全限定名 -->
<tag-class>com.vingyun.TagTest</tag-class>
<!-- 标签体可接受文本、EL和JSP动作。 -->
<body-content>scriptless</body-content>
<attribute>
<!-- 定义属性的名称,每个标签的是属性名称必须是唯一的 -->
<name>custom</name>
<!-- 指定属性是否是必须的或者可选的,如果设置为false为可选 -->
<required>false</required>
<!-- 声明在运行表达式时,标签属性是否有效 -->
<rtexprvalue>true</rtexprvalue>
<!-- 定义该属性的Java类类型 , 默认指定为 String -->
<type>String</type>
<!-- 描述信息 -->
<description>名称输入</description>
<!-- 该属性值是否需要被视为一个 JspFragment -->
<fragment>false</fragment>
</attribute>
</tag>
</taglib>
在这个例子中,我把它取名为tagTest.tld
。
自定义标签的使用
首先需要对自定义标签进行声明:
<%@ taglib prefix="t" uri="WEB-INF/tld/tagTest.tld"%>
然后就可以调用了:
<t:tagTest custom="Ving"></t:tagTest>
输出结果: