JSTL标签库简介 JSTL的下载和使用 核心标签库的使用
一、JSTL 核心概念
1.1. 什么是 JSTL?
JSTL 是JSP 标准标签库,由 Apache 组织提供的开源标签库,是 Java Web 开发的标准组件。它通过自定义标签的形式,封装了通用的业务逻辑(判断、循环、格式化、数据库操作等),让 JSP 页面无 Java 代码化。
1.2. JSTL 的核心优势
分离前后端:JSP 专注页面展示,Java 代码专注业务逻辑,降低耦合
提高可读性:标签语法比 Java 脚本更简洁,非开发人员也能看懂
功能强大:内置判断、循环、格式化、数据库、XML 操作等通用功能
可复用性:标签可以在多个页面重复使用,减少代码冗余
统一标准:跨服务器、跨项目通用,无需重复开发
1.3. JSTL 五大标签库(核心)
| 标签库名称 | 作用 | 前缀 | URI 地址 |
|---|---|---|---|
| 核心标签库 | 流程控制、循环、输出、URL 处理等(最常用) | c | http://java.sun.com/jsp/jstl/core |
| 格式化标签库 | 日期、数字、国际化格式化 | fmt | http://java.sun.com/jsp/jstl/fmt |
| SQL 标签库 | 数据库增删改查(不推荐生产使用) | sql | http://java.sun.com/jsp/jstl/sql |
| XML 标签库 | XML 文档解析、操作 | x | http://java.sun.com/jsp/jstl/xml |
| 函数标签库 | 字符串处理、长度计算等 | fn | http://java.sun.com/jsp/jstl/functions |
1.4.JSTL 使用注意事项
必须配合 EL 表达式使用:JSTL 标签的属性值几乎都用 EL 表达式赋值,不能直接写 Java 代码
域对象规范:优先使用request域传递数据,避免session域滥用
SQL/XML 标签弃用:生产环境禁止使用<sql:xxx>和<x:xxx>,数据库操作交给 Service 层
路径问题:跳转路径必须用<c:url>自动拼接根路径,避免 404
依赖版本:JSTL 1.2 是稳定版,兼容所有主流服务器(Tomcat 8+)
二、JSTL的下载和使用
三、核心标签库使用
3.1 核心标签库是什么?
核心标签库(Core Tag Library) 是 JSTL 中最基础、最常用的标签库,前缀为 c,用来在 JSP 页面中替代 Java 脚本(<% %>),完成变量操作、条件判断、循环遍历、URL 处理等通用逻辑,让页面更干净、易维护。
引入方式:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3.2 核心标签库-输入输出标签
3.2.1 数据输入标签:<c:set> <c:out> —— 页面数据的“容器”
<c:set> 是JSTL中最常用的「输入标签」,核心作用是:在指定的域对象中定义变量、存储数据,或修改已有变量/对象的属性。替代的是JSP脚本中的<% request.setAttribute("name", "value"); %>,但语法更简洁,无需写Java代码,且支持更灵活的配置。
3.2.2 输入案例
3.2.3 注意事项
scope属性尽量不用session和application,优先用request和page,避免数据污染和内存泄漏。
修改对象属性时,target必须是JavaBean对象(有get/set方法),否则会报错。
如果var对应的变量已存在,<c:set> 会覆盖原有值;如果不存在,则创建新变量。
3.2.4数据删除标签:<c:remove> <c:catch>—— 页面数据的“清理工”
<c:remove> 是输入输出标签中相对少用,但必要时不可或缺的标签,核心作用是:删除指定域对象中的变量,释放资源,避免数据残留。替代的是JSP脚本中<%request.removeAttribute("name"); %>,语法更简洁,无需关注Java API。
3.2.5 输出案例
3.3 核心标签库-流程控制标签
3.3.1 概述
3.3.2 案例
3.3 核心标签库-迭代标签
3.3.1 概述
<c:forEach> 是JSTL迭代标签中最核心、最常用的标签,没有之一。它的核心作用是:遍历集合、数组,或执行指定次数的循环,覆盖了Java中for循环、foreach循环的所有场景,灵活度极高。无论是后台传递的List<User>、数组、Map集合,还是单纯需要循环N次(如生成页码、循环渲染列表项),用<c:forEach>都能轻松实现,是开发中必不可少的标签。
<c:forTokens> 是专门用于「字符串拆分遍历」的迭代标签,核心作用是:将一个字符串按指定的分隔符拆分,然后遍历拆分后的每一个子字符串。
3.3.2 讲解
3.3.3 核心属性详解
items:可选属性,用于指定要遍历的集合或数组(必须用EL表达式获取,如 ${userList}、${arr})。 注意:只有“遍历集合/数组”场景需要,“指定次数循环”场景无需该属性。
var:必填属性,定义循环变量,用于接收当前遍历的元素(遍历集合/数组时,var是集合中的单个元素;指定次数循环时,var是当前循环的数值)。 示例:遍历List<User>时,var="user",则可通过 ${user.name} 获取当前用户的姓名。
varStatus:可选属性,定义循环状态对象,用于获取循环的相关状态(如索引、计数、是否为第一个/最后一个元素),非常实用。 常用状态属性(重点记):
index:当前循环的索引(从0开始,和数组索引一致);
count:当前循环的计数(从1开始,用于显示序号,如1、2、3...);
first:布尔值,是否为第一次循环(true/false);
last:布尔值,是否为最后一次循环(true/false)。
begin:可选属性,指定循环的起始位置(遍历集合/数组时,是起始索引;指定次数循环时,是起始数值),默认从0开始。
end:可选属性,指定循环的结束位置(遍历集合/数组时,是结束索引;指定次数循环时,是结束数值),默认到集合/数组的最后一个元素,或指定次数的最后一个数值。
step:可选属性,指定循环的步长(每次循环跳过的元素/数值),默认步长为1(即每次循环获取下一个元素/数值)。
