JSTL是Java中的一个定制标记库集。JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。
使用JSTL优势:
1)实现了JSP页面的代码复用。基于标签库原理,重复率较高的代码块支持复用,提高效率。
2)书写JSP页面时可读性更强。长得像XML,方便前端查看和参与开发。
3)在应用程序服务器之间提供了一致的接口,最大程度地提高了WEB应用在各应用服务器之间的移植。
4)简化了JSP和WEB应用程序的开发。
C标签为JSTL的核心标签库。
引入jar包:【standard.jar、jstl.jar】
jar包地址:
链接:https://pan.baidu.com/s/1UAjW8is3CLK1gbTwd6LbMw
提取码:3jfh ;
jsp页面引入标签格式:
<!--核心标签库-->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!--函数库-->
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<!--格式化标签库-->
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!--SQL标签库(不常用)-->
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<!--XML 标签库(不常用)-->
<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x" %>
【根据实际情况引入需要的标签库,常见的有(核心标签库、函数库、格式化标签库)】
注意:C标签使用是会使用到EL表达式,以上两个必须引入;
1. scope 的作用域大小依次为:
application > session > request > page(默认)
2. jsp 处理变量的作用域先后依次为:
page(默认) -> request -> session -> application
C核心标签库:
JSTL 核心标签库(C标签)标签共有13个,功能上分为4类:
1.表达式控制标签:out、set、remove、catch
2.流程控制标签:if、choose、when、otherwise
3.循环标签:forEach、forTokens
4.URL操作标签:import、url、redirect
<c:forEach>, <c:forTokens> 标签
forEach 语法格式
<c:forEach [var="varName"] items="collection"
[varStatus="varStatusName"]
[begin="begin"] [end="end"]
[step="step"]>
//循环体取值
方式一:<c:out value="${varStatusName.index}"></c:out>
方式二:${status.index} // 考虑到代码的见解建议使用该方法
</c:forEach>
forTokens 语法格式
<c:forTokens items="stringOfTokens"
delims="delimiters" [var="varName"]
[varStatus="varStatusName"]
[begin="begin"] [end="end"]
[step="step"]>
//循环体取值
方式一:<c:out value="${status.index}"></c:out>
方式二:${status.index} // 考虑到代码的见解建议使用该方法
</c:forTokens>
属性说明:
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
items | 要被循环的信息 | 是 | 无 |
begin | 开始的元素(0=第一个元素,1=第二个元素) | 否 | 0 |
end | 最后一个元素(0=第一个元素,1=第二个元素) | 否 | Last element |
step | 每一次迭代的步长 | 否 | 1 |
var | 代表当前条目的变量名称 | 是 | 无 |
varStatus | 代表循环状态的变量名称 | 否 | 无 |
<c:forTokens>标签与<c:forEach>标签有相似的属性,不过<c:forTokens>还有另一个属性:
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
delims | 分隔符 | 是 | 无 |
varStatus 属性
属性 | 描述 | 类型 |
---|---|---|
index | 当前这次迭代从 0 开始的迭代索引 | int |
count | 当前这次迭代从 1 开始的迭代计数(循环次数) | int |
frist | 用来表明当前这轮迭代是否为第一次迭代的标志(是否为第一个位置) | boolean |
last | 用来表明当前这轮迭代是否为最后一次迭代的标志(是否为最后一个位置) | boolean |
<c:forEach>实例演示
遍历 List列表:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>应用<c:forEach>标签遍历List集合</title>
</head>
<body>
<b>遍历List集合的全部元素:</b><br>
<c:forEach items="${requestScope.list}" var="keyword" varStatus="id">
${id.index } ${keyword}<br>
</c:forEach>
<b>遍历List集合中第1个元素以后的元素(不包括第1个元素):</b><br>
<c:forEach items="${requestScope.list}" var="keyword" varStatus="id" begin="1">
${id.index } ${keyword}<br>
</c:forEach>
</body>
</html>
遍历Map:
<c:if test="${!empty permissionMap}">
<c:forEach items="${permissionMap}" var="item">
<tr>
<td>${item.value.id}</td>
<td>${item.value.urlOnClass}</td>
<td>${item.value.urlOnMethod}</td>
</tr>
</c:forEach>
</c:if>
<c:forTokens>实例演示
<%--提示:分隔符的作用是根据标识,截取字符串。
如果未设定分隔符或在字符串中没有找到分隔付,将把整个元素作为一个元素截取。
在实际应用中用于在除去某些符号在页面中显示。 --%>
<c:forTokens var="str" items="北、京、欢、迎、您" delims="、">
<%--<c:out value="${str}"></c:out><br/>--%>
${str}
</c:forTokens>
<br/>
<c:forTokens items="123-4567-8854" delims="-" var="t">
<%--<c:out value="${t}"></c:out><br/>--%>
${t}
</c:forTokens>
<br/>
<c:forTokens items="1*2*3*4*5*6*7" delims="*" begin="1" end="3" var="n" varStatus="s">
<%--<c:out value="${n}" />的四种属性:<br>
所在位置,即索引:<c:out value="${s.index}" /><br>
总共已迭代的次数:<c:out value="${s.count}" /><br>
是否为第一个位置:<c:out value="${s.first}" /><br>
是否为最后一个位置:<c:out value="${s.last}" /><br> --%>
${n}的四种属性:<br>
所在位置,即索引:${s.index}<br>
总共已迭代的次数:${s.count}<br>
是否为第一个位置:${s.first}<br>
是否为最后一个位置:${s.first}<br>
</c:forTokens>
</body>
</html>
1)items:是集合,用EL表达式;
2)var:变量名,存放items各个项 ,代表集合中每一条数据
3)varStatus: 显示循环状态的变量,有一下几个属性:
①index:从0开始; 显示当前迭代的索引值
②count:元素位置,从1开始; 【显示当前迭代显示的行位置,通过配合判断语句,实现给奇、偶行着不同的色,以进行分区】
③first:如果是第一个元素则显示true;
④last:如果是最后一个元素则显示true;
4)begin:循环的初始值(整型);
5)end: 循环结束(整型);
6)step:步长,循环间隔的数值(整型);
<c:set> 标签
用于设置变量值和对象属性。
语法格式
<c:set
var="<string>"
value="<string>"
target="<string>"
property="<string>"
scope="<string>"/>
属性说明:
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
value | 要存储的值 | 否 | 主体的内容 |
target | 要修改的属性所属的对象 | 否 | 无 |
property | 要修改的属性 | 否 | 无 |
var | 存储信息的变量 | 否 | 无 |
scope | var属性的作用域 | 否 | Page |
使用实例:
<c:if> 标签
判断表达式的值,如果表达式的值为 true 则执行其主体内容。
语法格式
<c:if test="<boolean>" var="<string>" scope="<string>">
...
</c:if>
属性说明:
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
test | 条件 | 是 | 无 |
var | 用于存储条件结果的变量 | 否 | 无 |
scope | var属性的作用域 | 否 | page |
<c:choose>, <c:when>, <c:otherwise> 标签
<c:choose>标签与Java switch语句的功能一样,用于在众多选项中做出选择。
switch语句中有case,而<c:choose>标签中对应有<c:when>,switch语句中有default,而<c:choose>标签中有<c:otherwise>。
<c:when> <c:otherwise>无法单独使用,只能作为<c:choose>的子标签来使用。
语法格式
<c:choose>
<c:when test="<boolean>">
...
</c:when>
<c:when test="<boolean>">
...
</c:when>
...
...
<c:otherwise>
...
</c:otherwise>
</c:choose>
属性说明:
<c:choose>标签没有属性。
<c:when>标签只有一个属性,在下表中有给出。
<c:otherwise>标签没有属性。
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
test | 条件 | 是 | 无 |
使用实例:
<c:set var="score">85</c:set>
<c:choose>
<c:when test="${score>=90}">
你的成绩为优秀!
</c:when>
<c:when test="${score>=70&&score<90}">
您的成绩为良好!
</c:when>
<c:when test="${score>60&&score<70}">
您的成绩为及格
</c:when>
<c:otherwise>
对不起,您没有通过考试!
</c:otherwise>
</c:choose>
<c:remove> 标签
用于移除一个变量,可以指定这个变量的作用域,若未指定,则默认为变量第一次出现的作用域。【很少用】
语法格式
<c:remove var="<string>" scope="<string>"/>
属性说明:
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
var | 要移除的变量名称 | 是 | 无 |
scope | 变量所属的作用域 | 否 | 所有作用域 |
<c:catch> 标签
用来处理产生错误的异常状况,并且将错误信息储存起来。【本人未使用】
语法格式
<c:catch var="<string>">
...
</c:catch>
属性说明:
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
var | 用来储存错误信息的变量 | 否 | None |
实例演示:
<c:catch var="myexception">
嵌套动作
</c:catch>
<c:if test="${myexception!=null}">
内容
</c:if>
<c:out> 标签
用来显示一个表达式的结果,与<%= %>作用相似,它们的区别就是<c:out>标签可以直接通过"."操作符来访问属性。
【无特殊要求不建议使用,可直接使用EL表达式(eg.${user.name})】。
语法格式
<c:out value="<string>" default="<string>" escapeXml="<true|false>"/>
属性说明
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
value | 要输出的内容 | 是 | 无 |
default | 输出的默认值 | 否 | 主体中的内容 |
escapeXml | 是否忽略XML特殊字符 | 否 | true |
<c:import> 标签
提供了所有<jsp:include>行为标签所具有的功能;与<jsp:include>的区别为:<jsp:include>只能包含同一个web应用中的文件。而<c:import>可以包含其他web应用中的文件,甚至是网络上的资源。
语法格式
<c:import
url="<string>"
var="<string>"
scope="<string>"
varReader="<string>"
context="<string>"
charEncoding="<string>"/>
属性说明:
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
url | 待导入资源的URL,可以是相对路径和绝对路径,并且可以导入其他主机资源 | 是 | 无 |
context | 当使用相对路径访问外部context资源时,context指定了这个资源的名字。 | 否 | 当前应用程序 |
charEncoding | 所引入的数据的字符编码集 | 否 | ISO-8859-1 |
var | 用于存储所引入的文本的变量 | 否 | 无 |
scope | var属性的作用域 | 否 | page |
varReader | 可选的用于提供java.io.Reader对象的变量 | 否 | 无 |
使用实例:
<c:import var="data" url="http://www.runoob.com"/>
<c:out value="${data}"/>
<c:param> 标签
于在 <c:url> 标签中指定参数,而且与 URL 编码相关。
在 <c:param> 标签内,name 属性表明参数的名称,value 属性表明参数的值。
语法格式
<c:param name="<string>" value="<string>"/>
属性说明:
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
name | URL中要设置的参数的名称 | 是 | 无 |
value | 参数的值 | 否 | Body |
<c:url> 标签
用于在JSP页面中构造一个URL地址,其主要目的是实现URL重写。
语法格式:
<c:url
var="<string>"
scope="<string>"
value="<string>"
context="<string>"/>
属性说明:
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
value | 基础URL | 是 | 无 |
context | 本地网络应用程序的名称 | 否 | 当前应用程序 |
var | 代表URL的变量名 | 否 | Print to page |
scope | var属性的作用域 | 否 | Page |
使用实例:
实例1:
<c:url value="http://www.baidu.com" var="url1" scope="session"></c:url>
<a href="${url1}">百度首页(无参)</a>
实例2:
<c:url value="http://www.baidu.com" var="url2">
<c:param name="userName" value="zhangsan"/>
<c:param name="pwd">000000</c:param>
</c:url>
<a href="${url2}">百度首页(含参)</a>
<c:redirect> 标签
用来实现请求的重定向。同时可以配合使用<c:param>标签在url中加入指定的参数。用于自动重写URL来将浏览器重定向至一个新的URL,它提供内容相关的URL,并且支持c:param标签。
语法:
语法1:
<c:redirect url="<string>" context="<string>"/>
语法2:
<c:redirect url="url" [context="context"]>
<c:param name="name1" value="value1">
</c:redirect>
属性说明:
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
url | 目标URL | 是 | 无 |
context | 紧接着一个本地网络应用程序的名称 | 否 | 当前应用程序 |
JSTL <c:if test=“eq ne lt..”></if> 用法
算术运算符 + 、 - 、 * 、 / (或 div )和 % (或 mod )
关系运算符 == (或 eq )、 != (或 ne )、 < (或 lt )、 > (或 gt )、 <= (或 le )和 >= (或 ge )
逻辑运算符 && (或 and )、 || (或 or )和 ! (或 not )
验证运算符 empty