从 01 开始 从 01 开始
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 新闻合订本
    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档

晓林

程序猿,自由职业者,博主,英语爱好者,健身达人
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 新闻合订本
    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档
  • JavaSE

  • JavaSenior

  • JavaEE

  • JavaWeb

    • 服务器软件

    • 环境管理和配置管理-科普篇
    • Servlet 入门

      • 什么是 Servlet
      • Servlet 入门案例
      • Servlet 生命周期
      • Servlet 中的注解
      • Tomcat 集成 IDEA
      • Servlet 体系结构
      • HTTP 协议基础
      • 深入 request 和 response 对象
      • request 对象基本使用
      • request 其他功能
      • Servlet 实现登录功能
      • HTTP 协议基础-响应
      • Response 对象基本使用
      • response 对象之重定向
      • response 输出字符到浏览器
      • response 输出字节数据
      • 验证码案例
      • ServletContext
      • 文件下载案例
      • Cookie 笔记
      • Cookie 的更多细节
      • Cookie 实践:记住上次访问时间
      • JSP 入门
      • JSP 的内置对象和案例
      • IDEA 与 JavaWeb 的小技巧
      • Session 笔记
      • 验证码案例
      • JSP 深入学习
      • MVC 开发模式
      • EL 表达式和 JSTL 标签
      • JSTL 标签库
        • 使用步骤
        • 常用的 JSTL 标签
      • 案例:列表的增删改查
      • Filter 学习
      • Filter 案例
      • Listener 学习
      • Java 中的 Ajax
      • Java 中的 JSON
  • Spring

  • 主流框架

  • SpringMVC

  • SpringBoot

  • Java
  • JavaWeb
  • Servlet 入门
2023-04-17
目录

JSTL 标签库

# 125.JSTL 标签库

JSTL,全称 JavaServer Pages Tag Library,译为 JSP 标准标签库,是由 Apache 组织提供的开源的免费的 JSP 标签,用于简化和替换 JSP 页面上的 Java 代码

# 使用步骤

我们在 JSP 深入学习 里已经讲过如何使用了,这里简单回顾下:

  1. 导入 JSTL 相关 jar 包:jstl-impl.jar,javax.servlet.jsp.jstl.jar
  2. 引入标签库:在 JSP 里使用 taglib 指令,例如 <%@ taglib %>
  3. 使用 JSTL 标签 ‍ 如果遇到报错:

无法在 web.xml 或使用此应用程序部署的 jar 文件中解析绝对 uri:[http://java.sun.com/jsp/jstl/core] ‍ 可以尝试这样解决:打开 IDEA 的项目设置,查看 2 是否有 lib 目录,且里面有 jar 包,如果没有,则点击 3 就会生成 lib 目录,并会在编译的输出路径下有 jar 包

‍

# 常用的 JSTL 标签

标签有很多,我们仅仅介绍常用的:

  • if:相当于 Java 代码的 if 语句
  • choose:相当于 Java 代码的 switch 语句
  • foreach:相当于 Java 代码的 for 语句 ‍

# if 标签

if:相当于 java 代码的 if 语句

属性:test 是必须属性,接受 boolean 表达式

  • 如果表达式为 true,则显示 if 标签体内容,如果为 false,则不显示标签体内容
  • 一般情况下,test 属性值会结合 EL 表达式一起使用
  • 注意: c: if 标签没有 else 情况,想要 else 情况,则可以在定义一个 c: if 标签 ‍
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<html>
<head>
    <title>if标签</title>
</head>
<body>
    <c:if test="true">
        <h1>我是真...</h1>
    </c:if>

    <%
        //判断request域中的一个list集合是否为空,如果不为null则显示遍历集合
        List list = new ArrayList();
        list.add("aaaa");
        request.setAttribute("list",list);
        request.setAttribute("number",4);
    %>

    <c:if test="${not empty list}">
        遍历集合...
    </c:if>
  

    <c:if test="${number % 2 != 0}">  ${number}为奇数 </c:if>
    <c:if test="${number % 2 == 0}">  ${number}为偶数 </c:if>

</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

# choose 标签

相当于 java 代码的 switch 语句

  1. 使用 choose 标签声明 相当于 switch 声明

  2. 使用 when 标签做判断 相当于 case

  3. 使用 otherwise 标签做其他情况的声明 相当于 default ‍ 我们写一个小案例:完成数字编号对应星期几的转换

  4. 域中存储一数字

  5. 使用 choose 标签取出数字 相当于 switch 声明

  6. 使用 when 标签做数字判断 相当于 case

  7. otherwise 标签做其他情况的声明 相当于 default

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
    <head>
        <title>choose标签</title>
    </head>
    <body>
        <%
            request.setAttribute("number",51);
        %>

        <c:choose>
            <c:when test="${number == 1}">星期一</c:when>
            <c:when test="${number == 2}">星期二</c:when>
            <c:when test="${number == 3}">星期三</c:when>
            <c:when test="${number == 4}">星期四</c:when>
            <c:when test="${number == 5}">星期五</c:when>
            <c:when test="${number == 6}">星期六</c:when>
            <c:when test="${number == 7}">星期天</c:when>

            <c:otherwise>数字输入有误</c:otherwise>
        </c:choose>
    </body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

# foreach 标签

相当于 Java 代码的 for 语句,例如我们想实现 Java 代码中的循环:

for(int i = 0; i < 10; i ++){

}
1
2
3

‍ 可以这样写

<c:forEach begin="1" end="10" var="i" step="2" varStatus="s">
    i :${i}    s.index:${s.index}   s.count:${s.count} <br>
</c:forEach>
1
2
3

‍ 属性说明:

  • begin:开始值

  • end:结束值

  • var:临时变量

  • step:步长

  • varStatus: 循环状态对象

    • index:容器中元素的索引,从 0 开始
    • count:循环次数,从 1 开始 ‍ 而如果是一个容器,Java 是这样遍历的:
List<User> list;
for(User user : list){

}
1
2
3
4

‍ 我们可以这样写:

<c:forEach items="${list}" var="str" varStatus="s">
    ${s.index} ${s.count} ${str}<br>
</c:forEach>
1
2
3

‍ 完整代码:JSTLDemo3.jsp

<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


<html>
    <head>
        <title>foreach标签</title>
    </head>
    <body>
        <c:forEach begin="1" end="10" var="i" step="2" varStatus="s">
            i :${i}    s.index:${s.index}   s.count:${s.count} <br>
        </c:forEach>

        <hr>

        <%
            List list = new ArrayList<>();
            list.add("aaa");
            list.add("bbb");
            list.add("ccc");
            request.setAttribute("list",list);
        %>

        <c:forEach items="${list}" var="str" varStatus="s">
            ${s.index} ${s.count} ${str}<br>
        </c:forEach>
    </body>
</html>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

‍ 页面显示:

i :1 s.index:1 s.count:1
i :3 s.index:3 s.count:2
i :5 s.index:5 s.count:3
i :7 s.index:7 s.count:4
i :9 s.index:9 s.count:5
0 1 aaa
1 2 bbb
2 3 ccc
1
2
3
4
5
6
7
8

‍

# 练习

需求:在 request 域中有一个存有 User 对象的 List,使用 JSTL + EL 将 list 集合数据展示到 JSP 页面的表格 table 中 ‍

<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Date" %>
<%@ page import="com.peterjxl.domain.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<html>
<head>
    <title>test</title>
</head>
<body>

<%
    List list = new ArrayList<>();
    list.add(new User("张三"));
    list.add(new User("李四"));
    list.add(new User("王五"));
    request.setAttribute("list",list);
%>

<table border="1" width="500" align="center">
    <tr>
        <th>编号</th>
        <th>姓名</th>
    </tr>
    <%--数据行--%>
    <c:forEach items="${list}" var="user" varStatus="s">
        <c:if test="${s.count % 2 != 0}">
            <tr bgcolor="red">
                <td>${s.count}</td>
                <td>${user.name}</td>
            </tr>
        </c:if>

        <c:if test="${s.count % 2 == 0}">
            <tr  bgcolor="green">
                <td>${s.count}</td>
                <td>${user.name}</td>
            </tr>
        </c:if>
    </c:forEach>

</table>
</body>
</html>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
上次更新: 2025/6/3 09:31:54
EL 表达式和 JSTL 标签
案例:列表的增删改查

← EL 表达式和 JSTL 标签 案例:列表的增删改查→

最近更新
01
新闻合订本 2025-10
10-31
02
2025 年 10 月记
10-30
03
用 AI 批量优化思源笔记排版
10-15
更多文章>
Theme by Vdoing | Copyright © 2022-2025 | 粤 ICP 备 2022067627 号 -1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式