1、I18N與格式化標簽庫
國際化(I18N)與格式化標簽庫可用于創建國際化的WEB應用程序,它們對數字和日期、時間的輸出進行了標準化。國際化的應用程序支持多種語言。在JSP頁面導入國際化與格式化標簽的語法是:

<%
@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
常用的標簽有:<fmt:setLocale>、<fmt:bundle>、<fmt:setBundle>、<fmt:message>等。
1)<fmt:setLocale>標簽用于重寫客戶端指定的區域設置。它將區域設置存儲在javax.servlet.jsp.jstl.fmt配置變量中。setLocale是一個空標簽,其使用用法為:
<fmt:setLocale value="setting" variant="variant" scope="page/request/session/application"/>
value:包含一個含有兩個小寫字母的語言代碼和一個含有兩個大寫字母的國家或地區代碼。語言和國家或地域代碼應用連字符或下劃線分隔,如:zh_CN.
variant:指定特定于瀏覽器的變量,它是可選的。
scope:指定配置變量的范圍。
2)<fmt:setLocale>標簽使用演示:

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

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

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

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

<%
//獲得本區域
String locale=request.getLocale().toString();
Date now=new Date();
pageContext.setAttribute("now",now);
%>
<h3>數字格式化示例:</h3>
<fmt:formatNumber value="999.9999" type="number" maxFractionDigits="4" />
<h3>貨幣格式化示例:</h3>
<c:set var="salary" value="12000"/>
本地格式化:
<fmt:formatNumber type="currency" value="${salary}"/>
;en_US格式化:
<fmt:setLocale value="en_US"/>
<fmt:formatNumber type="currency" value="${salary}"/>
<h3>日期格式化示例:</h3>
en_US格式化:
<fmt:formatDate value="${now}"/>
;本地格式化:
<fmt:setLocale value="${locale}"/>
<fmt:formatDate value="${now}"/>
3)<fmt:bundle>標簽,用于創建一個I18N本地化上下文,并將這的資源包加載到其中。資源包的名稱由<fmt:bundle>標簽的basename屬性指定。其語法為:
<fmt:bundle basename="basename">
本體內容
</fmt:bundle>
4)<fmt:message>標簽,用于給出資源包的輸出值,其屬性key指定消息的關鍵字。此標簽的語法為:
<fmt:message key="messagekey">
5)<fmt:bundle>標簽與<fmt:message>標簽的使用演示:
首先定義好兩個資源包,英文版input.properties,中文版input_zh_CN.properties,把兩者拷貝到WEB應用下的“WEB-INF/classes”目錄下。讀取資源的JSP文件的源碼如下:

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

<%
@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<fmt:bundle basename="input">
<head>
<title><fmt:message key="title" /></title>
</head>
<h1>
<fmt:message key="hello" />
</h1>
</fmt:bundle>
</html>
英文版input.properties的內容:
title=this is a fmtdemo
hello=welcome you to here!
中文版input_zh_CN.properties的內容:
title=\u56fd\u9645\u6f14\u793a
hello=\u55ef\uff0c\u4e0d\u9519~\u52a0\u6cb9\uff01
調試的時候,要設置瀏覽器的語言設置來調用不包的資源包。比如IE:工具-->internet選項-->語言,進行相應的設置。
中文版input_zh_CN.properties的內容是經過nuicode編碼后形成,這是因為java對于資源文件的處理只支持單字節,要作這樣的處理。在JDK的bin目錄下有一個native2ascii可以完成這個功能。首先用中文寫一個資源文件china.properties,然后進行編譯即可,代碼如下:
native2ascii -encoding gb2312 china.properties input_zh_CN.properties
china.properties的內容:
title=國際演示
hello=嗯,不錯~加油!
注:native2ascii可以解決亂碼問題。
6)<fmt:setBundle>創建一個I18N本地化的上下文,并將它存儲在范圍變量中。它是一個空標簽,其語法如下:
<fmt:setBundle basename="basename" var="varName" scope="page/request/session/application"/>
basename:指定資源包的名稱。
var:指定導出的范圍變量的名稱,它存儲在I18N本地化上下文。
scope:指定var的范圍。
7)<fmt:setBundle>標簽使用演示:

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

<%
@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<html>
<head>
<fmt:setLocale value="zh_CN" scope="page" />
<fmt:setBundle basename="input" scope="page" />
<title><fmt:message key="title" /></title>
</head>
<body>
<h1>
<fmt:message key="hello" />
</h1>
</body>
</html>
采有這種方式導入包,即使改變瀏覽器的語言設置,也是始終按所設置的本地語言顯示。
2、SQL標簽庫
JSTL的SQL標簽用于訪問各種關系數據庫,是為了基于WEB的小型應用程序而設計的。它提供的各種標簽可以在JSP頁面內直接訪問數據庫,在JSP頁面中導入SQL標簽庫的語法是:

<%
@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
此處重點介紹<sql:setDataSource>、<sql:query>、<sql:update>、<sql:transaction>等幾個常用標簽的使用方法。
1)<sql:setDataSource>標簽用于為數據庫設置數據源。它是一個空標簽,其語法為:
<sql:setDataSource DataSource="datasource" url="jdbcrul" driver="driverclassdriver" user="username" password="usepwd" var="varname" scope="page|request|session|application"/>
DataSource:可以是Java命名和目錄接口資源的路徑或JDBC參數字符串。
url:是與數據庫關聯的URL。
driver:是一個JDBC參數,其值為驅動程序的類名。
user:是數據庫的用戶名。
password:是用戶的密碼。
var:是指定數據源的導出范圍變量的名稱。
scope:指定范圍。
注意,在<sql:setDataSource>中,如果使用了DataSource屬性,則無法使用URI屬性。
2)<sql:query>標簽用于搜索數據庫并返回包含數據行的結果集。其語法為:
<sql:query var="varname" dataSource="datasource" scope="page|request|session|application" maxRows="maxrows" startRow="startRow">
要執行的SQL語句
<sql:param/>
</sql:query>
var:為查詢結果指定導出的范圍變量的名稱。
scope:指定變量的范圍。
dataSource:指定與要查詢的數據庫關聯的數據源。
maxRows:指定結果中所包含的數據的最大行數。
startRow:指定從指定索引開始的數據行。
3)<sql:update>標簽用于執行insert、update和delete語句。如果所有數據行都沒有受到插入、更新或刪除操作的影響,則會返回0。其語法為:
<sql:update datasource="datasource" var="varName" scope="page|request|session|application">
SQL語句
<sql:param/>
</sql:update>
其中:
SQL語句:指定的update、insert、delete語句。
dataSource:是與要更新的數據庫關聯的數據源。
var:為數據庫更新的結果指定導出的范圍變量的名稱。
scope:指定變量的范圍。
4)<sql:transaction>標簽用于為<sql:query>標簽和<sql:update>標簽建立事務處理上下文。其語法為:
<sql:transaction dataSource="datasource" isolation="isoationLevel">
使用<sql:query>或<sql:update>語句
</sql:transaction>
dataSource:設置SQL的數據源,它可以是字符串或一個DataSource對象。
isolation:設置事務處理的隔離級別。隔離級別可以是read_committed、read_uncommitted、repeatable_read或serializable。
5)使用sql標簽的實例演示:

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

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

<%
@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<html>
<head>
<title>sqldemo</title>
</head>
<body bgcolor="#ffffff">
<h1>
使用 SQL 標簽庫
</h1>
<c:set var="valprice" value="1000" />
<sql:setDataSource
driver="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1521:wzz"
user="scott" password="tiger" var="conn" />
<sql:transaction dataSource="${conn}">
<sql:update var="newTable">
create table PRODUCTDETAILS
(
PRODUCTNAME NVARCHAR2(20) not null,
PRODUCTTYPE NVARCHAR2(15) not null,
PRICE NVARCHAR2(5) not null,
BRAND NVARCHAR2(25) not null,
DESCRIPTION NVARCHAR2(50) not null
)
</sql:update>
</sql:transaction>
<sql:update var="newrow" dataSource="${conn}">
INSERT INTO ProductDetails(ProductName, ProductType,
Price, Brand, Description)
VALUES('JSP專家導學 ', '編程書籍', '1000', 'Lee', '適合大專院校的教材或參考書籍')
</sql:update>
<sql:query var="products" dataSource="${conn}">
select * from ProductDetails
</sql:query>

<table border="1">
<c:forEach items="${products.rows}" var="row">
<tr>
<td>
${row.ProductName}
</td>
<td>
${row.ProductType}
</td>
<td>
${row.Price}
</td>
<td>
${row.Description}
</td>
</tr>
</c:forEach>
</table>
</body>
</html>
注:本實例連接的oracle,要將classes.jar導入到相應的目錄下。
3、XML標簽庫
JSTL提供了一些有關XML的標簽,讓開人員可不用深入了解SAX和DOM等API,就可以輕易地處理XML文件。在頁面中導入XML標簽庫的語法:

<%
@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
1)<x:parse>標簽用解析XML文件,其語法為:
<x: parse={var="var"[scope="{page|request|session|application}"]|varDom="var"[scopeDom="{page|request|session|application}"]}[systemId="systemId"[filter="filter"]>
需要解析的XML文檔
</x:parse>
var:儲存解析后的XML文件。
scope:變量的JSP范圍。
varDom:儲存解析后的XML文件(類型為org.w3c.dom.Document)。
scopeDom:屬性varDom指出變量的有效范圍。
systemId:XML文件的URI。
filter:XMLFilter過濾器。
2)<x:out>標簽主要來取出XML中的節點數。其語法:
<x:out select="XpathExpression" [escapeXml="{true|false]"]/>
select:XPath語句。
escapeXml:是否轉換特殊字符,例如:<轉換成<
3)<x:set>標簽將從XML文件中取得的內容存儲至JSP范圍中,其語法為:
<x:set select="XPathExpression" var="var" [scope="{page|request|session|application}"]/>
select:XPath語句。
var:將XML文件中取得的內容儲存至varName中。
scope:變量的JSP范圍。
4)XML標簽實例:book.xml與readBook.jsp
book.xml的代碼如下:
<?xml version="1.0" encoding="GBK"?>
<books>
<book lang="java">
<title>《Java 編程思想》</title>
<author>Bruce Eckel</author>
</book>
<book lang="java">
<title>《JSP 專家導學》</title>
<author>希賽顧問團</author>
</book>
<book lang=".net">
<title>《專家導學.NET開發框架》</title>
<author>希賽顧問團</author>
</book>
</books>
readBook.jsp的源代碼如下:

<%
@ page language="java" contentType="text/html; charset=GBK"%>

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

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

<html>
<head>
<title>XML標簽示例程序</title>
</head>
<body>
<x:parse var="sampleXml">
<c:import charEncoding="GBK" url="Books.xml"/>
</x:parse>
<h3>裝載XML文件成功</h3>
<h3>顯第一本書的標題:</h3>
<x:out select="$sampleXml//title"/><br/>
<h3>查找.net書:</h3>
<x:set select="$sampleXml//book[@lang='.net']" var="DoNetBook" />
<x:out select="$DoNetBook"/>
</body>
</html>
注:使用XML標簽時,Web應用環境中除了裝載jstl.jar和standard.jar外還應加入xalan.jar和xercesImpl.jar兩文件。