JSTL全称为JSP Standard Tag Library,即JSP标准标签库。标准标签库可以提高JSP页面的开发效率, 不需要自己开发, 只需要稍微学习使用即可.
下载jar包或导入坐标
先下载 jstl, 这里下载 1.2版本的 jar包, (2个都要, 不可以用maven版本)
maven导入以下坐标
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
jstl分类很多, 每个类别的导入的标签库不一样, 语句也不同, 大概可以分成5类
- 核心标签
- 格式化标签
- SQL 标签
- XML 标签
- 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 |
<c:out>标签
这个标签, 用作输出, 但比 <%= %> 要更灵活
- value = 文字或EL表达式
- escapeXml = true/false
- default = 文字或EL表达式
value表示要输出的值, escapeXml标记value中是否使用转义字符, default表示value为null时的输出, 也可以写在c:out标签中间
<c:out value="${null}" escapeXml="false" default="默认值"></c:out>
<c:set>标签
这个标签用于保存数据, 或修改数据, 如果2次存储同一个值默认是覆盖
- var = 要存储的变量名
- value = 要存储的值
- scope = 要存储的变量域
- property = 要修改的变量名, 必须配合target
- target = 要修改的属性所属对象
<c:set var="salary" scope="session" value="${2000*2}"/>
<c:remove>标签
这个标签用于删除数据
- var = 要移除的变量名称
- scope = 变量的作用域
<c:remove var="salary"/>
<c:catch>标签
用于捕获标签包裹内容的异常信息, 仅有一个 var 属性保存错误信息, 不会自动输出
<c:catch var ="catchException">
<% int x = 5/0;%>
</c:catch>
<c:if>标签
用于判断内容, 相当于if
- test = 条件
- var = 存储结果的变量名
- scope = 结果的作用域
<c:set var="salary" scope="session" value="${2000*2}"/>
<c:if test="${salary > 2000}">
<p>我的工资为: <c:out value="${salary}"/><p>
</c:if>
<c:choose>,<c:when>,<c:otherwise>标签
这三个标签组合起来完成的功能是java中的switch
- choose –> switch
- when –> case
- otherwise –> default
<c:set var="salary" scope="session" value="${2000*2}"/>
<p>你的工资为 : <c:out value="${salary}"/></p>
<c:choose>
<c:when test="${salary <= 0}">
太惨了。
</c:when>
<c:when test="${salary > 1000}">
不错的薪水,还能生活。
</c:when>
<c:otherwise>
什么都没有。
</c:otherwise>
</c:choose>
<c:import>标签
此标签, 为导入文件的所有字符, 从html的<!doctype>到</html>
- url –> 资源路径
- context –> 引入外部资源时指定一个别名
- var –> 引入文本时, 设置一个变量名
- scope –> var属性的作用域
- varReader –> 用于提供java.io.Reader对象的变量
<c:import var="data" url="https://www.52dixiaowo.com"/>
<c:out value="${data}"/>
<c:forEach>标签
此标签是for循环标签
- items –> 初始遍历目标
- begin –> 开始下标
- end –> 结束下标
- step –> 每次迭代步长
- var –> 遍历控制遍历, 初始是begin指定的值
- varStatus –> 当前遍历变量的信息描述
- index(所在位置,即索引)
- count(总共已迭代的次数)
- first(是否为第一个位置)
- last(是否为最后一个位置)
<c:forEach var="i" begin="1" end="5">
Item <c:out value="${i}"/><p>
</c:forEach>
<c:forTokens>标签
此标签, 和<c:forEach>相似, 比它多一个属性
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
delims | 分隔符 | 是 | 无 |
用法几乎和<c:forEach>相同
<c:forTokens items="google,baidu,taobao" delims="," var="name">
<c:out value="${name}"/><p>
</c:forTokens>
<c:url>标签
此标签生成一个 url
- value –> 基础url
- context –> tomcat当前应用虚拟目录
- var –> 用于存储url的变量, 若值改变, 以便自动重写
- scope –> 存储变量的值
值得注意的是, 一旦更改 var 的值, 那么原先设置的context就不生效了
<c:url context="/MyJSPProject" value="/file1.jsp" var="myurl" scope="session"/>
<c:set var="myurl" scope="session" value="/hello"/>
<a href="${sessionScope.myurl}">jsp生成的url</a>
<c:param>标签
此标签用于给<c:url>增加参数, 必须写在<c:url>标签中
- name –> 属性名
- value –> 属性值
<c:url var="myURL" value="test.jsp">
<c:param name="name" value="52的小窝"/>
<c:param name="url" value="www.52dixiaowo.com"/>
</c:url>
<a href="/<c:out value="${myURL}"/>">
使用 <c:param> 为指定URL发送两个参数。</a>
<c:redirect>标签
此标签会自动进行重定向, 可以配合<c:url>使用
- url –> URL地址
- context –> tomcat应用的虚拟目录
<c:redirect url="https://www.52dixiaowo.com"/>
格式化标签库
格式化并输出文本、日期、时间、数字
<%@ 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标签前,你必须将XML 和 XPath 的相关包拷贝至你的<Tomcat 安装目录>\lib下:
- XercesImpl.jar下载地址: http://www.apache.org/dist/xerces/j/
- xalan.jar下载地址: http://xml.apache.org/xalan-j/index.html
<%@ 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样式表 |
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() | 移除首尾的空白符 |