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
非常感謝您的閱讀,喜歡的話記得三連哦 |