目录
一、JSTL 基础认知
1. 什么是 JSTL?
2. JSTL 的 5 大标签库
二、JSTL 下载与使用
1. 依赖包下载
2. 基于Maven项目
3. 使用
三、JSTL 核心标签库实战
前置准备:JavaBean 实体类
1. MyUser.java(用户实体)
2. Product.java(商品实体)
3. Person.java(人员实体)
(一)输入输出标签
商品信息展示案例
(二)流程控制标签
1. 循环指定次数
2. 循环访问集合元素
集合遍历:人员信息列表展示案例
一、JSTL 基础认知
1. 什么是 JSTL?
JSTL是 SUN 公司定义的JSP 标准标签库,用于替代JSP 脚本中的Java 代码(如:<% java代码 %>)。通过自定义标签(如:<c:set>、<c:out>)简化 JSP 开发,提高页面代码可读性与可维护性,常与 EL 表达式配合使用。
2. JSTL 的 5 大标签库
| JSTL 标签库 | 标签库的 URI | 前缀 | 用途 |
|---|---|---|---|
| 核心标签库 | http://java.sun.com/jsp/jstl/core | c | 流程控制、变量赋值、URL 管理等(最常用) |
| 格式化标签库 | http://java.sun.com/jsp/jstl/fmt | fmt | 日期 / 数字格式化、国际化 |
| 函数标签库 | http://java.sun.com/jsp/jstl/functions | fn | 字符串处理函数(如截取、替换) |
| SQL 标签库 | http://java.sun.com/jsp/jstl/sql | sql | 数据库操作 |
| XML 标签库 | http://java.sun.com/jsp/jstl/xml | xml | XML 文档处理 |
二、JSTL 下载与使用
1. 依赖包下载
下载地址:Apache官网
- 将两个 jar 包复制到项目的
WEB-INF/lib目录下 - 在 IDEA 中,右键 jar 包 →
Add as Library完成依赖导入
2. 基于Maven项目
如果已经配置了Maven只需在pom.xml文件中引入依赖即可:
<dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency>3. 使用
在 JSP 页面顶部引入标签库即可使用:
标签库的uri和prefix参照表:JSTL 的 5 大标签库
格式: <%-- 引入核心标签库 --%> <%@ taglib prefix="前缀" uri="标签库的uri" %> <%-- 启用EL表达式 --%> <%@ page isELIgnored="false" %>三、JSTL 核心标签库实战
核心标签库是开发中最常用的部分,分为输入输出标签、流程控制标签、迭代标签三大类。
前置准备:JavaBean 实体类
我们先定义项目中用到的实体类,用于数据封装:
1. MyUser.java(用户实体)
package com.example.javabean0415; public class MyUser { private String username; private String password; // 无参构造 public MyUser(){} // 有参构造 public MyUser(String username,String password){ this.username=username; this.password=password; } // getter/setter public String getUsername() {return username;} public void setUsername(String username) {this.username = username;} public String getPassword() {return password;} public void setPassword(String password) {this.password = password;} }2. Product.java(商品实体)
package com.example.javabean0415; public class Product { private String id; private String name; private double score; private int num; public Product(){} public Product(String id, String name, double score, int num) { this.id = id; this.name = name; this.score = score; this.num = num; } // getter/setter public String getId() {return id;} public void setId(String id) {this.id = id;} public String getName() {return name;} public void setName(String name) {this.name = name;} public double getScore() {return score;} public void setScore(double score) {this.score = score;} public int getNum() {return num;} public void setNum(int num) {this.num = num;} }3. Person.java(人员实体)
package com.example.javabean0415; public class Person { private String id; private String name; private int age; private double height; private String phone; public Person(){} public Person(String id,String name,int age,double height,String phone){ this.id=id; this.name=name; this.age=age; this.height=height; this.phone=phone; } // getter/setter public String getId() {return id;} public void setId(String id) {this.id = id;} public String getName() {return name;} public void setName(String name) {this.name = name;} public int getAge() {return age;} public void setAge(int age) {this.age = age;} public double getHeight() {return height;} public void setHeight(double height) {this.height = height;} public String getPhone() {return phone;} public void setPhone(String phone) {this.phone = phone;} }(一)输入输出标签
用于页面数据的赋值、输出、移除、异常捕获,包含 4 个核心标签:<c:set>、<c:out>、<c:remove>、<c:catch>
1.<c:set>:输入标签
用于设置某个对象的作用范围(page/request/session/application),或修改对象的属性值。
格式:
<%-- 1. 基础赋值:向request域设置变量 --%> 格式:<c:set value="变量值" var="变量名" scope="request"/> <%-- 2. 标签体赋值:为变量名设置内容--%> 格式: <c:set var="变量名" scope="范围"> 内容 原样显示 </c:set> <%-- 3. 修改JavaBean属性(value方式)--%> <c:set target="${对象名}" property="属性名" value="属性值"/> <%-- 4. 修改JavaBean属性(标签体方式) --%> <c:set target="${对象名}" property="属性名"> 内容 </c:set>代码:
2.<c:out>:输出标签
作用:输出数据,支持默认值、转义特殊字符。
常用属性:
- value:设置输出内容
- default:数据为空时,展示默认值
- escapeXml:是否转义 HTML 特殊字符,不让它们变成 HTML 标签,默认 true
实战代码:
运行结果:
商品信息展示案例
ProductServlet.java
product.jsp
运行结果:
3.<c:remove>:移除变量
作用:移除变量。
4.<c:catch>:异常捕获
作用:捕获标签体内的异常,存储到变量中不会抛出到页面。
(二)流程控制标签
用于页面逻辑判断,包含:<c:if>(单分支)、<c:choose>(多分支)
1.<c:if>:单条件判断
条件为true时输出内容
常用属性:
test:判断条件(EL 表达式)var:存储判断结果(true/false)
实战代码:
运行结果:
2.<c:choose>:多条件判断
配合<c:when>、<c:otherwise>使用
<c:when>等价于if/else if语句,包含一个test属性
<c:otherwise>没有属性,相当于else
实战代码:
输出:良好
(三)迭代标签:<c:forEach>
作用:循环遍历集合),或执行指定次数的循环
常用属性:
begin:循环起始值end:循环结束值step:步长items:要遍历的集合var:遍历的临时变量varStatus:循环状态对象(count:序号、index:索引、first/last:是否首尾)
1. 循环指定次数
<%-- 循环5次,输出Hello --%> <c:forEach begin="1" end="5" step="1"> Hello world!<br> </c:forEach>运行结果:
2. 循环访问集合元素
运行结果:
集合遍历:人员信息列表展示案例
PersonServlet.java
person.jsp
打印出所有人员的详细信息
运行结果: