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" %>
三、核心标签库常用标签详解
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}
)var
和scope
:可选,将条件结果保存到变量中
示例
<% 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}"><!-- 条件1为true时执行 --></c:when><c:when test="${条件2}"><!-- 条件2为true时执行 --></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
),还有其他功能库:
- fmt标签库:格式化数据(日期、数字、国际化)
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <fmt:formatDate value="${now}" pattern="yyyy-MM-dd" /> <!-- 格式化日期 -->
- fn标签库:字符串处理函数(长度、替换、分割等)
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 字符串长度:${fn:length("hello")} <!-- 输出:5 -->
五、总结:为什么必须学JSTL?
- 告别杂乱脚本:用
<c:if>
替代<% if %>
,用<c:forEach>
替代Java循环,页面更干净易维护。 - 安全可靠:
<c:out>
自动转义特殊字符,防止XSS攻击;标签语法规范,减少语法错误。 - 功能全面:条件判断、循环、集合遍历、字符串处理全搞定,覆盖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
非常感谢您的阅读,喜欢的话记得三连哦 |