Jsp技术入门指南【九】详细讲解JSTL

Jsp技术入门指南【九】详细讲解JSTL

  • 前言
  • [一、什么是JSTL?(JavaServer Pages Standard Tag Library)](#一、什么是JSTL?(JavaServer Pages Standard Tag Library))
  • 二、使用JSTL前的准备
  • 三、核心标签库常用标签详解
    • [1. <c:out>:输出内容(替代<%= %>)](#1. <c:out>:输出内容(替代<%= %>))
    • [2. <c:if>:条件判断(替代<% if %>)](#2. <c:if>:条件判断(替代<% if %>))
    • [3. <c:choose> + <c:when>+ <c:otherwise>:多条件判断(替代switch)](#3. <c:choose> + <c:when>+ <c:otherwise>:多条件判断(替代switch))
    • [4. <c:forEach>:集合/数组遍历(重点!替代for循环)](#4. <c:forEach>:集合/数组遍历(重点!替代for循环))
    • [5. <c:forTokens>:按分隔符分割字符串并遍历](#5. <c:forTokens>:按分隔符分割字符串并遍历)
  • 四、其他常用标签库(了解即可)
  • 五、总结:为什么必须学JSTL?

前言

  • 在之前的博客中,我们已经深入剖析了JSP页面的核心结构,从基础语法到动态交互的实现,逐步揭示了动态网页开发的底层逻辑。
  • 通过这些内容的学习,相信我们已经对JSP的开发有了更清晰的认识,并且掌握了高效开发动态Web应用的关键技能

接下来,我们将继续深入JSP的世界,探索JSTL的强大功能。

  • JSTL(JavaServer Pages Standard Tag Library)是JSP开发中不可或缺的重要工具,它提供了一组标准化的标签,用于简化JSP页面的开发过程。
  • 通过使用JSTL,我们可以减少页面中的Java脚本代码,提高代码的可读性和可维护性,同时还能实现复杂的页面逻辑功能。JSTL不仅支持常见的结构性任务,如迭代和条件判断,还提供了用于处理XML文档、国际化标签以及SQL标签等功能

在本篇博客中,我们将详细讲解JSTL的各个功能模块,包括核心标签库、格式化标签库、SQL标签库、XML标签库以及JSTL函数。我们将通过具体的代码示例和实际应用场景,帮助你快速掌握JSTL的使用方法,让你在JSP开发中更加得心应手。

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343

我的JSP知识文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_12950980.html?spm=1001.2014.3001.5482


一、什么是JSTL?(JavaServer Pages Standard Tag Library)

一句话总结 :JSTL是JSP的"标准标签库",提供了一系列XML风格的标签(如<c:if><c:forEach>),用来替代JSP中的Java脚本(如<% if %><% for %>),让页面更简洁、更规范!

核心优势

  • 告别<% %>脚本,用标签实现逻辑(条件判断、循环、输出等)
  • 跨容器通用,所有支持JSTL的服务器都能运行
  • 功能强大,涵盖流程控制、集合遍历、字符串处理等常用操作

二、使用JSTL前的准备

pom.xml中添加两个核心依赖:

xml 复制代码
<!-- JSTL核心API -->
<dependency>
    <groupId>javax.servlet.jsp.jstl</groupId>
    <artifactId>jstl-api</artifactId>
    <version>1.2</version>
</dependency>
<!-- 标准标签库实现 -->
<dependency>
    <groupId>taglibs</groupId>
    <artifactId>standard</artifactId>
    <version>1.1.2</version>
</dependency>
  • 导入之后的样子

  • 然后在项目结构里lib文件下导入上面的包

  • 在开头加入核心标签库

java 复制代码
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b4f4022fd6ba4781ab8bc41e87ff2993.png)

三、核心标签库常用标签详解

1. <c:out>:输出内容(替代<%= %>)

  • 作用

    安全输出数据,自动转义特殊字符(如<转成<),防止XSS攻击。

  • 语法

jsp 复制代码
<c:out value="${表达式}" [default="默认值"] />
  • value:要输出的EL表达式

  • default:可选,表达式为null时显示默认值

  • 示例

java 复制代码
<% request.setAttribute("name", "小明"); %>
<!-- 普通输出 -->
老写法:<%= request.getAttribute("name") %>  
新写法:<c:out value="${name}" />  <!-- 输出:小明 -->  

<!-- 处理null情况 -->
<% request.removeAttribute("name"); %>
<c:out value="${name}" default="未命名" />  <!-- 输出:未命名 -->  

2. <c:if>:条件判断(替代<% if %>)

  • 作用

    根据条件决定是否执行标签体内容,类似Java的if语句。

  • 语法

java 复制代码
<c:if test="${条件表达式}" var="变量名" scope="作用域">
    <!-- 条件为true时执行这里 -->
</c:if>
  • test:必填,EL表达式(如${age >= 18}
  • varscope:可选,将条件结果保存到变量中

示例

java 复制代码
<% request.setAttribute("score", 85); %>
<c:if test="${score >= 90}">
    <p>优秀!</p>
</c:if>
<c:if test="${score >= 60 && score < 90}">
    <p>合格!</p>  <!-- 输出:合格 -->
</c:if>

3. <c:choose> + <c:when>+ <c:otherwise>:多条件判断(替代switch)

作用

实现类似Java的switch-case多分支判断。

语法

java 复制代码
<c:choose>
    <c:when test="${条件1}">
        <!-- 条件1为true时执行 -->
    </c:when>
    <c:when test="${条件2}">
        <!-- 条件2为true时执行 -->
    </c:when>
    <c:otherwise>
        <!-- 以上条件都不满足时执行 -->
    </c:otherwise>
</c:choose>

示例

java 复制代码
<% request.setAttribute("day", 3); %>  <!-- 1-7代表周一到周日 -->
<c:choose>
    <c:when test="${day == 1}">周一</c:when>
    <c:when test="${day == 2}">周二</c:when>
    <c:when test="${day == 3}">周三</c:when>  <!-- 输出:周三 -->
    <c:otherwise>其他</c:otherwise>
</c:choose>

4. <c:forEach>:集合/数组遍历(重点!替代for循环)

作用

遍历List、数组、Map等集合,是JSTL中最常用的标签之一。

语法1:遍历容器(如List、数组)

java 复制代码
<c:forEach items="${集合}" var="元素" [varStatus="状态变量"]>
    <!-- 循环体,用${元素}获取当前元素 -->
</c:forEach>
  • items:要遍历的集合(EL表达式,如${list}
  • var:当前元素的变量名
  • varStatus:可选,获取循环状态(索引、是否第一个元素等)

示例:遍历List

java 复制代码
<% 
  List<String> fruits = Arrays.asList("苹果", "香蕉", "橙子");
  request.setAttribute("fruits", fruits);
%>
<ul>
  <c:forEach items="${fruits}" var="fruit" varStatus="status">
    <li>第${status.index+1}个水果:${fruit}</li>  <!-- 输出3个列表项 -->
  </c:forEach>
</ul>
  • status.index:当前索引(从0开始)
  • status.count:当前循环次数(从1开始)

语法2:遍历指定次数

java 复制代码
<c:forEach begin="起始值" end="结束值" step="步长" var="变量">
    <!-- 循环体,变量从begin到end,每次+step -->
</c:forEach>

示例:输出1-5

java 复制代码
<c:forEach begin="1" end="5" step="1" var="i">
    ${i}  <!-- 输出:1 2 3 4 5 -->
</c:forEach>

5. <c:forTokens>:按分隔符分割字符串并遍历

作用

将字符串按指定分隔符(如逗号、分号)拆分成多个子串,逐个遍历(类似Java的split()+循环)。

语法

java 复制代码
<c:forTokens items="待分割字符串" delims="分隔符" var="子串" [varStatus="状态变量"]>
    <!-- 循环体,用${子串}获取当前子串 -->
</c:forTokens>

示例:分割"a,b,c"

java 复制代码
<c:forTokens items="a,b,c" delims="," var="token">
    ${token}  <!-- 输出:a b c -->
</c:forTokens>
  • delims可包含多个分隔符(如delims=",; "表示逗号、分号、空格)

四、其他常用标签库(了解即可)

JSTL除了核心标签库(core),还有其他功能库:

  1. fmt标签库 :格式化数据(日期、数字、国际化)

    java 复制代码
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    <fmt:formatDate value="${now}" pattern="yyyy-MM-dd" />  <!-- 格式化日期 -->
  2. fn标签库 :字符串处理函数(长度、替换、分割等)

    java 复制代码
    <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
    字符串长度:${fn:length("hello")}  <!-- 输出:5 -->

五、总结:为什么必须学JSTL?

  1. 告别杂乱脚本 :用<c:if>替代<% if %>,用<c:forEach>替代Java循环,页面更干净易维护。
  2. 安全可靠<c:out>自动转义特殊字符,防止XSS攻击;标签语法规范,减少语法错误。
  3. 功能全面:条件判断、循环、集合遍历、字符串处理全搞定,覆盖90%以上的页面逻辑需求。

以上就是这篇博客的全部内容,下一篇我们将继续探索JSP的更多精彩内容。

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343

我的JSP知识文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_12950980.html?spm=1001.2014.3001.5482

|--------------------|
| 非常感谢您的阅读,喜欢的话记得三连哦 |

相关推荐
月临水几秒前
Windows 11设置开机自动运行 .jar 文件
java·windows·jar
越城6 分钟前
C 语言联合与枚举:自定义类型的核心解析
c语言·开发语言
weixin_3077791310 分钟前
实现Azure Function安全地请求企业内部API返回数据
开发语言·python·云计算·azure
Craaaayon12 分钟前
JVM虚拟机--JVM的组成
java·jvm·nio
无敌的牛13 分钟前
list容器介绍及模拟实现和与vector比较
开发语言·数据结构·list
lqqjuly16 分钟前
超详细VMware虚拟机扩容磁盘容量-无坑版
linux·ubuntu
Mintopia16 分钟前
Three.js 第四天几何体顶点组设置
前端·javascript·three.js
小菜刀刀18 分钟前
XSS跨站脚本攻击漏洞
开发语言·前端·javascript
圣火喵喵教19 分钟前
程序员的自我修养 - 第三章 目标文件里面有什么
linux·操作系统
星空寻流年23 分钟前
css3新特性第四章(渐变)
前端·javascript·css3