1.JSTL
JavaServer Pages Standard Tag Library,即JSP标准标签库。它包含了在开发JSP页面时常用到的一组标准标签,如通用标签,条件判断标签和迭代标签等。
2.为什么使用jstl?
EL表达式可以用来取值,但无法实现逻辑控制,循环遍历等。若要在jsp页面实现这样的需求,可
以使用jstl来解决。
3.如何使用JSTL?
(1).引入依赖
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/taglibs/standard -->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
(2).在jsp页面使用taglib指令导入标签库描述文件,如引入核心标签库
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"
4.JSTL核心标签库
通用标签库
通用标签用于在JSP页面内设置、显示和删除变量,它包含三个标签: <c:set>、<c:out>、
<c:remove>
(1).<c:set>标签
用于设置作用域变量的值或者作用域变量的属性值,其语法格式分为以下两种:
(1).将value值存储到范围为scope的变量variable中。语法:
<c:set var="variable" value="value" scope="scope"/>
- var属性的值是设置的变量名
- value属性的值是赋予变量的值
- scope属性对应的是变量的作用域,可选值有page、request、session和application
(2).将value值设置到对象的属性中。语法:
<c:set value="value" target="target" property="property"/>
- target属性是操作的JavaBean对象,可以使用EL表达式来表示。
- 补充:JavaBean知识
- JavaBean 是特殊的 Java 类,使用 Java 语言书写,并且遵守 JavaBean API 规范。
- 接下来给出的是 JavaBean 与其它 Java 类相比而言独一无二的特征:
- 1、所有属性为private
- 2、提供默认构造方法
- 3、提供getter和setter
- 4、实现serializable接口
- value属性是赋予JavaBean对象的属性的值
- property属性对应JavaBean对象的属性名
(2).<c:out>标签
用于将计算的表达式结果输出显示,类似于jsp中的<%=%>,但功能更强大,代码更简洁,方便页
面维护。其语法格式分为指定默认值和不指定默认值两种形式。
(1).不指定默认值
<c:out value="value"/>
(2).指定默认值
<c:out value="value" default="default"/>
(3).escapeXml:是否转换特殊字符,默认为true,自动转义处理
<p>${ "<a href='http://www.baidu.com'>百度</a>" }</p>
<p>
<c:out escapeXml="false"
value="<a href='http://www.baidu.com'>百度</a>" />
</p>
<c:out value="<a href='http://www.baidu.com'>百度</a>" />
(3).<c:remove>标签
与<c:set>标签的作用相反,<c:remove>用于移除指定作用域内的指定变量
<c:remove var="variable" scope="scope"/>
var属性是指待移除的变量的名称
scope属性是指移除的变量所在的范围,可选项有page、request、session、application,如果
没有指定,则默认为page
条件标签库
JSTL的条件标签包>括<c:if>、<c:choose>、<c:when>、<c:otherwise>
(1).<c:if>
用于实现Java语言中的if语句的功能
<c:if test="condition" var="varName" scope="scope">
主体内容
</c:if>
- test:判断条件,表达式返回true/false。当condition(可以用EL表达式表示)的结果为true时,执行主体,如果为false不会执行主体
- var:定义变量,该变量用于存放判断的结果,可省略
- scope:是指var定义的变量所在的范围,可选项有page、request、session、application,可省略
(2).<c:choose>
choose:实现if - else if - else语句的功能
<c:choose>
<c:when test="condition1">
内容1
</c:when>
<c:when test="condition2">
内容2
</c:when>
……
<c:otherwise>
内容n
</c:otherwise>
</c:choose >
- <c:choose >是作为<c:when>和<c:otherwise>的父标签使用的,除空白字符外,<c:choose>的标签体只能包含这两个标签
- <c:when>标签必须有一个直接的父标签<c:choose >,而且必须在同一个父标签下的
- <c:otherwise>标签之前出现。在同一个<c:choose >标签中可以有多个<c:when>标签
- <c:otherwise>标签必须有一个直接的父标签<c:choose>,且必须是<c:choose >标签嵌套的最后一个标签
- 在运行时,判断<c:when>标签的测试条件是否为true,第一个测试条件为true的<c:when>标签体被JSP容器执行。如果没有满足条件的<c:when>标签,那么<c:otherwise>标签体将被执行
迭代标签库
在JSP的开发中,经常需要对集合对象进行迭代操作,通过<c:forEach>标签,能在很大程度上简化迭代操作。
(1).遍历集合对象的成员
<c:forEach var="varName" items="collectionName" step="stepName"
varStatus="varStatusName" begin="beginIndex"end="endIndex">
主体内容
</c:forEach>
以上语法格式类比于java的foreach循环
- step是步长,默认为1,可以省略。类似于for循环中的i++;
- items:被迭代的集合对象
- var:每次迭代被拿出来的对象
- begin:遍历开始索引
- end:遍历结束索引
- varStatus:存放 “每次迭代被拿出来的对象” 的相关信息,如索引等
(2). 指定语句的执行次数
<c:forEach var="varName" varStatus="varStatusName"
begin="beginIndex"end="endIndex" step="step">
主体内容
</c:forEach>
以上语法格式类比于java中的for循环