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.pswp.cn/diannao/79769.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/79769.shtml
英文地址,請注明出處:http://en.pswp.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數據…