1、I18N与格式化标签库
国际化(I18N)与格式化标签库可用于创建国际化的WEB应用程序,它们对数字和日期、时间的输出进行了标准化。国际化的应用程序支持多种语言。在JSP页面导入国际化与格式化标签的语法是:
1)<fmt:setLocale>标签用于重写客户端指定的区域设置。它将区域设置存储在javax.servlet.jsp.jstl.fmt配置变量中。setLocale是一个空标签,其使用用法为:
首先定义好两个资源包,英文版input.properties,中文版input_zh_CN.properties,把两者拷贝到WEB应用下的“WEB-INF/classes”目录下。读取资源的JSP文件的源码如下:
中文版input_zh_CN.properties的内容是经过nuicode编码后形成,这是因为java对于资源文件的处理只支持单字节,要作这样的处理。在JDK的bin目录下有一个native2ascii可以完成这个功能。首先用中文写一个资源文件china.properties,然后进行编译即可,代码如下:
6)<fmt:setBundle>创建一个I18N本地化的上下文,并将它存储在范围变量中。它是一个空标签,其语法如下:
2、SQL标签库
JSTL的SQL标签用于访问各种关系数据库,是为了基于WEB的小型应用程序而设计的。它提供的各种标签可以在JSP页面内直接访问数据库,在JSP页面中导入SQL标签库的语法是:
1)<sql:setDataSource>标签用于为数据库设置数据源。它是一个空标签,其语法为:
2)<sql:query>标签用于搜索数据库并返回包含数据行的结果集。其语法为:
3、XML标签库
JSTL提供了一些有关XML的标签,让开人员可不用深入了解SAX和DOM等API,就可以轻易地处理XML文件。在页面中导入XML标签库的语法:
book.xml的代码如下:
国际化(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>标签使用演示:
value:包含一个含有两个小写字母的语言代码和一个含有两个大写字母的国家或地区代码。语言和国家或地域代码应用连字符或下划线分隔,如:zh_CN.
variant:指定特定于浏览器的变量,它是可选的。
scope:指定配置变量的范围。
<%
@ 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属性指定。其语法为:
<% @ 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}" />
<
fmt:bundle
basename
="basename"
>
本体内容
</ fmt:bundle >
4)<fmt:message>标签,用于给出资源包的输出值,其属性key指定消息的关键字。此标签的语法为:
本体内容
</ fmt:bundle >
<
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的内容:
<% @ 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 >
title=this is a fmtdemo
hello=welcome you to here!
中文版input_zh_CN.properties的内容:
hello=welcome you to here!
title=\u56fd\u9645\u6f14\u793a
hello=\u55ef\uff0c\u4e0d\u9519~\u52a0\u6cb9\uff01
调试的时候,要设置浏览器的语言设置来调用不包的资源包。比如IE:工具-->internet选项-->语言,进行相应的设置。
hello=\u55ef\uff0c\u4e0d\u9519~\u52a0\u6cb9\uff01
中文版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可以解决乱码问题。
hello=嗯,不错~加油!
6)<fmt:setBundle>创建一个I18N本地化的上下文,并将它存储在范围变量中。它是一个空标签,其语法如下:
<
fmt:setBundle
basename
="basename"
var
="varName"
scope
="page/request/session/application"
/>
basename:指定资源包的名称。
var:指定导出的范围变量的名称,它存储在I18N本地化上下文。
scope:指定var的范围。
7)<fmt:setBundle>标签使用演示:
basename:指定资源包的名称。
var:指定导出的范围变量的名称,它存储在I18N本地化上下文。
scope:指定var的范围。
<%
@ 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 >
采有这种方式导入包,即使改变浏览器的语言设置,也是始终按所设置的本地语言显示。
<% @ 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属性。
DataSource:可以是Java命名和目录接口资源的路径或JDBC参数字符串。
url:是与数据库关联的URL。
driver:是一个JDBC参数,其值为驱动程序的类名。
user:是数据库的用户名。
password:是用户的密码。
var:是指定数据源的导出范围变量的名称。
scope:指定范围。
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语句
< sql:param />
</ sql:query >
var:为查询结果指定导出的范围变量的名称。
scope:指定变量的范围。
dataSource:指定与要查询的数据库关联的数据源。
maxRows:指定结果中所包含的数据的最大行数。
startRow:指定从指定索引开始的数据行。
<
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语句
< sql:param />
</ sql:update >
其中:
SQL语句:指定的update、insert、delete语句。
dataSource:是与要更新的数据库关联的数据源。
var:为数据库更新的结果指定导出的范围变量的名称。
scope:指定变量的范围。
<
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标签的实例演示:
使用 < sql:query > 或 < sql:update > 语句
</ sql:transaction >
dataSource:设置SQL的数据源,它可以是字符串或一个DataSource对象。
isolation:设置事务处理的隔离级别。隔离级别可以是read_committed、read_uncommitted、repeatable_read或serializable。
<%
@ 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导入到相应的目录下。
<% @ 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 >
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中的节点数。其语法:
需要解析的XML文档
</ x:parse >
var:储存解析后的XML文件。
scope:变量的JSP范围。
varDom:储存解析后的XML文件(类型为org.w3c.dom.Document)。
scopeDom:属性varDom指出变量的有效范围。
systemId:XML文件的URI。
filter:XMLFilter过滤器。
<
x:out
select
="XpathExpression"
[escapeXml
="{true|false]"
]
/>
select:XPath语句。
escapeXml:是否转换特殊字符,例如: < 转换成< ;
3)<x:set>标签将从XML文件中取得的内容存储至JSP范围中,其语法为:
select:XPath语句。
escapeXml:是否转换特殊字符,例如: < 转换成< ;
<
x:set
select
="XPathExpression"
var
="var"
[scope
="{page|request|session|application}"
]
/>
select:XPath语句。
var:将XML文件中取得的内容储存至varName中。
scope:变量的JSP范围。
4)XML标签实例:book.xml与readBook.jsp
select:XPath语句。
var:将XML文件中取得的内容储存至varName中。
scope:变量的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的源代码如下:
< 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 >
<%
@ 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两文件。
<% @ 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 >