一、JSTL 核心概念1.1. 什么是 JSTLJSTL 是JSP 标准标签库由 Apache 组织提供的开源标签库是 Java Web 开发的标准组件。它通过自定义标签的形式封装了通用的业务逻辑判断、循环、格式化、数据库操作等让 JSP 页面无 Java 代码化。1.2. JSTL 的核心优势分离前后端JSP 专注页面展示Java 代码专注业务逻辑降低耦合提高可读性标签语法比 Java 脚本更简洁非开发人员也能看懂功能强大内置判断、循环、格式化、数据库、XML 操作等通用功能可复用性标签可以在多个页面重复使用减少代码冗余统一标准跨服务器、跨项目通用无需重复开发1.3. JSTL 五大标签库核心标签库名称作用前缀URI 地址核心标签库流程控制、循环、输出、URL 处理等最常用chttp://java.sun.com/jsp/jstl/core格式化标签库日期、数字、国际化格式化fmthttp://java.sun.com/jsp/jstl/fmtSQL 标签库数据库增删改查不推荐生产使用sqlhttp://java.sun.com/jsp/jstl/sqlXML 标签库XML 文档解析、操作xhttp://java.sun.com/jsp/jstl/xml函数标签库字符串处理、长度计算等fnhttp://java.sun.com/jsp/jstl/functions1.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 prefixc urihttp://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循环的所有场景灵活度极高。无论是后台传递的ListUser、数组、Map集合还是单纯需要循环N次如生成页码、循环渲染列表项用c:forEach都能轻松实现是开发中必不可少的标签。c:forTokens 是专门用于「字符串拆分遍历」的迭代标签核心作用是将一个字符串按指定的分隔符拆分然后遍历拆分后的每一个子字符串。3.3.2 讲解3.3.3 核心属性详解items可选属性用于指定要遍历的集合或数组必须用EL表达式获取如 ${userList}、${arr}。 注意只有“遍历集合/数组”场景需要“指定次数循环”场景无需该属性。var必填属性定义循环变量用于接收当前遍历的元素遍历集合/数组时var是集合中的单个元素指定次数循环时var是当前循环的数值。 示例遍历ListUser时varuser则可通过 ${user.name} 获取当前用户的姓名。varStatus可选属性定义循环状态对象用于获取循环的相关状态如索引、计数、是否为第一个/最后一个元素非常实用。 常用状态属性重点记index当前循环的索引从0开始和数组索引一致count当前循环的计数从1开始用于显示序号如1、2、3...first布尔值是否为第一次循环true/falselast布尔值是否为最后一次循环true/false。begin可选属性指定循环的起始位置遍历集合/数组时是起始索引指定次数循环时是起始数值默认从0开始。end可选属性指定循环的结束位置遍历集合/数组时是结束索引指定次数循环时是结束数值默认到集合/数组的最后一个元素或指定次数的最后一个数值。step可选属性指定循环的步长每次循环跳过的元素/数值默认步长为1即每次循环获取下一个元素/数值。3.3.4 案例