JSP Standard Tag Library,JSTL標籤庫的使用是爲類彌補html表的不足,規範自定義標籤的使用而誕生的。在告別modle1模式開發應用程序後,人們開始注重軟件的分層設計,不但願在jsp頁面中出現java邏輯代碼,同時也因爲自定義標籤的開發難度較大和不利於技術標準化產生了自定義標籤庫。JSTL標籤庫可分爲5類:
q 核心標籤庫
q I18N格式化標籤庫
q SQL標籤庫
q XML標籤庫
q 函數標籤庫
本章將對這些內容一一講述。
9.1 ;核心標籤庫
JSTL的核心標籤庫標籤共13個,從功能上能夠分爲4類:表達式控制標籤、流程控制標籤、循環標籤、URL操做標籤。使用這些標籤可以完成JSP頁面的基本功能,減小編碼工做。
(1)表達式控制標籤:out標籤、set標籤、remove標籤、catch標籤。
(2)流程控制標籤:if標籤、choose標籤、when標籤、otherwise標籤。
(3)循環標籤:forEach標籤、forTokens標籤。
(4)URL操做標籤:import標籤、url標籤、redirect標籤。
在JSP頁面引入核心標籤庫的代碼爲:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
下面將按照功能分類,分別講解每一個標籤的功能和使用方式。
9.2.1 ;表達式控制標籤
表達式控制分類中包括
1.
【功能】:用來顯示數據對象(字符串、表達式)的內容或結果。
在使用Java腳本輸出時常使用的方式爲:
<% out.println(「字符串」)%>
<%=表達式%>
在web開發中,爲了不暴露邏輯代碼會盡可能減小頁面中的Java腳本,使用
提示:JSTL的使用是和EL表達式分不開的,EL表達式雖然能夠直接將結果返回給頁面,但有時獲得的結果爲空,
【語法1】:
<c:out value=」要顯示的數據對象」 [escapeXml=」true|false」] [default=」默認值」]>
【語法2】:
<c:out value=」要顯示的數據對象」 [escapeXml=」true|false」]>默認值
這兩種方式沒有本質的區別,只是格式上的差異。標籤的屬性介紹以下。
q value:指定要輸出的變量或表達式。
q escapeXml:設定是否轉換特殊字符(如<、>等一些轉義字符),在默認值爲true的狀況下直接在輸出<的,若是改成false將會進行轉義輸出「<」等。
q default:爲默認輸出結果。若是使用表達式獲得的結果爲null(注意與空區別),將會輸出默認結果。
【示例代碼】:代碼9.1演示了
代碼9.1
1 <%@ page pageEncoding="gbk" %>
2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3
4
5
6
7
8
圖9.1 coredemo01.jsp運行結果
【代碼解析】:
(1)直接輸出了一個字符串。
(2)字符串中有轉義字符,但在默認狀況下沒有轉換。
(3)使用了轉義字符 <和> 分別轉換成 <和> 符號。
(4)設定了默認值,從EL表達式${null}獲得空值,因此直接輸出設定的默認值。
(5)未設定默認值,輸出結果爲空。
2.
功能:主要用於將變量存取於JSP範圍中或JavaBean屬性中。
語法1:存值,把一個值放在指定(page、session等)的map中。
<c:set value=」值1」 var=」name1」 [scope=」page|request|session|application」]>
含義:把一個變量名爲name1值爲「值1」的變量存儲在指定的scope範圍內。
<c:set var=」name2」 [scope=」page|request|session|application」]>
含義:把一個變量名爲name2,值爲值2的變量存儲在指定的scope範圍內。
含義:把一個值爲「值3」賦值給指定的JavaBean的屬性名。至關與setter()方法。
含義:把一個值4賦值給指定的JavaBean的屬性名。
提示:從共能上分語法1和語法二、語法3和語法4的效果是同樣的只是把value值放置的位置不一樣至於使用那個根據我的的喜好,語法1和語法2是向scope範圍內存儲一個值,語法3和語法4是給指定的JavaBean賦值。
【示例代碼】:代碼給出了給指定scope範圍賦值的示例。使用
代碼9.2 使用
1 <%@ page language="java" pageEncoding="gbk"%>
2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3
4
5
6
7
8
圖9.2 coredemo02.jsp
在代碼中未使用任何Java腳本使用程序的功能。爲了對比期間,代碼9.3給出了使用Java腳本實現以上功能的例子。
代碼9.3 Java腳本實現值的存取:getvalue.jsp
1 <%@page language="java" pageEncoding="gbk"%>
2
3
4
圖9.3 getvalue.jsp運行結果
提示:本章示例爲了方便期間都是從一個頁面中存取,在開發中值的存取是爲了避免同的JSP頁面之間共享數據
從兩個程序對比來看,JSTL實習了使用標籤完成取值賦值的功能,減小代碼的編寫量同時避免了邏輯代碼暴露的危險。
【程序示例】:代碼9.4和代碼9.5演示使用
(1)建立一個JavaBean對象。
代碼9.4 JavaBean(vo數據傳輸對象):Person.java
1 package org.olive;
2 public class Person {
3 private String name; //定義私有變量姓名字符串
4 private int age; //定義私用變量年齡整型
5 private char sex; //定義私用變量性別字符性
6 private String home; //定義私用變量家鄉字符串
7 public String getName() { //name的getter方法
8 return name;
10 public void setName(String name) { //name的setter方法。
11 this.name = name;
13 public int getAge() { //age的getter方法
14 return age;
16 public void setAge(int age) { //age的setter方法
17 this.age = age;
19 public char getSex() { //sex的getter方法
20 return sex;
22 public void setSex(char sex) { //sex的setter方法
23 this.sex = sex;
25 public String getHome() { //home的getter方法
26 return home;
28 public void setHome(String home) { //home的setter方法
29 this.home = home;
【代碼解析】:一個只有getter和setter方法的JavaBean或者說一個pojo類,做爲一個vo(數據傳輸對象)。定義了四個變量age、name、sex和home。
(2)建立JSP頁面,實現對值的操做。
代碼9.5 操做JavaBean:coredemo03.jsp
1 <%@ page language="java" pageEncoding="gbk"%>
2
3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
4
5
6
7
8
9
10
11
12
13
圖9.4 coredemo03.jsp運行結果
3.
【語法】:
<c:remove var=」變量名」 [scope=」page|request|session|application」]/>
其中var屬性是必須的,scope能夠以省略。
【示例程序】:代碼9.6使用set標籤在session中插入2個值,而後用remove標籤移除。
代碼9.6
1 <%@ page language="java" pageEncoding="gbk"%>
2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3
4
5
6
7
8
圖9.5 coredemo05.jsp
圖中異常信息的提示爲:在
圖9.6 程序異常
提示:本示例沒有使用捕獲Java腳本的樣式,若是使用標籤再使用Java腳本的意義不大,由此能夠看出
9.2.2 ;流程控制標籤
流程控制標籤主要用於對頁面簡單業務邏輯進行控制。流程控制標籤包含有4個:
1.
【語法1】:
<c:if test=」條件1」 var=」name」 [scope=」page|request|session|application」]>
【語法2】:
【參數說明】:
(1)test屬性用於存放判斷的條件,通常使用EL表達式來編寫。
(2)var指定名稱用來存放判斷的結果類型爲true或false。
(3)scope用來存放var屬性存放的範圍。
【使用場景】:在開發中常常會出現不一樣用戶的權限,首先對用戶名進行判斷(包括進行數據庫驗證,該功能能夠由JavaBean實現,使用EL表達式獲得一個布爾型的結果),把判斷的結果存放在不一樣的JSP範圍內(好比經常使用的session內),這樣在每一個頁面均可以獲得該用戶的權限信息,根據不一樣權限的用戶顯示不一樣的結果。
【示例代碼】:代碼9.8實現了用戶輸入用戶名提交到自身頁面,頁面判斷用戶是否爲admin,若是是將出現歡迎界面,若是不是顯示不一樣結果。
代碼9.8
1 <%@ page language="java" pageEncoding="gbk"%>
2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3
4
5
6
7
8
圖9.7 coredemo06.jsp運行結果
提示:能夠把adminchock的屬性範圍設置爲session,能夠在其餘的頁面中獲得adminchock的值,使用
2.
這3個標籤一般狀況下是一塊兒使用的,
【語法1】:
…..//業務邏輯1
…..//業務邏輯2
….//業務邏輯3
【語法2】:
【語法3】:
【參數說明】:
(1)語法1爲3個標籤的嵌套使用方式,
(2)語法2爲
(3)
【示例代碼】:代碼9.9設定一個score變量的值爲85,使用嵌套標籤進行判斷,根據判斷返回結果。
代碼9.9 循環控制標籤:coredemo07.jsp
1 <%@ page language="java" pageEncoding="gbk"%>
2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3
4
5
6
7
8
圖9.8 coredemo07.jsp運行結果
9.2.3 ;循環標籤
循環標籤主要實現迭代操做。主要包含兩個標籤:
1.
該標籤根據循環條件遍歷集合(Collection)中的元素。
【語法】:
【參數解析】:
(1)var設定變量名用於存儲從集合中取出元素。
(2)items指定要遍歷的集合。
(3)varStatus設定變量名,該變量用於存放集合中元素的信息。
(4)begin、end用於指定遍歷的起始位置和終止位置(可選)。
(5)step指定循環的步長。
參數類型和相關說明見表9-1。
表9-1 循環標籤屬性說明
String安全
items
Arrays
Collection
Iterator
Enumeration
String []args
begin
集合中最後一個元素
varStatus
String
其中varStatus有4個狀態屬性(見表9-2)。
表9-2 varStatus的4個狀態
index
當前循環的索引值
count
循環的次數
frist
boolean
是否爲第一個位置
boolean
是否爲第二個位置
【示例代碼】:代碼9.10實現了遍歷的兩種方式:設定起始位置、不設定起始位置。同時實現了得到原屬的狀態信息。
代碼9.10
1 <%@ page contentType="text/html;charset=GBK" %>
2 <%@page import="java.util.List"%>
3 <%@page import="java.util.ArrayList"%>
4 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
5
6
7
8
9
10
圖9.9 coredemo08.jsp運行結果
【總結】:
(1)從圖中能夠看到不使用begin和end的迭代,從集合的第一個元素開始,遍歷到最後一個元素。
(2)指定begin的值爲一、end的值爲三、step的值爲2,從第二個開始首先獲得晶晶,每兩個遍歷一次,則下一個顯示的結果爲瑩瑩,end爲3則遍歷結束。
(3)從指定的begin和end的值來看遍歷第四個和第五個,因獲得瑩瑩和妮妮。相關狀態信息如圖所示。
提示:本例使用的list是在JSP頁面中使用Java腳本建立的,是由於JSTL缺乏建立集合的功能,在開發中通常不會如此,可經過訪問數據庫獲得數據集合,和經過設定JavaBean的值獲得數據集合
2.
該標籤用於瀏覽字符串,並根據指定的字符將字符串截取。
<c:forTokens items=」strigOfTokens」 delims=」」delimiters [var=」name」 begin=」begin」 end=」end」 step=」len」 varStatus=」statusName」] >
【參數說明】
(1)items指定被迭代的字符串。
(2)delims指定使用的分隔符。
(3)var指定用來存放遍歷到的成員。
(4)begin指定遍歷的開始位置(int型從取值0開始)。
(5)end指定遍歷結束的位置(int型,默認集合中最後一個元素)。
(6)step遍歷的步長(大於0的整型)。
(7)varStatus存放遍歷到的成員的狀態信息。
【示例代碼】:代碼9.11實現了遍歷一個有符號的字符串,把指定的符號移除。指定begin和end值,並得到遍歷到的元素的狀態信息。
代碼9.11
1 <%@ page contentType="text/html;charset=GBK" %>
2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3
4
5
6
7
8
圖9.10 coredemo08.jsp
9.2.4 URL 操做標籤
JSTL包含3個與URL操做有關的標籤,分別爲:
1.
該標籤能夠把其餘靜態或動態文件包含到本JSP頁面。同
<c:import url=」url」 [context=」context」][ value=」value」]
[scope=」page|request|session|application」] [charEncoding=」encoding」]>
<c:import url=」url」 varReader=」name」 [context=」context」][charEncoding=」encoding」]>
主要參數見表9-3。
表9-3
被導入資源的URL路徑
String
context
相同服務器下其餘的web工程,必須以「"」開頭
String
以String類型存入被包含文件的內容。
String
Scope
var變量的JSP範圍
String
charEncoding
被導入文件的編碼格式
String
varReader
以Reader類型存儲被包含文件內容
String
【參數說明】:
(1)URL爲資源的路徑,當應用的資源不存在時系統會拋出異常,所以該語句應該放在
使用相對路徑的實例以下:
aa.txt放在同一文件目錄。
若是以「/」開頭表示應用的根目錄下。例如:tomcat應用程序的根目錄文件夾爲webapps。導入webapps下的文件bb.txt的編寫方式爲:
若是訪問webapps管理文件夾中其餘web應用就要用context屬性。
(2)context屬性用於在訪問其餘web應用的文件時,指定根目錄。例如,訪問root下的index.jsp的實現代碼爲:
等同於webapps/root/index.jsp
(3)var、scope、charEncoding、varReader是可選屬性。具體使用方式見示例代碼。
【示例代碼】:代碼9.12實現了從絕對路徑導入文件和從相對路徑導入,同時使用var對象指定用變量來存儲文件,並輸出存入的文件內容。
代碼9.12
1 <%@ page contentType="text/html;charset=GBK" %>
2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3
4
5
6
7
8
圖9.11 coredemo10.jsp運行結果
【說明】:
(1)在使用絕對路徑導入時,由於電腦沒有聯網因此拋出異常。
(2)使用相對路徑輸出時,一樣是引入的a1.txt文件顯示的結果卻不相同,這能夠說明直接使用
提示:讀者在練習時可使用Tomcat的首頁來導入url=」http://127.0.0.1:8080」來顯示效果。
2.
該標籤用來實現了請求的重定向。同時能夠在url中加入指定的參數。例如:對用戶輸入的用戶名和密碼進行驗證,若是驗證不成功重定向到登陸頁面;或者實現web應用不一樣模塊之間的銜接。
【語法1】:
<c:redirect url=」url」 [context=」context」]>
【語法2】:
【參數說明】:
(1)url指定重定向頁面的地址,能夠是一個string類型的絕對地址或相對地址。
(2)用於導入其餘web應用中的頁面。
【示例代碼】:代碼9.13實現了當請求頁面時重定向到tomcat首頁。
代碼9.13
<%@ page contentType="text/html;charset=GBK" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
【代碼解析】
(1)使用重定向與載入頁面不一樣,載入頁面時在本頁面中插入其餘頁面,而重定向是請求轉發,等於在頁面中從新輸入了一次url。當重定向到某個頁面時瀏覽器中的地址會發生變化。
(2)使用重定向時不用使用
(3)在重定向時爲URL添加了兩個參數和參數值:uname=olive和password=01234。
程序運行結果如圖9.12所示。
圖9.12 coredemo11.jsp運行結果
提示:注意圖中的URL地址已經發生轉變,同時能夠看到傳入的參數以參數值。
3.
該標籤用於動態生成一個String類型的URL,能夠同
【語法1】:指定一個url不作修改,能夠選擇把該url存儲在JSP不一樣的範圍中。
<c:url value=」value」 [var=」name」][scope=」page|request|session|application」]
[context=」context」]/>
【語法2】:給url加上指定參數及參數值,能夠選擇以name存儲該url。
<c:url value=」value」 [var=」name」][scope=」page|request|session|application」]
[context=」context」]>
【示例代碼】:代碼9.14實現了使用動態生成url實現了網頁的超連接。
代碼9.14
<%@ page contentType="text/html;charset=GBK" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
圖9.13 coredemo12.jsp運行結果
單擊圖中超連接能夠直接訪問到Tomcat首頁。
9.3 I18N 格式標籤庫
JSTL標籤提供了對國際化(I18N)的支持,它能夠根據發出請求的客戶端地域的不一樣來顯示不一樣的語言。同時還提供了格式化數據和日期的方法。實現這些功能須要I18N格式標籤庫(I18N-capable formation tags liberary)。引入該標籤庫的方法爲:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
I18N格式標籤庫提供了11個標籤,這些 標籤從功能上能夠劃分爲3類以下:
(1)數字日期格式化。formatNumber標籤、formatData標籤、parseNumber標籤、parseDate標籤、timeZone標籤、setTimeZone標籤。
(2)讀取消息資源。bundle標籤、message標籤、setBundle標籤。
(3)國際化。setlocale標籤、requestEncoding標籤。
接下將詳細介紹這些標籤的功能和使用方式。
9.3.1 ;數字日期格式化
數字日期格式化標籤共有6個,用來將數字或日期轉換成設定的格式。
1.
該標籤依據特定的區域將數字改變爲不一樣的格式來顯示。
【語法1】:
<frm:formatNumber value=」被格式化的數據」[type=」number|currency|percent」]
[pattern=」pattern」]
[currencyCode=」code」]
[currencySymbol=」symbol」]
[groupingUsed=」true|false」]
[maxIntergerDigits=」maxDigits」]
[minIntergerDigits=」minDigits」]
[maxFractionDigits=」maxDigits」]
[minFractionDigits=」minDigits」]
[var=」name」]
[scope=page|request|session|application]
/>
【語法2】:
<frm:formatNumber [type=」number|currency|percent」]
[pattern=」pattern」]
[currencyCode=」code」]
[currencySymbol=」symbol」]
[groupingUsed=」true|false」]
[maxIntergerDigits=」maxDigits」]
[minIntergerDigits=」minDigits」]
[maxFractionDigits=」maxDigits」]
[minFractionDigits=」minDigits」]
[var=」name」]
[scope=page|request|session|application]
被格式化的數據
屬性說明如表9-4所示。
表9-4
value
要格式化的數據
String
指定類型(單位、貨幣、百分比等)見表
String
number
pattern
格式化的數據樣式
String
currencyCode
貨幣單位代碼
String
cuttencySymbol
貨幣符號($、¥)
String
groupingUsed
是否對整數部分進行分組如(9,999)
boolean
maxIntergerDigits
整數部分最對顯示多少位數
minIntergerDigits
整數部分最少顯示多少位
maxFractionDigits
小數部分最多顯示多少位
minFractionDigits
小數部分最少顯示多少位
存儲格式化後的數據
String
scope
var的JSP範圍
String
Type屬性的類型應用見表9-5.
表9-5 Type的屬性類型
number
currency
¥0.80
percent
百分比格式
【示例代碼】:代碼9.14實現了對數字的格式化、貨幣的格式、貨幣的格式化。使用
代碼9.14
<%@ page language="java" pageEncoding="gbk"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
類型 | 使用數據 | 結果 | 說明 |
數字格式化 | 108.75 |
|
使用pattern能夠定義顯示的樣式。本例設定爲###.#小數部分將使用四捨五入法。 |
數字格式化 | 9557 |
|
使用科學計數法。 |
數字格式化 | 9557 |
|
使用默認分組。 |
數字格式化 | 9557 |
|
不使用分組。 |
數字格式化 | 9557 |
|
使用位數限定,根據指定的位數顯示,其餘數字忽略。例如:9不被顯示。 |
百分比格式化 | 0.98 |
|
用百分比形式顯示一個數據。 |
貨幣格式化 | 188.88 |
|
將一個數據轉化爲貨幣形式輸出。 |
存儲數據 | 188.88 |
|
存儲的money的值爲${money} |
圖9.14 fmtdemo01.jsp運行結果
提示:若是給定的數據類型有錯誤將或產生異常。例如:給定的數據爲aa進行類型轉化,將使應用程序沒法顯示。所以在實際應用中顯示的格式化應該放入
2.
將格式化後的數字、貨幣、百分比都轉化爲數字類型。
【語法1】:
<fmt:parseNumber value="number" [type=」number|currency|percent」]
[pattern=」pattern」]
[parseLocale=」locale」]
[intergerOnly=」true|false」]
[scope=」page|request|session|application」]
/>
【語法2】:
<fmt:parseNumber [type=」number|currency|percent」]
[pattern=」pattern」]
[parseLocale=」locale」]
[intergerOnly=」true|false」]
[scope=」page|request|session|application」]
Number
屬性說明見表9-6。
表9-6
value
被解析的字符串
String
指定單位(數字、貨幣、百分比)
String
number
pattern
String
parseLocale
用來替代默認區域的設定
String,
Java.util.
Locale
默認本地樣式
存儲已經格式化的數據
String
scope
var變量的做用域
String
【示例代碼】:代碼9.15實現了從字符串中提取數據,並用合適的數據類型進行存儲(浮點性、整型等)。能夠對轉換後的數據進行加法運算。
代碼9.15
<%@ page language="java" pageEncoding="gbk"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
圖9.15 fmtdemo02.jsp運行結果
提示:
3.
該標籤主要用來格式化日期和時間。
【語法】:
<fmt: formatDate value=」date」 [type=」time|date|both」]
[pattern=」pattern」]
[dateStyle=」default|short|medium|long|full」]
[timeStyle=」default|short|medium|long|full」]
[timeZone=」timeZone」]
[var=」name」]
[scope=」page|request|session|application」]
/>
參數說明見表9-7。
表9-7
value
將要格式化的日期對象。
Java.util.Date
顯示的部分(日期、時間或者二者)。
String
partten
格式化的樣式。
String
dateStyle
設定日期的顯示方式。
String
default
timeStyle
設定時間的顯示方式。
String
default
timeZone
設定使用的時區。
String
當地所用時區
存儲已格式化的日期或時間。
String
scope
指定var存儲的JSP範圍。
String
其中type屬性參數說明見表9-8。
表9-8 type屬性參數說明
只顯示時間
只顯示時期
顯示日期和時間
【示例程序】:代碼9.16實現了對日期的格式化,使用了type、dateStyle、timeStyle等屬性。
代碼9.16
<%@ page language="java" pageEncoding="gbk"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
【代碼解析】:
(1)首先經過配置JavaBean在頁面上實例化java.util.Date對象。實現代碼以下:
(2)對日期對象進行格式化時${date}是一個日期對象,若是給value設的值爲String時程序會報錯。
(3)設置type爲both時,將顯示日期和時間,同時示例中依次改變dateStyle和timeStyle的值做爲比較。
程序結果如圖9.16所示。
圖9.16 fmtdemo03.jsp
使用IE的語言標籤能夠設置語言種類如圖9.17所示。
9.17 改變使用默認語言
語言設爲英文是程序效果如圖9.18所示。
圖9.18 語言爲英文狀態下的顯示
4.
【語法1】:
<fmt:parseDate value=」date」 [type=」time|date|both」]
[pattern=」pattern」]
[parseLocale=」locale」]
[dateStyle=」default|short|medium|long|full」]
[timeStyle=」default|short|medium|long|full」]
[timeZone=」timezone」]
[var=」name」]
[scope=」page|request|session|application」]
/>
【語法2】:
<fmt:parseDate [type=」time|date|both」]
[pattern=」pattern」]
[parseLocale=」locale」]
[dateStyle=」default|short|medium|long|full」]
[timeStyle=」default|short|medium|long|full」]
[timeZone=」timezone」]
[var=」name」]
[scope=」page|request|session|application」]
【參數說明】參數說明見表9-9.
表9-9
value
將要格式化的日期時間
String
字符串的類型(日期、時間或所有)
String
pattern
字符串使用的時間樣式
String
parseLocale
取代默認地區設定
String
dateStyle
字符串使用的日期顯示方式
String
default
timeStyle
字符串使用的時間顯示格式
String
default
timeZone
使用的時區
String
使用var定義的名字保存對象
String
scope
var的JSP範圍
String
【示例代碼】:代碼9.16實現瞭如下功能:首先,使用了
代碼9.16:
<%@ page language="java" pageEncoding="gbk"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
圖9.19 fmtdemo04.jsp
提示:
5.
該標籤用於設定默認時區或者將時區存儲在指定的JSP範圍內。
【語法】:
<fmt:setTimeZone value=」value」 [var=」name」][scope=」page|request|session|application」]/>
【參數說明】:見表9-10
表9-10
value
使用的時區
String
Java.util.TimeZone
使用var定義的參數名保存值
String
scope
存儲var的JSP範圍
String
value用來設定使用的時區,例如中國使用的時區爲CST,其餘的還有EST、PST等。能夠把時區存儲在指定的JSP範圍內,例如存儲在session中,用戶訪問的全部頁面均可以顯示使用的設定的時區下對應的時間。
【示例代碼】
提示:有關TimeZone的說明見JDK幫助文檔的java.util.TimeZone類。
6.
該標籤主要用於設置標籤體內使用的時區。
【語法】:
使用
9.3.2 ;讀取消息資源
讀取消息資源用到的標籤主要有4個:
1.
該標籤主要用於將資源文件綁定於它的標籤體中的顯示。
【語法】:
….標籤主題
【參數說明】:見表9-11。
表9-11
basename
指定使用的資源文件的名稱
String
prefix
前置關鍵字
String
2.
該標籤主要用於綁定資源文件或者把資源文件保存在指定的JSP範圍內。
【語法】:
<fmt:setBundle basename=」name」 [var=」name」]
[scope=」page|request|session|application」]
【參數說明】:見表9-12。
表9-12
basename
指定使用的資源文件的名稱
String
指定將資源文件保存的名稱
String
scope
設定將資源文件保存的JSP範圍
String
3.
該標籤主要負責讀取本地資源文件,從指定的消息文本資源文件中讀取鍵值,而且能夠將鍵值保存在指定的JSP範圍內。
【語法1】:
<fmt:message key=」keyName」[bundle=」bundle」]
[scope=」page|request|session|application」]
/>
【語法2】:
<fmt:message key=」keyName」[bundle=」bundle」]
[scope=」page|request|session|application」]
【語法3】:
<fmt:message key=」keyName」[bundle=」bundle」]
[scope=」page|request|session|application」]
key
【參數說明】:見表9-13。
表9-13
指定鍵值的名稱(索引)
String
bundle
指定消息文本的來源
LocalizationContext
指定存儲鍵值的變量名
String
scope
指定var的做用域
String
提示:建議此處的bundle使用EL表達式,由於屬性bundle的類型爲LocalizationContext,而不是一個String類型的URL。
【示例代碼】:代碼9.17實現從指定的資源文件中讀取對應key的值。
首先編寫一個資源文件內容下
name=olive
password=01234
使用標籤從資源文件中讀取相應的值。
代碼9.17
<%@ page language="java" pageEncoding="gbk"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
圖9.20 fmtdemo05.jsp運行效果
org.person.name=olive
org.personpassword=01234
若是不使用prefix標籤,在取值是要指明前綴。例如:
使用prefix屬性能夠簡化取值時的代碼。
4.
該標籤主要用於當
【語法1】:
【語法2】:
…標籤主體
【示例代碼】:
(1)建立資源文件。在message.properties文件中增長一個key和value。
news={0} welcome to out website!
today is :{1,date}
表達的含義是鍵news對應的是一個字符串,字符串中還有動態變量{0}表示第一個動態變量,{1,date}表示第二個動態變量而且該變量是一個日期類型的對象。
(2)經過標籤從資源文件中取出鍵值,並給動態變量賦值顯示在頁面。
代碼9.18
<%@ page language="java" pageEncoding="gbk"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
圖9.21 fmtdemo06.jsp運行結果
提示:資源文件通過修改後,應用程序須要重載才能生效。
9.3.3 ;國際化
國際化這個分類中共包含兩個標籤:用於設定語言地區
1.
【語法】:
<fmt:setLocale value=」locale」[variant=」variant」]
[scope=」page|request|session|application」]>
【參數說明】:見表9-14。
表9-14
value
指定區域代碼
String
java.util.Locale
variant
操做系統的類型
String
scope
設定時區的做用範圍
String
value屬性用來指定使用的語言代碼,能夠從瀏覽器的【工具】---【Internet選項】---【語言】---【添加】中查看瀏覽器支持的語言種類及語言代碼。例如:中文(zh_cn)、臺灣(zh_tw)、香港(zh_mo)等。
【示例代碼】:代碼9.19實現了設定不一樣的區域代碼,根據不一樣的區域代碼瀏覽將顯示不一樣格式的日期。
代碼9.19
<%@ page language="java" pageEncoding="gbk"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
圖9.22 fmtdemo07.jsp運行結果
2.
該標籤用於設定請求的編碼格式。功能同servletRequest.setCharacterEncoding()方法相同。
【語法】:
<fmt:requestEncoding [value=」charEncoding」]/>
【參數說明】:
value屬性用來指定使用的編碼集例如:gbk、gb2312等。當沒有給出value的值時將會自動搜索取尋找合適的編碼方式,所以可以很好的解決中文亂碼問題。
9.4 SQL 標籤庫
JSTL提供了與數據庫相關操做的標籤,能夠直接從頁面上實現數據庫操做的功能,在開發小型網站是能夠很方便的實現數據的讀取和操做。本章將詳細介紹這些標籤的功能和使用方法。
SQL標籤庫從功能上能夠劃分爲兩類:設置數據源標籤、SQL指令標籤。
引入SQL標籤庫的指令代碼爲:
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
9.4.1 ;設置數據源
使用
【語法1】:直接使用已經存在的數據源。
<sql:setDataSource dataSource=」dataSource」[var=」name」]
[scope=」page|request|session|application」]/>
【語法2】:使用JDBC方式創建數據庫鏈接。
<sql:setDataSource driver=」driverClass」 url=」jdbcURL」
user=」username」
password=」pwd」
[var=」name」]
[scope=」page|request|session|application」]/>
【參數說明】:見表9-15
表9-15
dataSource
String
Javax.sql.DataSource
driver
使用的JDBC驅動
String
鏈接數據庫的路徑
String
鏈接數據庫的用戶名
String
password
鏈接數據庫的密碼
String
指定存儲數據源的變量名
String
scope
指定數據源存儲的JSP範圍
String
提示:是否必須是相對的,好比說若是使用數據源則,driver、url等就再也不被使用。若是使用JDBC則要用到driver、url、user、password屬性。
例如鏈接SQL Server須要進行以下配置:
Driver="com.microsoft.jdbc.sqlserver.SQLServerDriver"
url=」 jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=pubs"
user=」sa」
password=」」
使用
若是鏈接其餘數據庫,只須把相對應的項修改便可。
提示:能夠把數據鏈接的配置存入session中,若是再用到數據庫鏈接只須配置使用DataSource屬性。
9.4.2 SQL 操做標籤
JSTL提供了
1.
【語法1】:
<sql:query sql=」sqlQuery」 var=」name」 [scope=」page|request|session|application」]
[dataSource=」dateSource」]
[maxRow=」maxRow」]
[startRow=」starRow」]/>
【語法2】:
<sql:query var=」name」 [scope=」page|request|session|application」]
[dataSource=」dateSource」]
[maxRow=」maxRow」]
[startRow=」starRow」]
sqlQuery
【屬性說明】:見表9-16。
表9-16
查詢數據的SQL語句
String
dataSource
數據源對象
String
Javax.sql.DataSoutce
maxRow
設定最多能夠暫存數據的行數
String
startRow
設定從那一行數據開始
String
指定存儲查詢結果的變量名
String
scope
指定結果的做用域
String
使用
通常狀況下使用
maxRows和startRow屬性用來操做結果集,使用SQL語句首先吧數據放入內存中,檢查是否設置了startRow屬性,若是設置了就從starRow指定的那一行開始取maxRows個值,若是沒有設定則從第一行開始取。
表9-17 結果集參數說明
rowCount
結果集中的記錄總數
Java.util.Map
以字段爲索引查詢的結果
rowsByIndex
Object[]
以數字爲做索引的查詢結果
columnNames
String[]
字段名稱數組
limitedByMaxRows
boolean
是否設置了maxRows屬性來限制查詢記錄的數量
提示:limitedByMaxRows用來判斷程序是否收到maxRows屬性的限制。並非說設定了maxRows屬性,獲得結果集的limitedByMaxRows的屬性都爲true,當取出的結果集小於maxRows時,則maxRows沒有對結果集起到做用此時也爲false。例如可使用startRow屬性限制結果集的數據量。
結果集的做用就是定義了數據在頁面中的顯示方式。下面給出告終果集每一個屬性的做用。
q rowCount屬性。該屬性統計結果集中有效記錄的量,可使用於大批量數據分頁顯示。
q Rows屬性。等到每一個字段對應的值。返回的結果爲:字段名={字段值···}
q rowsByIndex屬性。經常使用獲得數據庫中數據的方式,從有效行的第一個元素開始遍歷,到最後一個有效行的最後一個元素。
q columnNames屬性。用於獲得數據庫中的字段名。
q limitedByMaxRows屬性。用於判斷是否受到了maxRows的限制。
【示例代碼】:代碼9.20給出了配置數據庫鏈接,和使用
代碼9.20 數據庫示查詢示例:sqldemo01.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<%@ page contentType="text/html;charset=GBK"%>
|
圖9.23 查詢操做結果圖
2.
【語法1】:SQL語句放在標籤屬性中。
<sql:update sql=」SQL語句」 [var=」name」] [scope=」page|request|session|application」]
[dateSource=」dateSource」]/>
【語法2】:SQL語句放在標籤體內。
<sql:update [var=」name」] [scope=」page|request|session|application」]
[dateSource=」dateSource」]
SQL語句
【參數說明】:見表9-18。
表9-18
查詢數據的SQL語句
String
dataSource
數據源對象
String
Javax.sql.DataSoutce
指定存儲查詢結果的變量名
String
scope
指定結果的做用域
String
提示:
使用
【示例代碼】:代碼9.21實現了建立一個表、實現數據的插入。
代碼9.21 數據庫建立、數據插入示例:sqldemo02.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<%@ page contentType="text/html;charset=GBK"%>
圖9.24 sqldemo02.jsp運行效果
從圖9.24中能夠發現,使用
圖9.25 SQL表的內容
3.
【語法1】:
【語法2】:
Value
【參數說明】:
value的做用爲SQL中的參數賦值。
【使用示例】:
select * from person where 序號=?
4.
【語法】:
【參數說明】:
q value屬性:java.util.Date類型的參數。
q type屬性:指定填充日期的類型timestamp(所有日期和時間)、time(填充的參數爲時間)、date(填充的參數爲日期)。
5.
【語法】:
<sql:transaction [dataSource=」dataSource」]
[isolation=」read_committed|read_uncommitted|repeatable|serializable」]
9.5 XML 標籤庫
JSTL提供了操做xml文件的標籤庫,使用xml標籤庫能夠省去使用Dom和SAX標籤庫的繁瑣,能輕鬆的讀取xml文件的內容。
9.5.1 XML 核心標籤庫
1.
【語法1】:
<x:parse doc=」xmlDocument」
{var=」name」[scope=」page|request|session|application」]|varDom=」name」[scope=」page|request|session|application」]}
systemId=」systemId」
filter=」filter」
/>
【語法2】:
<x:parse
{var=」name」[scope=」page|request|session|application」]|varDom=」name」[scope=」page|request|session|application」]}
systemId=」systemId」
filter=」filter」
xmlDocument
【參數說明】:見表9-20。
表9-20
指定解析的xml文件
String/Reader
存儲解析後的xml文件
String
scope
指定var的JSP範圍
String
varDom
以(org.w3c.dom.Doucemet)的形式存儲解析的xml文件
String
scopeDom
指定varDom的JSP範圍
String
systemId
xml文件的url
String
filter
解析xml文件的過濾器
Org.xml.sax.Filter
提示:doc指定解析的xml文件並非指定xml文件的路徑,而是同
例如:若是解析person.xml文件須要經過以下代碼實現對xml文件的解析。
2.
【語法】:
【參數說明】:見表9-21。
表9-21
select
指定使用的XPath語句
String
escapeXml
是否轉換特殊字符。如<等
boolean
提示:使用XPath語句須要用到xalan.jar支持包,能夠從示例程序的lib中獲取,得到直接從myEclipse中能夠找到。
【示例代碼】:
3.
【語法】:
【參數說明】:
(1)select經過指定的XPath表達式語句獲取節點的值。
(2)var指定用於存儲值的變量名。
(3)指定var的JSP屬性範圍。
9.5.2 XML 流程控制
使用xml標籤庫的流程控制標籤能夠迭代處理xml文件的內容,流程控制能夠分爲如下兩個方面的內容:
(1)條件判斷。
(2)循環功能。
1.
【語法1】:未含有本體內容。
【語法2】:含有本體內容。
<x:if select=」XPathExperssion」 var=」name」[scope=」page|request|session|application」]
語法1只把根據條件表達式獲得的結果的存儲在JSP範圍中,語法2根據
【參數說明】:
(1)select用來指定使用的XpathExperssion表達式。
(2)var設定標量名用來存儲表達式的結果。
(3)scope指定var存儲的JSP屬性範圍。
2.
同核心標籤庫的
<x;choose>是主標籤,
【語法】:
其中只有
【語法】:
3.
<x;forEach>標籤實現了對xml文檔的遍歷。
【語法】:
<x:forEach select=」XPathExperssion」[var=」name」][varStartus=」StartusName」]
[begin=」begin」][end=」end」][step=」step」]
//標籤主體
【參數說明】:見表9-22。
表9-22
select
指定使用的XPath語句
String
用於存儲表達式的結果
String
varStatus
用來存放循環到的變量的相關信息
String
begin
循環的起始位置
循環的終止位置
9.5.3 xml 的文件轉換
1.
使用該標籤能夠輕鬆的實現xml到XSLT的轉化。
【語法1】:
<x:transform doc=」xmldoc」 xslt=」XSLTStytlesheet」[docSystemId=」xmlsystemid」]
[result=」result」]
[var=」name」]
[scope=」scopeName」]
[xsltSystemId=」xsltsystemid」]/>
【語法2】:
<x:transform doc=」xmldoc」 xslt=」XSLTStytlesheet」[docSystemId=」xmlsystemid」]
[result=」result」]
[var=」name」]
[scope=」scopeName」]
[xsltSystemId=」xsltsystemid」]
【語法3】:
<x:transform doc=」xmldoc」 xslt=」XSLTStytlesheet」[docSystemId=」xmlsystemid」]
[result=」result」]
[var=」name」]
[scope=」scopeName」]
[xsltSystemId=」xsltsystemid」]
Xml文件內容
【參數說明】:見表9-23。
表9-23
指定xml文件來源
String
轉化xml的樣式模板
String
docSystemId
xml文件的URI
String
xsltSystemId
xslt文件的URI
String
result
用來存儲轉換後的結果對象
java.xml.transform
以org.w3c.dom.Documet類型存儲轉換後的結果
String
scope
var的屬性範圍
String
2.
該標籤用來爲
【語法1】: