日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

核心标签库(转)

發布時間:2023/12/10 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 核心标签库(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JSTL核心標簽庫包含了一組用于實現WEB應用中的通用操作的標簽,JSP規范為核心標簽庫建議的前綴名為c。

1.3.1 ?<c:out>標簽

<c:out> 標簽用于輸出一段文本內容到pageContext對象當前保存的“out”對象中,在通常情況下,pageContext對象當前保存的“out”對象 的數據是輸出到客戶端瀏覽器,所以,<c:out> 標簽通常用于輸出一段文本內容到客戶端瀏覽器。如果<c:out> 標簽輸出的文本內容中包含了需要進行轉義的HTML特殊字符,例如,<、>、'、"、&等,<c:out> 標簽默認對它們按表1.2進行HTML編碼轉換后再進行輸出,這樣就可以在瀏覽器中顯示出這些字符。

表1.2 特殊字符轉換

<c:out>標簽標簽有兩種語法格式:

語法1,沒有標簽體的情況:

<c:out value="value"

???? [escapeXml="{true|false}"]

? ?? [default="defaultValue"] />

語法2,有標簽體的情況,在標簽體中指定輸出的默認值:

<c:out value="value"

? ?? [escapeXml="{true|false}"] >

? default value

</c:out>

<c:out>標簽的屬性說明如表1.3所示。

表1.3? <c:out>標簽的屬性

屬性名

是否支持EL

屬性類型

屬 性 描 述

value

true

Object

指定要輸出的內容

escapeXml

true

Boolean

指定是否將>、<、&、'、" 等特殊字符進行HTML編碼轉換后再進行輸出。默認值為true

default

true

Object

指定如果value屬性的值為null時所輸出的默認值

?

當且僅當value屬性的值為null時,<c:out> 標簽輸出默認值;如果沒有指定默認值,默認為空字符串。<c:out> 標簽的標簽體的內容用于指定輸出的默認值,如果value屬性的值不為null,即使標簽體部分不為空,標簽體的內容也不會被輸出。如果value屬性不 是指向一個java.io.Reader對象,<c:out> 標簽將調用這個對象的toString方法,然后輸出獲得的字符串內容。如果value屬性指向一個java.io.Reader對 象,<c:out> 標簽將從這個Reader對象中讀取數據后進行輸出,當有大量數據要被輸出時,將這些數據以Reader對象的形式提供給<c:out>標簽 進行輸出,將會極大提高系統性能。當采用escapeXml屬性的默認設置值true時,<c:out>標簽將對要輸出的特殊字符按表1.2 進行轉換;如果將escapeXml屬性設置為false,<c:out>標簽將不對要輸出的特殊字符進行轉換,而是直接輸出這些特殊字符。

例程1-3是<c:out> 標簽的一個演示例子程序。

例程1-3? c_out1.jsp

?

?

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

<%@ page contentType="text/html;charset=gb2312" %>

<%

? session.setAttribute("test_session", "testValue_session");

%>

直接輸出一個字符串:

<c:out value="test" default="123456" /><br /><hr />

輸出Web域中不存在的屬性的值:<br />

<c:out value="${test_request}" default="這個屬性不存在"/><br /><hr />

輸出Web域中的test_session屬性的值:<br />

<c:out value="${test_session}" />

?

?

例程1-3的運行結果如圖1.1所示。

圖1.1

例程1-4和例程1-5是兩個用于演示<c:out>標簽的escapeXml屬性的例子程序,例程1-4沒有設置escapeXml屬性,例程1-5將escapeXml屬性設置為了false。

例程1-4? c_out2.jsp

?

?

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

<c:out value="${null}" >

? <meta http-equiv="refresh" content="0;url=http://www.it315.org" />

</c:out>

?

?

例程1-5 c_out3.jsp

?

?

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

<c:out value="${null}" escapeXml="false">

? <meta http-equiv="refresh" content="0;url=http://www.it315.org" />

</c:out>

?

?

例程1-4和例程1-5的運行結果分別如圖1.2和圖1.3所示。

圖1.2

圖1.3

1.3.2 ?<c:set>標簽

<c:set>標簽用于設置各種Web域中的屬性,或者設置Web域中的java.util.Map類型的屬性對象或JavaBean類型的屬性對象的屬性。<c:set>標簽有四種語法格式:

語法1,使用value屬性設置指定域中的某個屬性的值:

<c:set value="value"

???? var="varName"

???? [scope="{page|request|session|application}"] />

語法2,在標簽體中設置指定域中的某個屬性的值:

<c:set var="varName"

???? [scope="{page|request|session|application}"]>

? body content

</c:set>

語法3,使用value屬性設置Web域中的一個屬性對象的某個屬性:

<c:set value="value"

???? target="target"

???? property="propertyName" />

語法4,在標簽體中設置Web域中的一個屬性對象的某個屬性性:

<c:set target="target"

???? property="propertyName">

? body content

</c:set>

<c:set>標簽的屬性說明如表1.4所示。

表1.4 <c:set>標簽的屬性

屬性名

是否支持EL

屬性類型

屬 性 描 述

value

true

Object

用于指定屬性值

var

false

String

用于指定要設置的Web域屬性的名稱

scope

false

String

用于指定屬性所在的Web域

target

true

Object

用于指定要設置屬性的對象,這個對象必須是JavaBean對象或java.util.Map對象

property

true

string

用于指定當前要為對象設置的屬性名稱

?

如果使用第1種語法格式時的value屬性值為null,或者使用第2種語法格式時的標簽體內容為空,<c:set>標簽將從scope屬性指定的域范圍中刪除var屬性指定的屬性。

在第3種語法格式和第4語法格式中,如果target屬性的值是java.util.Map對象,property屬性表示該Map對象的關鍵字, 如果Map對象沒有指定的關鍵字,就給Map對象增加指定的關鍵字;如果target屬性的值是JavaBean對象,property屬性表示 JavaBean對象的屬性,如果value的類型與JavaBean屬性的類型不匹配時,會根據EL的轉換規則自動進行轉換。當使用第3種語法格式或第 4種語法格式時,如果target屬性的值為null(即target屬性指定的對象不存在),或者target屬性的值是一個JavaBean對象,但 該JavaBean中不存在property屬性指定的屬性,<c:set>標簽將拋出異常。如果使用第3種語法格式時value屬性的值為 null,或者使用第4種語法格式時標簽體的內容為空,如果target屬性的值是一個java.util.Map對象,就從Map對象中刪除 property屬性指定的關鍵字對應的項;如果target屬性的值是一個JavaBean對象,就將JavaBean的相應屬性的值設置為null。

例程1-6是使用<c:set>標簽設置某個Web域中的屬性的一個演示例子程序。

例程1-6 c_set1.jsp

?

?

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

<%@ page contentType="text/html;charset=gb2312" %>

<c:set var="userName" scope="session">

? zxx

</c:set>

輸出session 作用域中的userNamer屬性的值:

<c:out value="${userName}" /><br /><hr />

輸出session 作用域中的bookname屬性的值:

<c:set var="bookname" scope="session" />

<c:out value="${bookname}" />

?

?

例程1-6的運行結果如圖1.4所示。

圖1.4

例程1-7是使用<c:set>標簽設置UserBean對象和Map對象的屬性的一個演示例子程序。

例程1-7? c_set2.jsp

?

?

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

<%@ page contentType="text/html;charset=gb2312" %>

<%@ page import="java.util.HashMap" %>

<jsp:useBean id="user" class="org.it315.UserBean" />

<%??

? HashMap preferences = new HashMap();

? session.setAttribute("preferences",preferences);

%>

設置和輸出UserBean對象的userName屬性值:

<c:set value="zxx" target="${user}" property="userName" />

<c:out value="${user.userName}" /><br /><hr />

設置和輸出UserBean對象的password屬性值:

<c:set target="${user}" property="password" />

<c:out value="${user.password}" /><br /><hr />

設置和輸出Map對象的color關鍵字的值:

<c:set target="${preferences}" property="color" value="${param.color}" />

<c:out value="${preferences.color}" />

?

?

在瀏覽器地址欄輸入如下地址訪問例程1-7:

? http://localhost:1010/JSTL/c_set2.jsp?color=green

例程1-7的運行結果如圖1.5所示。

圖1.5

1.3.3 ?<c:remove>標簽

<c:remove>標簽用于刪除各種Web域中的屬性,其語法格式如下:

<c:remove var="varName"

???? [scope="{page|request|session|application}"] />

var屬性用于指定要刪除的屬性的名稱,scope屬性用于指定要刪除的屬性所屬的Web域,它們的值都不能接受動態值。如果沒有指定scope屬性,<c:remove>標簽就調用PageContext.removeAttribute(varName)方法,否則就調用PageContext.removeAttribute(varName, scope) 方法。<c:remove>與<c:set>標簽第一種語法格式的value屬性值為null時的作用相同。

例程1-1是使用<c:remove>標簽的一個演示例子程序。

例程1-1 c_remove.jsp

?

?

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

<%@ page contentType="text/html;charset=gb2312" %>

<c:set value="org.it315" var="company" scope="request" />

<c:set var="passWord" scope="session">

? a123456a

</c:set>

在沒有使用 &lt;c:remove&gt; 標簽之前,變量的值為:<br />

company:<c:out value="${company}" /><br />

passWord:<c:out value="${passWord}" /><br />

<c:remove var="company" scope="request" />

<!--c:set var="company" scope="request" 此行與黑體字的一行作用是一樣的/-->

<c:remove var="passWord" scope="session" /><hr />

在使用 &lt;c:remove&gt; 標簽之后,變量的值為:<br />

company:<c:out value="${company}" /><br />

passWord:<c:out value="${passWord}" />

?

?

例程1-1的運行結果如圖1.6所示。

圖1.6

1.3.4 ?<c:catch>標簽

<c:catch>標簽用于捕獲嵌套在標簽體中的內容拋出的異常,其語法格式如下:

<c:catch [var="varName"]>

? nested actions

</c:catch>

var屬性用于標識<c:catch>標簽捕獲的異常對象,其值是一個靜態的字符串,不支持動態屬性 值。<c:catch>標簽將捕獲的異常對象以var指定的名稱保存到page這個Web域中,如果沒有指定var屬性, 則<c:catch>標簽僅捕獲異常,不在page域保存異常對象。如果<c:catch>標簽體中的內容沒有拋出異 常,<c:catch>標簽將從page域中刪除var屬性指定的屬性。

<c:catch>標簽可以捕獲任何標簽拋出的異常,并且可以同時處理多個標簽拋出的異常,這樣,可以對JSP頁面的異常進行統一處 理,顯示給用戶一個更友好的頁面。JSP處理異常的通用機制是出現重要異常后跳轉到錯誤處理頁面,建議盡量不要用<c:catch>標簽來代 替JSP的錯誤處理機制,只對一些次要異常才使用<c:catch>標簽進行捕獲處理。

例程1-9是使用<c:catch>標簽進行異常捕獲處理的一個演示例子程序。

例程1-9 ?c_catch.jsp

?

?

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

<%@ page contentType="text/html;charset=gb2312" %>

<c:catch var="myex">

<%

? int i = 0;

? int j = 10;

? out.println(j + "/" + i + "=" + j/i);

%>

</c:catch>

異常:<c:out value="${myex}" /><br />

異常 myex.getMessage:<c:out value="${myex.message}" /><br />

異常 myex.getCause:<c:out value="${myex.cause}" /><br />

異常 myex.getStackTrace:<c:out value="${myex.stackTrace}" />

?

?

在例程1-9中,<c:catch>標簽內嵌套的腳本元素拋出了異常,<c:catch var="myex">將捕獲到這個異常,調用<c:out value="${myex.message}" />,相當于調用<%=myex.getMessage()%>。例程1-9的運行結果如圖1.7所示。

圖1.7

1.3.5? <c:if>標簽

JSP頁面的顯示邏輯中也經常需要進行條件判斷,<c:if>標簽可以構造簡單的“if-then”結構的條件表達式,如果條件表達式的結果為真就執行標簽體部分的內容。<c:if>標簽有兩種語法格式:

語法1,沒有標簽體的情況:

<c:if test="testCondition" var="varName"

???? [scope="{page|request|session|application}"] />

語法2,有標簽體的情況,在標簽體中指定要執行的內容:

<c:if test="testCondition" [var="varName"]

???? [scope="{page|request|session|application}"]>

? body content

</c:if>

<c:if>標簽的屬性說明如表1.5所示。

表1.5 ??<c:if>標簽的屬性

屬性名

是否支持EL

屬性類型

屬 性 描 述

test

true

boolean

決定是否處理標簽體中的內容的條件表達式

var

false

String

用于指定將test屬性的執行結果保存到某個Web域中的某個屬性的名稱

scope

false

String

指定將test屬性的執行結果保存到哪個Web域中

?

對于語法2,如果指定了<c:if>標簽的scope屬性,則必須指定var屬性。

例程1-10是使用<c:if>標簽的一個演示例子程序。

例程1-10 ?c_if.jsp

?

?

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

<%@ page contentType="text/html;charset=gb2312" %>

<jsp:useBean id="user" class="org.it315.UserBean" />

<c:set value="${param.count}" target="${user}" property="visitCount" />

<c:if test="${user.visitCount == 1}">

? 這是您第一次訪問本網站,歡迎您!

</c:if>

?

?

在瀏覽器地址欄輸入如下地址訪問例程1-10:

? http://localhost:1010/JSTL/c_if.jsp?count=1

例程1-10的運行結果如圖1.1所示。

圖1.1

1.3.6? <c:choose>標簽

<c:choose>標簽用于指定多個條件選擇的組合邊界,它必須與<c:when> 和<c:otherwise>標簽一起使用。使用<c:choose>,<c:when> 和<c:otherwise>三個標簽,可以構造類似 “if-else if-else” 的復雜條件判斷結構。

<c:choose>標簽沒有屬性,在它的標簽體內只能嵌套一個或多個<c:when>標簽和0個或一 個<c:otherwise>標簽,并且同一個<c:choose>標簽中的所有<c:when>子標簽必須出現 在<c:otherwise>子標簽之前。如果<c:choose>標簽內嵌套一個<c:when>標簽 和<c:otherwise>標簽,就相當于“if-else”的條件判斷結構;如果<c:choose>標簽內嵌套多 個<c:when>標簽和一個<c:otherwise>標簽,就相當于“if-else if-else”標簽。

<c:when>標簽只有一個test屬性,該屬性的值為布爾類型。test屬性支持動態值,其值可以是一個條件表達式,如果條件表達 式的值為true,就執行這個<c:when>標簽體的內容。<c:when>標簽體的內容可以是任意的JSP代 碼。<c:otherwise>標簽沒有屬性,它必須作為<c:choose>標簽的最后分支出現。

當JSP頁面中使用<c:choose>標簽時,嵌套在<c:choose>標簽內的test條件成立的第一 個<c:when>標簽的標簽體內容將被執行和輸出。當且僅當所有的<c:when>標簽的test條件都不成立時,才執行和輸 出<c:otherwise>標簽的標簽體內容。如果所有的<c:when>標簽的test條件都不成立,并 且<c:choose>標簽內沒有嵌套<c:otherwise>標簽,則不執行任何操作。

例程1-11是使用<c:choose>、<c:when>、<c:otherwise>標簽的一個演示例子程序。

例程1-11 c_choose.jsp

?

?

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

<%@ page contentType="text/html;charset=gb2312" %>

<c:set value="${param.count}" var="count" />

<c:choose>

? <c:when test="${count == 0}">

???? 對不起,沒有符合您要求的記錄。

? </c:when>

? <c:otherwise>

???? 符合您要求的記錄共有${count}條.

? </c:otherwise>

</c:choose>

?

?

在瀏覽器地址欄輸入如下地址訪問例程1-11:

? http://localhost:1010/JSTL/c_choose.jsp?count=0

例程1-11的運行結果如圖1.9所示。如果將參數count的值修改為10,則運行結果如圖1.10所示。

?

?

圖1.9

圖1.10

?

例程1-12是一個綜合使用<c:if>標簽和<c:choose>等標簽的例子程序,在這個例子程序中,首先使 用<c:if>標簽判斷表單提交的方式是否是POST,如果是,就再使用<c:choose>等標簽根據表單提交的內容進行不同 的處理。

例程1-12? c_customLogic.jsp

?

?

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

<c:if test="${pageContext.request.method=='POST'}">

??? <c:choose>

???????? <c:when test="${param.favor == 'computer'}">

?????????????? Your favourite course is <b>computer</b>.

???????? </c:when>

???????? <c:otherwise>

?????????????? Your favourite course is <i>other</i>.

???????? </c:otherwise>

??? </c:choose>

</c:if>

<form method="POST">What is your favourite course?<br/>

<input type="text" name="favor" />

<input type="submit" value="submit" />

</form>

?

?

在瀏覽器地址欄中直接訪問c_customLogic.jsp的運行結果如圖1.11所示,在文本框中輸入“computer”,單擊其中的submit按鈕后的運行結果如圖1.12所示。

圖1.11

圖1.12

1.3.7? <c:forEach>標簽

JSP頁面的顯示邏輯中也經常需要對集合對象進行循環迭代操作,<c:forEach>標簽用于對一個集合對象中的元素進行循環迭代操作,或者按指定的次數重復迭代執行標簽體中的內容。<c:forEach>標簽有兩種語法格式:

語法1,在集合對象中迭代:

<c:forEach [var="varName"]

? ?? ?? items="collection"

? ?? ?? [varStatus="varStatusName"]

? ?? ?? [begin="begin"] [end="end"] [step="step"]>

? body content

</c:forEach>

語法2,迭代固定的次數:

<c:forEach [var="varName"]

??????? [varStatus="varStatusName"]

??????? begin="begin" end="end" [step="step"]>

? body content

</c:forEach>

<c:forEach>標簽的屬性說明如表1.6所示。

表1.6? <c:forEach>標簽的屬性

屬性名

是否支持EL

屬性類型

屬 性 描 述

var

false

String

指定將當前迭代到的元素保存到page這個Web域中的屬性名稱

items

true

任何支持的類型

將要迭代的集合對象

varStatus

false

String

指定將代表當前迭代狀態信息的對象保存到page這個Web域中的屬性名稱

begin

true

int

如果指定items屬性,就從集合中的第begin個元素開始進行迭代,begin的索引值從0開始編號;如果沒有指定items屬性,就從begin指定的值開始迭代,直到end值時結束迭代

end

true

int

參看begin屬性的描述

step

true

int

指定迭代的步長,即迭代因子的迭代增量

?

在使用<c:forEach>標簽時,需要注意如下幾點說明:

l? 如果指定begin屬性,其值必須大于或等于零;

l? 如果指定步長(step屬性),其值必須大于或等于1;

l? 如果items屬性的值為null,則要處理的集合對象為空,這時不執行迭代操作;

l? 如果指定的begin屬性的值大于或等于集合對象的長度,不執行迭代操作;

l? 如果指定的end屬性的值小于begin屬性的值,不執行迭代操作;

?

<c:forEach>標簽的items屬性的值支持下面的數據類型:

l? 任意類型的數組

l? java.util.Collection

l? java.util.Iterator

l? java.util.Enumeration

l? java.util.Map

l? String

items屬性還支持與數據庫有關的數據類型java.sql.ResultSet(包括javax.sql.RowSet),這 些數據類型將在1.5 節的數據庫標簽中進行介紹。對字符串的迭代操作通常使用<c:forTokens>標簽或JSTL函數,例如fn:split和 fn:jion,JSTL函數將在1.7節進行介紹。

轉載于:https://www.cnblogs.com/forevernight/p/3498103.html

總結

以上是生活随笔為你收集整理的核心标签库(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。