当前位置: 首页 > news >正文

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

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

  • 前言
  • 一、什么是JSTL?(JavaServer Pages Standard Tag Library)
  • 二、使用JSTL前的准备
  • 三、核心标签库常用标签详解
    • 1. <c:out>:输出内容(替代<%= %>)
    • 2. <c:if>:条件判断(替代<% if %>)
    • 3. <c:choose> + <c:when>+ <c:otherwise>:多条件判断(替代switch)
    • 4. <c:forEach>:集合/数组遍历(重点!替代for循环)
    • 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中添加两个核心依赖:

<!-- 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文件下导入上面的包
    在这里插入图片描述

  • 在开头加入核心标签库
    在这里插入图片描述

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

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

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

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

  • 语法

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

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

  • 示例

<% 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语句。

  • 语法

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

示例

<% 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多分支判断。

语法

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

示例

<% 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、数组)

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

示例:遍历List

<% 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:遍历指定次数

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

示例:输出1-5

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

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

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

语法

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

示例:分割“a,b,c”

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

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

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

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

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

在这里插入图片描述

相关文章:

  • 【英语语法】词法---动词
  • 【Linux】进程状态
  • JavaScript 一维数组转不含零的两个数
  • Keil MDK 编译问题:last line of file ends without a newline
  • 理解 React 的 useEffect
  • 线性回归之正则化(regularization)
  • Pandas数据可视化
  • 中科院:LRM在简单问题上缺失快思考能力
  • 抽象工厂模式及其在自动驾驶中的应用举例(c++代码实现)
  • Vivado中Tri_mode_ethernet_mac的时序约束、分析、调整——(五)调试注意的问题
  • Java编程基础(第一篇:变量)
  • prim最小生成树+最大生成树【C++】板子题
  • 【Sa-Token】学习笔记05 - 踢人下线源码解析
  • STM32嵌入式
  • JUC复习及面试题学习
  • OpenCV基础01-图像文件的读取与保存
  • 高并发场景下重试策略的演进设计
  • 谷歌相机最新版:专业摄影,一键掌握
  • 基于 Spring Boot 瑞吉外卖系统开发(五)
  • typeScript基础(类型)
  • 《大家聊中国式现代化》明天全网推出
  • 人民日报头版开新栏:收官之年干劲满,决战决胜勇争先
  • 江南大部、江淮南部等地今起有较强降雨,水利部部署防范工作
  • 特朗普就防卫负担施压日本,石破茂:防卫费应由我们自主决定
  • 《王牌对王牌》确认回归,“奔跑吧”将有主题乐园
  • 2025年世界互联网大会亚太峰会人工智能大模型论坛举行