JSTL标签库
JSTL标签库概述
1.目标
- 掌握什么是JSTL标签库
2.讲解
2.1 什么是JSTL标签库
JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。这个JSTL标签库没有集成到JSP的, 要使用的话, 需要导jar包.
2.2 JSTL标签库的作用
为了简化在jsp页面上操作数据; eg: 遍历数据 判断数据等
2.3 JSTL标签库的类别
标签库功能描述 | 标签库的URI | 建议前缀 |
---|---|---|
核心标签库 | htttp://java.sun.com/jsp/jstl/core | c |
XML标签库 | htttp://java.sun.com/jsp/jstl/xml | x |
国际化/格式化标签库 | htttp://java.sun.com/jsp/jstl/fmt | fmt |
数据库标签库 | htttp://java.sun.com/jsp/jstl/sql | sql |
EL自定义函数 | htttp://java.sun.com/jsp/jstl/functions | fn |
3.小结
- JSTL: JSP标准的标签库. 也就意味着我们可以在jsp里面使用除了html以外的其它的标签
- 作用: 遍历, 判断… 代替脚本
JSTL核心标签库
1.目标
- 掌握if,foreach标签的使用
2.讲解
2.1核心标签库使用步骤
-
导入jar包 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mj47OWAs-1606566426440)(D:/就业班课程资料/web阶段预习资料/day27-JSP三层架构/笔记/img/tu_12.png)]
-
在JSP页面上导入核心标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
2.3if标签
< c : if >标签的属性
属性名 | 是否支持EL | 属性类型 | 属 性 描 述 |
---|---|---|---|
test | true | boolean | 决定是否处理标签体中的内容的条件表达式 |
var | false | String | 用于指定将test属性的执行结果保存到某个Web域中的某个属性的名称 |
scope | false | String | 指定将test属性的执行结果保存到哪个Web域中 |
- 语法
<c:if test="el表达式${..}">
</c:if>
- 实例
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<title>使用jstl中的if标签进行判断</title>
</head>
<body>
<%
//往域对象中存储一个age
request.setAttribute("age",17);
//目标:判断age的值,如果大于等于18,则在浏览器页面上输出"已成年",否则输出"未成年"
//jstl的使用步骤:1. 导入jar包 2. 在jsp页面通过taglib指令引入核心标签库 3. 使用标签
%>
<%--
if标签有一个属性叫做test,它表示判断表达式,需要结合el一起使用
如果要表示相反的判断,则再添加一个if标签,然后写相反的条件就行
if标签还有一个属性叫做var,表示将判断结果存储进域对象时候的key(了解)
if标签的第三个属性叫做scope,表示将判断结果存储进哪个域对象(了解)
--%>
<c:if test="${age >= 18}" var="flag" scope="request">
已成年
</c:if>
<c:if test="${age < 18}">
未成年
</c:if>
<br>
${flag}
</body>
</html>
-
小结
- 语法
<c:if test="${} "></c:if>
- 特点
- 如果test里面的是true, if标签体里面的就会执行
- 如果test里面的是false, if标签体里面的就不会执行
- 没有else的
2.4choose标签
- 实例
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>jstl中的choose标签的使用介绍</title>
</head>
<body>
<%
request.setAttribute("course","PHP");
%>
<c:choose>
<%--
一个when标签表示一个条件
--%>
<c:when test="${course == 'Java'}">
学习Java
</c:when>
<c:when test="${course == 'Android'}">
学习Android
</c:when>
<c:when test="${course == 'C++'}">
学习C++
</c:when>
<c:otherwise>
学习,学个屁!!!
</c:otherwise>
</c:choose>
</body>
</html>
2.5 foreach标签
< c:forEach > 标签的属性
属性名 | 是否支持EL | 属性类型 | 属性描述 |
---|---|---|---|
var | false | String | 指定将当前迭代到的元素保存到page这个Web域中的属性名称 |
items | true | 任何支持的类型 | 将要迭代的集合对象 |
varStatus | false | String | 指定将代表当前迭代状态新的对象保存到page这个Web域中的属性名称 |
begin | true | int | 如果指定items属性,就从集合中的第begin个元素开始进行迭代,begin的索引值从0开始编号;如果没有指定items属性,就从begin指定的值开始迭代,直到end值时结束迭代 |
end | true | int | 参考begin属性的描述 |
step | true | int | 指定迭代的步长,即迭代因子的迭代增量 |
- 简单的使用:
<%--
jstl中的forEach标签是用来代替for循环语句
目标1: 在浏览器上显示0-9的数字
begin属性: 从哪个下标开始遍历, 如果不写默认是从0开始
end属性: 到哪个下标结束遍历,如果不写默认是遍历到集合/数组的最后一个元素
step属性: 表示遍历时候的步长,默认步长是1
var属性: 表示将遍历的结果存放进域对象时候的key
--%>
<c:forEach begin="0" end="9" step="1" var="i">
${i}
</c:forEach><br>
-
复杂的使用遍历集合:
<% //往域对象存储一个集合 List<String> list = new ArrayList<String>(); list.add("张三"); list.add("李四"); list.add("王五"); list.add("赵六"); list.add("田七"); request.setAttribute("list", list); %> <c:forEach begin="0" end="9" step="1" var="i"> ${i} </c:forEach><br> <%-- 通过items属性指定遍历域对象里面的list 通过var属性指定遍历出来的每个数据存储到域对象时候的key --%> <c:forEach items="${list}" var="username"> ${username} </c:forEach>
-
c:forEach中的varStatus属性。
指向一个字符串,该字符串引用一个对象。 map.put(“vs”,一个对象);
这个对象记录着当前遍历的元素的一些信息:
index:返回索引。从0开始
count:返回计数。从1开始
last:是否是最后一个元素
first:是否是第一个元素
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>forEach 标签的varStatus属性的介绍</title>
</head>
<body>
<%
//往域对象存储一个集合
List<String> list = new ArrayList<String>();
list.add("张三");
list.add("李四");
list.add("王五");
list.add("赵六");
list.add("田七");
request.setAttribute("list", list);
%>
<%--
forEach标签的varStatus属性:指定将遍历出来的每一个元素的状态存储进域对象时候的key
遍历出来的每一个元素都有一些状态(属性),比如:
下标 index:
计数 count:
当前元素的值 current:
是否是第一个元素:
是否是最后一个元素
--%>
<table border="1" cellspacing="0" width="700" align="center">
<tr>
<th>下标</th>
<th>计数</th>
<th>姓名</th>
<th>是否是第一个元素</th>
<th>是否是最后一个元素</th>
</tr>
<c:forEach items="${list}" varStatus="vst">
<tr>
<td>${vst.index}</td>
<td>${vst.count}</td>
<td>${vst.current}</td>
<td>${vst.first}</td>
<td>${vst.last}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
3.小结
- foreach标签
- 简单使用
<c:foreach begin="从哪里开始" end="到哪里结束" var="每次遍历的赋值变量" step="步长">
//每遍历一次 foreach里面就执行一次
</c:foreach>
- 复杂使用
<c:foreach items="使用el从域对象里面取出集合" var="每次遍历的赋值变量" varStatus="遍历的状态">
//每遍历一次 foreach里面就执行一次
</c:foreach>
```
3.小结
- foreach标签
- 简单使用
<c:foreach begin="从哪里开始" end="到哪里结束" var="每次遍历的赋值变量" step="步长">
//每遍历一次 foreach里面就执行一次
</c:foreach>
- 复杂使用
<c:foreach items="使用el从域对象里面取出集合" var="每次遍历的赋值变量" varStatus="遍历的状态">
//每遍历一次 foreach里面就执行一次
</c:foreach>