天天看點

JSTL 核心标簽庫使用總結

JSTL全稱是Java标準标簽庫,是為了彌補預設JSP在視圖表現方面的不足而出現的。其實在2017年的Java開發中用到的不是很多了。現在新的模闆引擎比如Thymeleaf這樣的貌似更加流行。不過我最近在學習Java,順便也把JSTL這部分内容看了看,做了一點總結。要檢視JSTL的完整官方文檔,可以檢視 Oracle的Java EE 5官方教程

安裝JSTL

JSTL預設沒有包含在Tomcat這類伺服器中,是以我們第一件事情就是下載下傳它的Jar包。下載下傳連結在

JSP 标準标簽庫

,我們需要下載下傳API和實作這兩個Jar包。然後将這兩個Jar包添加到我們項目的類路徑中。在Java EE項目中,也就是

WEB-INF/lib

檔案夾下。

JSTL是以标簽庫的形式存在,是以要在JSP中使用JSTL,要添加相應的标簽庫。以下會逐一說明。

核心标簽庫

核心标簽庫提供了JSTL最核心的功能,核心标簽庫的字首是c,要使用核心标簽庫,需要在JSP中添加如下一行:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
           

變量支援

<c:set>

标簽提供了JSTL的變量支援,我們可以使用這個标簽在JSP中定義變量。它有三個屬性:

var

定義變量名稱;

scope

定義變量範圍,常用的有sessionScope、requestScope、pageContext這幾種,預設是pageContext;

value

是變量的值,支援EL表達式,可以從其他地方擷取任意類型的對象。以下兩種方式都可以定義

<c:set>

标簽。

<c:set var="users" value="${users}"/>

<c:set var="users">${users}</c:set>
           

相應的還有

<c:remove>

标簽,用來删除

<c:set>

定義的标簽。

<c:remove var="usersLessThan3"/>
           

條件标簽

<c:if>

用于條件判斷,如果條件符合,就會顯示或執行指定的内容。必需屬性test用來指定判斷條件。

<c:set var="condition" value="${true}"/>
<c:if test="${condition}">
    <p>如果條件為真,就會顯示這段話。</p>
</c:if>
           

如果需要多重條件判斷,則可以使用

<c:choose>

标簽。還有

<c:otherwise>

标簽在沒有比對的時候才會執行。

<c:set var="choice" value="1"/>
<c:choose>
    <c:when test="${choice==1}">
        <p>如果選擇是1,顯示這裡。</p>
    </c:when>
    <c:when test="${choice==2}">
        <p>如果選擇是2,顯示這裡。</p>
    </c:when>
    <c:when test="${choice==3}">
        <p>如果選擇是3,顯示這裡。</p>
    </c:when>
    <c:when test="${choice==4}">
        <p>如果選擇是4,顯示這裡。</p>
    </c:when>
    <c:otherwise>
        <p>否則顯示這裡</p>
    </c:otherwise>
</c:choose>
           

循環标簽

<c:forEach>

用來疊代一組内容集合,分為内容循環和次數循環兩種。

内容循環

内容循環用來循環指定的内容,items屬性指定要循環的集合,var屬性指定循環變量,在循環中會把集合中的每個值賦給循環變量,然後就可以引用循環變量輸出某些值了。

<c:forEach var="user" items="${users}">
    <tr>
        <td>${user.id}</td>
        <td>${user.username}</td>
        <td>${user.password}</td>
        <td>${user.birthday}</td>
    </tr>
</c:forEach>
           

次數循環

如果需要按一定次數進行循環,

<c:forEach>

也可以滿足。這時候需要另外兩個屬性:varStatus表示循環狀态,有幾個屬性可供使用,這裡使用index來檢視循環次數;begin和end指定起止索引。

<c:forEach varStatus="loop" begin="0" end="5">
    <tr>
        <td>${loop.index}</td>
    </tr>
</c:forEach>
           

當然,這兩種方式也可以混用。

URL标簽

每個Web項目都有自己的名稱,在釋出到應用伺服器的時候都有一個對應的名稱作為URL的一部分。

<c:url>

标簽可以自動處理項目名和URL之間的關系。假設目前頁面名為

core.jsp

,那麼一下語句可能會生成

/jstl_samples_war_exploded/core.jsp

這條URL。

<c:url value="/core.jsp"/>
           

輸出标簽

<c:out>

這個标簽用來在JSP中輸出資訊。這個标簽我個人認為用處并不大,因為有EL表達式這麼友善的東西。

<p>使用者個數是:<c:out value="${users.size()}"/></p>
           

除了核心标簽庫之外,JSTL還提供了幾個标簽庫用來處理XML、執行SQL、國際化處理等等。不過随着Java和Java生态的演變,很多架構可以在服務端很好的完成這些工作。是以在JSP中處理這些沒有太大的意義了。是以,這裡就隻介紹核心标簽庫這部分内容。