三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

JSTL标签库简介 JSTL的下载和使用 核心标签库的使用

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 处理等(最常用)chttp://java.sun.com/jsp/jstl/core
格式化标签库日期、数字、国际化格式化fmthttp://java.sun.com/jsp/jstl/fmt
SQL 标签库数据库增删改查(不推荐生产使用)sqlhttp://java.sun.com/jsp/jstl/sql
XML 标签库XML 文档解析、操作xhttp://java.sun.com/jsp/jstl/xml
函数标签库字符串处理、长度计算等fnhttp://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(即每次循环获取下一个元素/数值)。

3.3.4 案例

← 返回列表