Jstl標籤

JSTL

什麼是jstl

jstl是java中的一個定製標籤庫集

爲什麼要使用JSTL

1.實現了jsp頁面中的代碼複用,重複使用功能相同的代碼

2.書寫jsp頁面時可讀性更強,以標籤對的形式出現和前端代碼更加相似

jstl的環境搭建

下載jstl的jar包,添加到web目錄下

jstl的使用

先使用<%@ page url="" prefic="c" %>引入你需要的標籤包

jstl的四大分類

核心標籤 格式化標籤 SQL標籤 XML標籤

EL表達式:與JSTL搭配使用,用於獲取程序中的變量

EL表達式的格式:用美元符號‘$’定界,內容包括在花括號'{}'中

${表達式}

例子: . 與 [] 通常情況下可以通用

"$ {users.sex}"  <===> "${user["sex"]}"

特殊情況下不能通用:

1.包含特殊字符

${users.first-name} 這是錯誤的

${user["first-name"]} 這纔是正確的

2.通過變量動態取值:只能寫--->${users[param]}

EL的類型轉換(count爲字符串會自動轉換爲int):"${param.count+20}"

EL判斷對象是否爲空的方法:"${empty username}" 這個判空無論對象爲空還是內容爲空,都會返回true

JSTL標籤的使用

1.out標籤


<!-- 使用out標籤輸出常量-->
<c:out values="this is a const values"></c:out>
<!-- 使用out標籤輸出變量-->
<%  session.setAttribute("name","Jessica")  %>
<c:out values="${name}"></c:out>
<!-- 當變量不存在時,輸出default中的內容-->
<c:out values="${name2}" default="" ></c:out>
<!-- 當輸出的內容中存在需要轉義的特殊符號時-->
<c:out values="&ltout標籤&gt" escapeXml="false" ></c:out>

2.set標籤


<!--存值到scope中-01-->
<c:set values="todays" var="day" scope="session"></c:set>
<!--存值到scope中-02-->
<c:set  var="day" scope="application">today</c:set>
<!--存值都javaBean中-->
<jsp:useBean id="對象名" class="包括包名具體類的地址">
<c:set  target="${對象名}" property="屬性名" values="變量值" ></c:set>
<c:set  target="${對象名}" property="屬性名"  >變量值</c:set>

3.remove標籤


<c:set values="todays" var="day" scope="session"></c:set>
<c:remove var="day" /> 

4.catch標籤

catch標籤中可以包含那些容易出錯的JSTL標籤

<!-- 將錯誤信息存到變量error中-->
<c:catch var="error">
<c:set target="aa" property="bb" values="cc"></c:set>
</c:catch>
<c:out values="${error}"></c:out>

5.if標籤

同程序中的if作用相同,用來實現分支條件控制

1.test屬性用於存放判斷的條件,一般使用EL表達式來編寫

2.var指定名稱用來存放判斷的結果類型爲true或false

3.scope用來存放var屬性存放的範圍


<input type="text" value="${param.score}"/>

<c:if test="${param.scope>=90}" var="result" scope="">
    <c:out value=恭喜你的成績大於90""></c:out>
    </c:if>
<c:out values="${result}"></c:out>

6.choose when otherwise標籤 類似switch..case

通常這三個標籤被放在一起配合使用

c:choose標籤嵌套在c:whenc:otherwise的外面,作爲他們的父標籤使用

其中choose和when也可以一起組合使用


<!-- choose、when、otherwise -->
<input type="text" value="${param.score}"/>
<c:choose>
    <c:when test="${param.score>=90 && param.score<=100}">
        <c:out value="優秀"></c:out>
    </c:when>
    <c:when test="${param.score>=80 && param.score<90}">
        <c:out value="良好"></c:out>
    </c:when>
    <c:when test="${param.score>=70 && param.score<80}">
        <c:out value="中等"></c:out>
    </c:when>
    <c:when test="${param.score>=60 && param.score<70}">
        <c:out value="及格"></c:out>
    </c:when>
    <c:when test="${param.score<60 && param.score>=0}">
        <c:out value="不及格"></c:out>
    </c:when>
    <!-- otherwise可以不寫,相當於default-->
    <c:otherwise>
        <c:out value="您的輸入有問題"></c:out>
    </c:otherwise>
</c:choose>

7.foreach標籤

根據循環條件遍歷集合(Collection)中的元素

var設定變量名用於存儲從集合中取出元素(必須無默認值)

items指定要遍歷的集合(必須無默認值)

begin,end用於知道遍歷的起始位置和終止位置(有默認)

step指定循環的步長(有默認)

varStatus通過index,count,first,last幾個狀態值,描述begin和end子集中的元素的狀態


<!-- forEach標籤的用法 -->
<%
    List animals = new ArrayList();
    animals.add("tiger");
    animals.add("dog");
    animals.add("elephant");
    animals.add("lion");
    animals.add("bird");
    animals.add("fish");
    animals.add("bear");
    request.setAttribute("animals", animals);
%>

<!--全部遍歷-->
<c:forEach var="ani" items="${animals}">
    <c:out value="${ani}"></c:out><br>
</c:forEach>
<c:out value="-------------------------"></c:out><br>
<!--部分遍歷-->
<c:forEach var="ani" items="${animals}" begin="2" end="4">
    <c:out value="${ani}"></c:out><br>
</c:forEach>
<c:out value="-------------------------"></c:out><br>
<!--部分遍歷並指定步長-->
<c:forEach var="ani" items="${animals}" begin="2" end="4" step="2">
    <c:out value="${ani}"></c:out><br>
</c:forEach>
<c:out value="-------------------------"></c:out><br>
<!--部分遍歷並描述狀態-->
<c:forEach var="ani" items="${animals}" begin="2" end="4" varStatus="a">
    <c:out value="原集合中的索引值${a.index}"></c:out><br>
    <c:out value="總共已迭代的次數${a.count}"></c:out><br>
    <c:out value="判斷當前元素是否是子集中的第一個值${a.first}"></c:out><br>
    <c:out value="判斷當前元素是否是子集中的最後一個值${a.last}"></c:out><br>
    <c:out value="======"></c:out><br>
</c:forEach><br>

8.fortokens標籤,相當於split()

用於瀏覽字符串,並根據指定字符串進行截取

items指定被迭代的字符串

delims指定使用的分隔符

var指定用來存放遍歷到的成員


<c:forTokens items="010-88668543-1033" delims="-" var="num">
    <c:out value="${num}"></c:out><br>
</c:forTokens>

8.import標籤的用法

可以把其他靜態或動態文件包含到當前jsp頁面中

jsp:include的區別爲:只能包含同一個web應用中的文件

c:import可以包含其他web應用中的文件,甚至是網咯上的資源


<!-- import標籤的用法 -->
<!-- 導入網絡上的絕對路徑 -->
<c:catch var="error09">
    <c:import url="http://www.imooc.com"></c:import>
</c:catch>
<c:out value="${error09}"></c:out><br>
<!-- 導入相對路徑文件 -->
<c:catch var="error08">
    <c:import url="tt.txt" charEncoding="gbk"></c:import>
</c:catch>
<c:out value="${error08}"></c:out><br>

<!--pageScope、requestScope、sessionScope和applicationScope都是EL 的隱含對象,由它們的名稱可以很容易猜出它們所代表的意思,例如:${sessionScope.username}是取出Session範圍的username 變量。-->
<!-- var及scope屬性的用法 -->
<c:catch var="error07">
    <c:import url="tt.txt" var="tt" scope="session" charEncoding="gbk"></c:import>
</c:catch>
<c:out value="${error07}"></c:out><br>
<c:out value="import標籤存儲的tt字符串變量值爲:${sessionScope.tt}"></c:out><br>


9.redirect標籤

該標籤用來實現請求的重定向,同時可以在URL中加入指定的參數

url指定重定向頁面的地址


<c:redirect url="first.jsp">
<c:param  name="username">admin</c:param>
 <c:param  name="password">123</c:param>
</c:redirect>

10.url標籤

value 表示url路徑值

var 將url路徑存儲在變量中

scope var變量的範圍


<c:set var="parturl"> aa</c:set>
<c:url value="http://localhost:8080/${parturl}" var="newUrl" scope="session"></c:url>
<a href="${newUrl}">型的url</a>

jstl函數

使用JSTL需要先引入

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
fn:contains 判斷字符串是否包含另外一個字符串 <c:if test="${fn:contains(name, searchString)}"> 
fn:containsIgnoreCase 判斷字符串是否包含另外一個字符串(大小寫無關) <c:if test="${fn:containsIgnoreCase(name, searchString)}"> 
fn:endsWith 判斷字符串是否以另外字符串結束 <c:if test="${fn:endsWith(filename, ".txt")}"> 
fn:escapeXml 把一些字符轉成XML表示,例如<字符應該轉爲< ${fn:escapeXml(param:info)} 
fn:indexOf 子字符串在母字符串中出現的位置 ${fn:indexOf(name, "-")} 
fn:join 將數組中的數據聯合成一個新字符串,並使用指定字符格開 ${fn:join(array, ";")} 

發佈了29 篇原創文章 · 獲贊 41 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章