1. 程式人生 > >JSTL標籤庫之核心標籤

JSTL標籤庫之核心標籤

一、JSTL標籤庫介紹  

  JSTL標籤庫的使用是為彌補html標籤的不足,規範自定義標籤的使用而誕生的。使用JSLT標籤的目的就是不希望在jsp頁面中出現java邏輯程式碼

二、JSTL標籤庫的分類

  • 核心標籤(用得最多)
  • 國際化標籤(I18N格式化標籤)
  • 資料庫標籤(SQL標籤,很少使用)
  • XML標籤(幾乎不用)
  • JSTL函式(EL函式)

三、核心標籤庫使用說明

  JSTL的核心標籤庫標籤共13個,使用這些標籤能夠完成JSP頁面的基本功能,減少編碼工作。

  從功能上可以分為4類:表示式控制標籤、流程控制標籤、迴圈標籤、URL操作標籤。
    (1)表示式控制標籤

out標籤、set標籤、remove標籤、catch標籤
    (2)流程控制標籤if標籤、choose標籤、when標籤、otherwise標籤
    (3)迴圈標籤forEach標籤、forTokens標籤
    (4)URL操作標籤import標籤、url標籤、redirect標籤、param標籤

  在JSP頁面引入核心標籤庫的程式碼為:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

3.1、表示式控制標籤——out標籤使用總結

3.1.1、<c:out>標籤的功能

  <c:out>標籤主要是用來輸出資料物件(字串、表示式)的內容或結果
  在使用Java指令碼輸出時常使用的方式為: <% out.println(“字串”)%> 或者 <%=表示式%> ,在web開發中,為了避免暴露邏輯程式碼會盡量減少頁面中的Java指令碼,使用<c:out>標籤就可以實現以上功能。

1 <c:out value=”字串”>
2 <c:out value=”EL表示式”>

  JSTL的使用是和EL表示式分不開的,EL表示式雖然可以直接將結果返回給頁面,但有時得到的結果為空,<c:out>有特定的結果處理功能,EL的單獨使用會降低程式的易讀性,建議把EL的結果輸入放入<c:out>標籤中。

3.1.2、<c:out>標籤的語法

  <c:out>標籤的使用有兩種語法格式:
    【語法1】:<c:out value=”要顯示的資料物件” [escapeXml=”true|false”] [default=”預設值”]/>
    【語法2】:<c:out value=”要顯示的資料物件” [escapeXml=”true|false”]>預設值</c:out>
  這兩種方式沒有本質的區別,只是格式上的差別。[escapeXml=”true|false”] [default=”預設值”]這些使用[]屬性表示是不是必須的。

3.1.3、<c:out>標籤的屬性

  

3.1.4、<c:out>標籤的使用範例

複製程式碼
 1 <%@ page language="java" pageEncoding="UTF-8"%>
 2 <%--引入JSTL核心標籤庫 --%>
 3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 4 <!DOCTYPE HTML>
 5 <html>
 6 <head>
 7     <title>JSTL: --表示式控制標籤“out”標籤的使用</title>
 8 </head>
 9 
10 <body>
11     <h3><c:out value="下面的程式碼演示了c:out的使用,以及在不同屬性值狀態下的結果。"/></h3>
12     <hr/>
13     <ul>
14         <%--1)直接輸出了一個字串。 --%>
15         <li>(1)<c:out value="JSTL的out標籤的使用" /></li>
16         
17         <li>(2)<c:out value="<a href='http://www.cnblogs.com/'>點選連結到部落格園</a>" /></li>
18         <%--escapeXml="false"表示value值中的html標籤不進行轉義,而是直接輸出 --%>
19         <li>(3)<c:out value="<a href='http://www.cnblogs.com/'>點選連結到部落格園</a>" escapeXml="false"/></li>
20         
21         <%--(4)字串中有轉義字元,但在預設情況下沒有轉換。 --%>
22         <li>(4)<c:out value="&lt未使用字元轉義&gt" /></li>
23         <%--5)使用了轉義字元&lt和&gt分別轉換成<>符號。 --%>
24         <li>(5)<c:out value="&lt使用字元轉義&gt" escapeXml="false"></c:out></li>
25         
26         <%--6)設定了預設值,從EL表示式${null}得到空值,所以直接輸出設定的預設值。 --%>
27         <li>(6)<c:out value="${null}">使用了預設值</c:out></li>
28         <%--7)未設定預設值,輸出結果為空。 --%>
29         <li>(7)<c:out value="${null}"></c:out></li>
30         
31         <%--8)設定了預設值,從EL表示式${null}得到空值,所以直接輸出設定的預設值。 --%>
32         <li>(8)<c:out value="${null}" default="預設值"/></li>
33         <%--9)未設定預設值,輸出結果為空。 --%>
34         <li>(9)<c:out value="${null}"/></li>
35     </ul>
36 </body>
37 </html>
複製程式碼

  執行結果如下:

  

3.2、表示式控制標籤——set標籤使用總結

3.2.1、<c:set>標籤的功能

  <c:set>標籤用於把某一個物件存在指定的域範圍內,或者將某一個物件儲存到Map或者JavaBean物件中。

3.2.2、<c:set>標籤的語法

  <c:set>標籤的編寫共有4種語法格式。
  語法1:存值,把一個值放在指定的域範圍內。
    <c:set value=”值1” var=”name1” [scope=”page|request|session|application”]/>
    含義:把一個變數名為name1值為“值1”的變數儲存在指定的scope範圍內。
  語法2:
    <c:set var=”name2” [scope=”page|request|session|application”]>
      值2
    </c:set>
    含義:把一個變數名為name2,值為值2的變數儲存在指定的scope範圍內。
  語法3:
    <c:set value=”值3” target=”JavaBean物件” property=”屬性名”/>
    含義:把一個值為“值3”賦值給指定的JavaBean的屬性名。相當與setter()方法。
  語法4:
    <c:set target=”JavaBean物件” property=”屬性名”>
      值4
    </c:set>
    含義:把一個值4賦值給指定的JavaBean的屬性名。
  從功能上分語法1和語法2、語法3和語法4的效果是一樣的,只是把value值放置的位置不同,至於使用那個根據個人的喜愛,語法1和語法2是向scope範圍內儲存一個值,語法3和語法4是給指定的JavaBean賦值。

3.2.3、<c:set>標籤的屬性

  

3.2.4、<c:set>標籤的使用範例

複製程式碼
  1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2 <%--引入JSTL核心標籤庫 --%>
  3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
  4 <%--使用JSP的指令元素指定要使用的JavaBean --%>
  5 <jsp:useBean id="person" class="javabean.Person"/>
  6 <%--負責例項化Bean,id指定例項化後的物件名,可以通過${person}得到person在記憶體中的值
  7 (或者使用person.toString()方法)。 --%>
  8 <!DOCTYPE HTML>
  9 <html>
 10 <head>
 11 
 12 <title>JSTL: --表示式控制標籤“set”標籤的使用</title>
 13 
 14 </head>
 15 
 16 <body>
 17     <h3>程式碼給出了給指定scope範圍賦值的示例。</h3>
 18     <ul>
 19         <%--通過<c:set>標籤將data1的值放入page範圍中。--%>
 20         <li>把一個值放入page域中:<c:set var="data1" value="xdp" scope="page"/></li>
 21         <%--使用EL表示式從pageScope得到data1的值。--%>
 22         <li>從page域中得到值:${pageScope.data1}</li>
 23         
 24         <%--通過<c:set>標籤將data2的值放入request範圍中。--%>
 25         <li>把一個值放入request域中:<c:set var="data2" value="gacl" scope="request"/></li>
 26         <%--使用EL表示式從requestScope得到data2的值。--%>
 27         <li>從request域中得到值:${requestScope.data2}</li>
 28         
 29         <%--通過<c:set>標籤將值name1的值放入session範圍中。--%>
 30         <li>把一個值放入session域中。<c:set value="孤傲蒼狼" var="name1" scope="session"></c:set></li>
 31         <%--使用EL表示式從sessionScope得到name1的值。--%>
 32         <li>從session域中得到值:${sessionScope.name1} </li>
 33         
 34         <%--把name2放入application範圍中。 --%>
 35         <li>把一個值放入application域中。<c:set var="name2" scope="application">白虎神皇</c:set></li>
 36         <%--使用EL表示式從application範圍中取值,用<c:out>標籤輸出使得頁面規範化。 --%>
 37         <li>使用out標籤和EL表示式巢狀從application域中得到值: 
 38              <c:out value="${applicationScope.name2}">未得到name的值</c:out>
 39         </li>
 40         
 41         <%--不指定範圍使用EL自動查詢得到值 --%> 
 42         <li>未指定scope的範圍,會從不同的範圍內查詢得到相應的值:${data1}、${data2}、${name1}、${name2}</li>
 43     </ul>
 44     <hr/>
 45     <h3>使用Java指令碼實現以上功能</h3>
 46     <ul>
 47     
 48         <li>把一個值放入page域中。<%pageContext.setAttribute("data1","xdp");%></li>
 49         <