概述: JavaWind.net Document 9.2.1 JSTL EL 表達式語言簡介 JavaWind.net Document <%@ page contentType="text/html; charset=UTF-8"%> 9.2.2 EL 表達式的默認變量 JavaWind.net Document 1.默認變量pageScope、requestScope、sessionScope、applicationScope 例9.2:使用sessionScope變量的EL表達式apache <%request.getSession().setAttribute("sampleValue", new Integer(10));%> 取得保存在Session中參數的sessionScope變量的EL表達式,「.」是property訪問操做符,在這裏表示從Session中取得「鍵」爲「sampleValue」的參數,並顯示出來。顯示結果爲「10」。數組 2.默認變量param、paramValues 例9.3:提交請求的頁面和接受的頁面cookie <%@ page contentType="text/html; charset=UTF-8"%> 在這個頁面中定義了兩組控件,控件名爲「sampleValue」的是一套控件數組,控件名爲「sampleSingleValue」的是單一控件,經過遞交將請求參數傳送到SampleJsp.jsp。 <%@ page contentType="text/html; charset=UTF-8"%> 這是請求轉發到的頁面,經過EL表達式的paramValues變量獲得控件數組中最後一個控件的遞交參數,經過EL表達式的param變量獲得單一控件的遞交參數。控件數組參數的EL表達式使用「[]」來指定數組下標。本示例將顯示控件數組中最後一個控件的值「12」和單一控件的值「SingleValue」。 3.默認變量header、headerValues 4.默認變量cookie 5.默認變量initParam 6.默認變量pageContext |
標籤庫介紹 JavaWind.net Document
表達式的操做符 表9.1 EL表達式的操做符
這些操做符都是極其有用的,下面經過幾個示例來演示它們的使用方法: 例9.4:幾組操做符的示例 ${pageScope.sampleValue + 12} <br> //顯示12 能夠看到,對於這些示例,程序設計者徹底無需管理它們的類型轉換,在表達式內部都已經處理了。有了EL表達式,在JSP頁面的編程變得更靈活,也更容易。 標籤庫介紹 表9.2 標籤庫的標識符
下面看例9.5,簡單使用標籤庫的示例。 例9.5:簡單JSTL標籤庫示例 <%@ page contentType="text/html; charset=UTF-8"%> 在該示例的JSP頁面中聲明瞭將使用Core標籤庫,它的URI爲「http://java.sun.com/jsp/jstl/core」,前綴爲「c」。以後,頁面中<c:forEach>標籤就是使用了JSTL的標籤進行了工做。對於該標籤的功能,這裏暫時不做具體講解,只是讓讀者可以有個簡單的概念,瞭解怎樣定義和使用標籤庫。 多用途核心標籤:<c:out>、<c:set>、<c:remove>、<c:catch>。 如下是各個標籤的用途和屬性以及簡單示例。 用於顯示的 <c:out> 標籤 JavaWind.net Document 表9.3 <c:out>標籤屬性和說明
在JSTL1.0的時候,在頁面顯示數據必須使用<c:out>來進行。然而,在JSTL1.1中,因爲JSP2.0規範已經默認支持了EL表達式,所以能夠直接在JSP頁面使用表達式。下面看一個示例。 <c:out value="${sessionScope.anyValue}" default="no value" escapeXml="false"/> 該示例將從Session查找名爲「anyValue」的參數,並顯示在頁面,若沒有找到則顯示「no value」。 |
<c: > 標籤 JavaWind.net Document
用於賦值的<c:set>標籤 表9.4 <c:set>標籤屬性和說明
當不存在value的屬性時,將以包含在標籤內的實體數據做爲賦值的內容。下面看一個示例: <c:set value="this is andy" var="oneString"/> 該示例將爲名爲「oneString」的變量賦值爲「this is andy」,其做用範圍爲page。 9.3.3 用於刪除的 <c:remove> 標籤 表9.5 <c:remove>標籤屬性和說明
下面看一個示例: <c:remove var="sampleValue" scope="session"/> 該示例將存在於Session中名爲「sampleValue」的變量刪除。下一句EL表達式顯示該變量時,該變量已經不存在了。 9.3.4 用於異常捕獲的 <c:catch> 標籤 <c:catch var="err"> ${param.sampleSingleValue[9] == 3}</c:catch> 當「${param.sampleSingleValue[9] == 3}」表達式有異常時,能夠從var屬性「err」獲得異常的內容,一般判斷「err」是否爲null來決定錯誤信息的提示。 9.3.5 用於判斷的 <c:if> 標籤 表9.6 <c:if>標籤屬性和說明
下面看一個示例: <c:if test="${paramValues.sampleValue[2] == 12}" var="visits">It is 12</c:if><br> 該示例將判斷request請求提交的傳入控件數組參數中,下標爲「2」的控件內容是否爲「12」,若爲12則顯示「It is 12」。判斷結果被保存在page範圍中的「visits」變量中。 9.3.6 用於複雜判斷的 <c:choose> 、 <c:when> 、 <c:otherwise> 標籤 <c:choose>標籤沒有屬性,能夠被認爲是父標籤,<c:when>、<c:otherwise>將做爲其子標籤來使用。 下面看一個複雜條件語句的示例。 <c:choose> 該示例將判斷request請求提交的傳入控件數組參數中,下標爲「2」控件內容是否爲「11」或「12」或「13」,並根據判斷結果顯示各自的語句,若都不是則顯示「not 11 、十二、13」。 9.3.7 用於循環的 <c:forEach> 標籤 表9.7 <c:forEach>標籤屬性和說明
下面看一個集合循環的示例。 <%ArrayList arrayList = new ArrayList(); 該示例將保存在Session中的名爲「arrayList」的ArrayList類型集合參數中的對象依次讀取出來,items屬性指向了ArrayList類型集合參數,var屬性定義了一個新的變量來接收集合中的對象。最後直接經過EL表達式顯示在頁面上。下面看一個簡單循環的示例。 <c:forEach var="i" begin="1" end="10" step="1"> 該示例從「1」循環到「10」,並將循環中變量「i」顯示在頁面上。 9.3.8 用於分隔字符的 <c:forTokens> 標籤 表9.8 <c:forTokens>標籤屬性和說明
下面看一個示例。 <c:forTokens items="aa,bb,cc,dd" begin="0" end="2" step="2" delims="," var="aValue"> 須要分隔的字符串爲「aa,bb,cc,dd」,分隔符爲「,」。begin屬性指定從第一個「,」開始分隔,end屬性指定分隔到第三個「,」,並將作循環的變量名指定爲「aValue」。因爲步長爲「2」,使用EL表達式${aValue}只能顯示「aa |
<x: > 標籤
9.3.9 用於包含頁面的<c:import> 表9.9 <c:import>標籤屬性和說明
下面看一個示例。 <c:import url="/MyHtml.html" var="thisPage" /> 該示例演示了三種不一樣的導入方法,第一種是在同一 Context 下的導入,第二種是在不一樣的 Context 下導入,第三種是導入任意一個 URL 。 9.3.10 用於獲得URL地址的<c:url>標籤 表9.10 <c:url>標籤屬性和說明
下面看一個示例: <c:url value="/MyHtml.html" var="urlPage" /> 獲得了一個 URL 後,以 EL 表達式放入 <a> 標籤的 href 屬性,達到連接的目的。 9.3.11 用於頁面重定向的<c:redirect>標籤 <c:redirect url="/MyHtml.html"/> 該示例若出如今 JSP 中,則將重定向到當前 Web Context 下的「 MyHtml.html 」頁面,通常會與 <c:if> 等標籤一塊兒使用。 9.3.12 用於包含傳遞參數的<c:param>標籤 表9.11 <c:param>標籤屬性和說明
下面是一個示例: <c:redirect url="/MyHtml.jsp"> 該示例將爲重定向的「 MyHtml.jsp 」傳遞指定參數「 userName=’RW’ 」。 9.4 JSTL XML processing標籤庫 JavaWind.net Document XML核心標籤:<x:parse>、<x:out>、<x:set>。 因爲該組標籤庫專一於對某一特定領域的實現,所以本書將只選擇其中常見的一些標籤和屬性進行介紹。 9.4.1 用於解析XML文件的<x:parse>標籤 表9.12 <x:parse>標籤屬性和說明
其中, var 、 scope 和 varDom 、 scopeDom 不該該同時出現,而應該被視爲兩個版原本使用,兩者的變量均可以被 XML processing 標籤庫的其餘標籤來使用。 <x:parse> 標籤單獨使用的狀況不多,通常會結合 XML processing 標籤庫中的其餘標籤來一塊兒工做。下面看一個示例。 首先給出一個簡單的 XML 文件,將對該 XML 文件作解析,該 XML 文件名爲 SampleXml.xml 。 <?xml version="1.0" encoding="UTF-8"?> 標籤庫的工做: <c:import var="xmlFile" url="http://localhost:8080/booksamplejstl/SampleXml.xml"/> |
<fmt: > 標籤 JavaWind.net Document
看到I18N就應該想到知識「國際化」,I18N formatting標籤庫就是用於在JSP頁面中作國際化的動做。在該標籤庫中的標籤一共有12個,被分爲了兩類,分別是: 下面只選擇其中常見的一些標籤和屬性進行介紹。 9.5.1 用於設置本地化環境的<fmt:setLocale>標籤 表9.17 <fmt:setLocale>標籤屬性和說明
下面看一個示例: <fmt:setLocale value="zh_TW"/> 表示設置本地環境爲繁體中文。 9.5.2 用於資源文件綁定的<fmt:bundle>、<fmt:setBundle>標籤 根據Locale環境的不一樣將查找不一樣後綴的資源配置文件,這點在國際化的任何技術上都是一致的,一般來講,這兩種標籤單獨使用是沒有意義的,它們都會與I18N formatting標籤庫中的其餘標籤配合使用。它們的屬性和描述如表9.18所示: 表9.18 <fmt:bundle>、<fmt:setBundle>標籤屬性和說明
下面看一個示例 <fmt:setLocale value="zh_CN"/> 該示例將會查找一個名爲applicationMessage_zh_CN.properties的資源配置文件,來做爲顯示的Resource綁定。 9.5.3 用於顯示資源配置文件信息的<fmt:message>標籤 表9.19 <fmt:message>標籤屬性和說明
下面看一個示例: <fmt:setBundle basename="applicationMessage" var="applicationBundle"/> 該示例使用了兩種資源配置文件的綁定的作法,「 applicationMessage 」資源配置文件利用<fmt:setBundle>標籤被賦於了變量「 applicationBundle 」,而做爲<fmt:bundle>標籤訂義的「 applicationAllMessage 」資源配置文件做用於其標籤體內的顯示。 第一個<fmt:message>標籤將使用「 applicationAllMessage 」資源配置文件中「鍵」爲「 userName 」的信息顯示。 9.5.4 用於參數傳遞的<fmt:param>標籤 9.5.6 用於爲請求設置字符編碼的<fmt:requestEncoding>標籤 9.5.7 用於設定時區的<fmt:timeZone>、<fmt:setTimeZone>標籤 表9.20 <fmt:timeZone>、<fmt:setTimeZone>標籤屬性和說明
9.5.8 用於格式化數字的<fmt:formatNumber>標籤 表9.21 <fmt:formatNumber>標籤屬性和說明
<fmt:formatNumber>標籤實際是對應java.util.NumberFormat類,type屬性的可能值包括currency(貨幣)、number(數字)和percent(百分比)。 下面看一個示例。 <fmt:formatNumber value="1000.888" type="currency" var="money"/> 該結果將被保存在「 money 」變量中,將根據Locale環境顯示當地的貨幣格式。 9.5.9 用於解析數字的<fmt:parseNumber>標籤 表9.22 <fmt:parseNumber>標籤屬性和說明
下面看一個示例。 <fmt:parseNumber value="15%" type="percent" var="num"/> 解析以後的結果爲「 0.15 」。 9.5.10 用於格式化日期的<fmt:formatDate>標籤 表9.23 <fmt:formatDate>標籤屬性和說明
<fmt:formatDate>標籤與<fmt:timeZone>、<fmt:setTimeZone>兩組標籤的關係密切。若沒有指定 timeZone屬性,也能夠經過<fmt:timeZone>、<fmt:setTimeZone>兩組標籤設定的時區來格式化最後的結果。 9.5.11 用於解析日期的<fmt:parseDate>標籤 表9.24 <fmt:parseDate>標籤屬性和說明
<fmt:parseNumber>和<fmt:parseDate>兩組標籤都實現解析字符串爲一個具體對象實例的工做,所以,這兩組解析標籤對var屬性的字符串參數要求很是嚴格。就JSP頁面的表示層前段來講,處理這種解析本不屬於分內之事,所以<fmt:parseNumber>和<fmt:parseDate>兩組標籤應該儘可能少用,替代工做的地方應該在服務器端表示層的後段,好比在Servlet中。 |
<sql:> 標籤 JavaWind.net Document
9.6 Database access 標籤庫 對於Database access標籤庫本書不做重點介紹,只給出幾個簡單示例讓讀者略微瞭解它們的功能。 Database access標籤庫有如下6組標籤來進行工做:<sql:setDataSource>、<sql:query>、<sql:update>、<sql:transaction>、<sql:setDataSource>、<sql:param>、<sql:dateParam>。 9.6.1 用於設置數據源的 <sql:setDataSource> 標籤 <sql:setDataSource 該示例定義一個數據源並保存在「 dataSrc 」變量內。 9.6.2 用於查詢的 <sql:query> 標籤 <sql:query var="queryResults" dataSource="${dataSrc}"> 該示例將返回查詢的結果到變量「 queryResults 」中,保存的結果是javax.servlet.jsp.jstl.sql.Result類型的實例。要取得結果集中的數據可使用<c:forEach>循環來進行。下面看一個示例。 <c:forEach var="row" items="${queryResults.rows}"> 「 rows 」是javax.servlet.jsp.jstl.sql.Result實例的變量屬性之一,用來表示數據庫表中的「列」集合,循環時,經過「 ${row.XXX} 」表達式能夠取得每一列的數據,「 XXX 」是表中的列名。 9.6.3 用於更新的 <sql:update> 標籤 9.6.4 用於事務處理的 <sql:transaction> 標籤 9.6.5 用於事務處理的 <sql:param> 、 <sql:dateParam> 標籤 |
<fn:> 標籤 JavaWind.net Document
9.7 Functions 標籤庫 長度函數:fn:length 如下是各個函數的用途和屬性以及簡單示例。 9.7.1 長度函數 fn:length 函數 fn:length函數正是爲了解決這個問題而被設計出來的。它的參數爲input,將計算經過該屬性傳入的對象長度。該對象應該爲集合類型或String類型。其返回結果是一個int類型的值。下面看一個示例。 <%ArrayList arrayList1 = new ArrayList(); %> 假設一個ArrayList類型的實例「 arrayList1 」,併爲其添加三個字符串對象,使用fn:length函數後就能夠取得返回結果爲「 3 」。 9.7.2 判斷函數 fn:contains 函數 ${fn:contains("ABC", "a")}<br> 前者返回「 false 」,後者返回「 true 」。 9.7.3 fn:containsIgnoreCase函數 ${fn:containsIgnoreCase("ABC", "a")}<br> 前者和後者都會返回「 true 」。 9.7.4 詞頭判斷函數 fn:startsWith 函數 ${fn:startsWith ("ABC", "ab")}<br> 前者返回「 false 」,後者返回「 true 」。 9.7.5 詞尾判斷函數 fn:endsWith 函數 ${fn:endsWith("ABC", "bc")}<br> 前者返回「 false 」,後者返回「 true 」。 9.7.6 字符實體轉換函數 fn:escapeXml 函數 9.7.8 字符匹配函數 fn:indexOf 函數 ${fn:indexOf("ABCD","aBC")}<br> 前者因爲沒有匹配成功,因此返回-1,後者匹配成功將返回位置的下標,爲1。 9.7.9 分隔符函數 fn:join 函數 表9.25 fn:join函數
下面看一個示例。 <% String[] stringArray = {"a","b","c"}; %> 定義數組並放置到Session中,而後經過Session獲得該字符串數組,使用fn:join函數並傳入分隔符「 ; 」,獲得的結果爲「 a;b;c 」。 9.7.10 替換函數 fn:replace 函數 表9.26 fn:replace函數
下面看一個示例。 ${fn:replace("ABC","A","B")}<br> 將「 ABC 」字符串替換爲「 BBC 」,在「 ABC 」字符串中用「 B 」替換了「 A 」。 9.7.11 分隔符轉換數組函數 fn:split 函數 表9.27 fn:split函數
下面看一個示例。 ${fn:split("A,B,C",",")}<br> 將「 A,B,C 」字符串轉換爲數組{A,B,C}。 9.7.12 字符串截取函數 fn:substring 函數 表9.28 fn:substring函數
下面看一個示例。 ${fn:substring("ABC","1","2")}<br> 截取結果爲「 B 」。 9.7.14 起始到定位截取字符串函數 fn:substringBefore 函數 ${fn:substringBefore("ABCD","BC")}<br> 截取的結果爲「 A 」。 9.7.15 小寫轉換函數 fn:toLowerCase 函數 ${fn:toLowerCase("ABCD")}<br> 轉換的結果爲「 abcd 」。 9.7.16大寫轉換函數 fn:toUpperCase 函數 ${fn:toUpperCase("abcd")}<br> 轉換的結果爲「 ABCD 」。 9.7.17空格刪除函數 fn:trim 函數 ${fn:trim("AB C ")}D<br> 轉換的結果爲「 AB CD 」,注意,它將只刪除詞尾的空格而不是所有,所以「 B 」和「 C 」之間仍然留有一個空格。 |