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

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/79769.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux操作系统--进程的创建和终止

目录 1.进程创建 1.1fork()函数初识 1.2写时拷贝 1. 提升系统效率 2. 隔离错误影响 3. 支持并行计算 2.进程终止&#xff1a; 2.1进程退出场景&#xff1a; 2.2进程常见退出方法&#xff1a; 2.3_exit()系统调用接口 2.4exit函数 2.5return退出 1.进程创建 1.1for…

OSPF综合实验——企业边界路由器、LSA收敛

IP划分粗略记号&#xff0c;方便后续配置 配置IP和环回--->ISP的IP配置和cheat认证---->配置OSPF和RIP---->企业边界路由网段汇总---->特殊区域---> 缺省路由&#xff0c;重分发---->nat配置---->实现全网通 路由器配置IP和环回地址 <Huawei>sys…

Java【网络原理】(4)HTTP协议

目录 1.前言 2.正文 2.1自定义协议 2.2HTTP协议 2.2.1抓包工具 2.2.2请求响应格式 2.2.2.1URL 2.2.2.2urlencode 2.2.3认识方法 2.2.3.1GET与POST 2.2.3.2PUT与DELETE 2.2.4请求头关键属性 3.小结 1.前言 哈喽大家好啊&#xff0c;今天来继续给大家带来Java中网络…

Android学习总结之APK打包流程

一、预处理阶段&#xff08;编译前准备&#xff09; 1. AIDL 文件处理&#xff08;进程间通信基础&#xff09; 流程&#xff1a; 用于实现 Android 系统中不同进程间的通信&#xff08;IPC&#xff09;。在项目构建时&#xff0c;AIDL 编译器会将 .aidl 文件编译为 Java 接口…

BDO分厂积极开展“五个一”安全活动

BDO分厂为规范化学习“五个一”活动主题&#xff0c;按照“上下联动、分头准备 、差异管理、资源共享”的原则&#xff0c;全面激活班组安全活动管理新模式&#xff0c;正在积极开展班组安全活动&#xff0c;以单元班组形式对每个班组每周组织一次“五个一”安全活动。 丁二醇单…

【音视频】FLV格式分析

FLV概述 FLV(Flash Video)是Adobe公司推出的⼀种流媒体格式&#xff0c;由于其封装后的⾳视频⽂件体积⼩、封装简单等特点&#xff0c;⾮常适合于互联⽹上使⽤。⽬前主流的视频⽹站基本都⽀持FLV。采⽤FLV格式封装的⽂件后缀为.flv。 FLV封装格式是由⼀个⽂件头(file header)和…

Java表达式1.0

Java开发工具 在当今的Java开发领域&#xff0c;IntelliJ IDEA已然成为了众多开发者心目中的首选利器&#xff0c;它被广泛认为是目前Java开发效率最快的IDE工具。这款备受瞩目的开发工具是由JetBrains公司精心打造的&#xff0c;而JetBrains公司总部位于风景如画的捷克共和国首…

Map遍历

第一种遍历方式键找值&#xff1a; 增强for循环&#xff1a; 通过获取元素中的键&#xff0c;get到对应的值&#xff0c;通过增强for循环获取集合里的键&#xff0c;然后用get方法通过键获取值 代码演示&#xff1a; import java.text.ParseException; import java.util.*;…

内网穿透服务器—FRP

某天某刻空闲的时候跟同事聊的本地的存储服务如果我想让其他公网内的用户使用&#xff08;这个存储服务只是一个临时文件传递站&#xff0c;碎文件&#xff0c;安全低的&#xff09;&#xff0c;然后我们就探讨到了FRP一个比较久远的技术&#xff0c;来做内网穿透&#xff0c;下…

力扣每日打卡16 781. 森林中的兔子(中等)

力扣 781. 森林中的兔子 中等 前言一、题目内容二、解题方法1. 哈希函数&#xff08;来自评论区大佬的解题方法&#xff09;2.官方题解2.1 方法一&#xff1a;贪心 前言 这是刷算法题的第十六天&#xff0c;用到的语言是JS 题目&#xff1a;力扣 781. 森林中的兔子 (中等) 一、…

基于深度学习的线性预测:创新应用与挑战

一、引言 1.1 研究背景 深度学习作为人工智能领域的重要分支&#xff0c;近年来在各个领域都取得了显著的进展。在线性预测领域&#xff0c;深度学习也逐渐兴起并展现出强大的潜力。传统的线性预测方法在处理复杂数据和动态变化的情况时往往存在一定的局限性。而深度学习凭借…

黑马点评redis改 part 3

优惠券秒杀 全局唯一id 每个店铺都可以发布优惠券&#xff1a; 当用户抢购时&#xff0c;就会生成订单并保存到tb_voucher_order这张表中&#xff0c;而订单表如果使用数据库自增ID就存在一些问题&#xff1a;实际开发中数据库ID一般不会参与业务逻辑 增加一个订单号字段就好…

低代码开发平台:企业数字化转型的加速器

一、引言 在数字化时代&#xff0c;企业的转型需求日益迫切。为了在激烈的市场竞争中保持领先地位&#xff0c;企业需要快速响应市场变化、优化业务流程、提升运营效率。然而&#xff0c;传统的软件开发模式往往面临开发周期长、成本高、灵活性差等问题&#xff0c;难以满足企业…

个人所得税

文章目录 一、名词解释二、个人所得税计算方法 (举例)1.累计预扣预缴应纳税所得额、本期应预扣预缴税额2.个人所得税预扣率表一3.个人所得税计算举例 三、专项附加扣除政策介绍四、年度汇算清缴政策介绍五、常见问答 一、名词解释 累计预扣法是指扣缴义务人在一个纳税年度内预…

二进制和docker两种方式部署Apache pulsar(standalone)

#作者&#xff1a;闫乾苓 文章目录 1、二进制安装部署Pulsar(standalone)1.1 安装配置JDK1.2 下载解压pulsar安装包1.3 启动独立模式的Pulsar 集群1.4 创建主题测试1.5 向主题写入消息测试1.6 从主题中读取消息测试 2.docker安装部署Pulsar(standalone)2.1 使用docker 启动Pul…

如何在 Go 中创建和部署 AWS Lambda 函数

AWS Lambda 是一个无服务器计算平台&#xff0c;您可以使用自己喜欢的编程语言编写代码&#xff0c;无需担心设置虚拟机。 您只需为 Lambda 函数的调用次数和运行时间&#xff08;毫秒&#xff09;付费。 我们大多数人都了解 JavaScript 和 Python&#xff0c;但它们的内存效率…

STM32配置系统时钟

1、STM32配置系统时钟的步骤 1、系统时钟配置步骤 先配置系统时钟&#xff0c;后面的总线才能使用时钟频率 2、外设时钟使能和失能 STM32为了低功耗&#xff0c;一开始是关闭了所有的外设的时钟&#xff0c;所以外设想要工作&#xff0c;首先就要打开时钟&#xff0c;所以后面…

[安全实战]逆向工程核心名词详解

逆向工程核心名词详解 一、调试与执行类 1. 断点&#xff08;Breakpoint&#xff09; 定义&#xff1a;在代码中设置标记&#xff0c;使程序执行到此处时暂停类型&#xff1a; 普通断点&#xff1a;通过INT3指令实现条件断点&#xff1a;满足特定条件时触发内存断点&#xf…

Mac mini 安装mysql数据库以及出现的一些问题的解决方案

首先先去官网安装一下mysql数据库&#xff0c;基本上都是傻瓜式安装的流程&#xff0c;我也就不详细说了。 接下来就是最新版的mysql安装的时候&#xff0c;他就会直接让你设置一个新的密码。 打开设置&#xff0c;拉到最下面就会看到一个mysql的图标&#xff1a; 我设置的就是…

聚宽策略----国九条后中小板微盘小改,年化135.40%

最近在研究的聚宽策略&#xff0c;一般技术分析的我直接转qmt了&#xff0c;财务因子有一点麻烦&#xff0c;我直接利用我开发强大的服务器系统&#xff0c;直接读取信号&#xff0c;最近在优化一下系统&#xff0c;最近在开发对接bigquant的交易系统&#xff0c;完成了api数据…