5.<fmt:setTimeZone>标签
该标签用于设定默认时区或者将时区存储在指定的JSP范围内。
【语法】:
<fmt:setTimeZone value=”value” [var=”name”][scope=”page|request|session|application”]/>
【参数说明】:见表9-10
表9-10 <fmt:setTimeZone>标签属性说明
参数名 | 说明 | EL | 类型 | 必须 | 默认值 |
value | 使用的时区 | 是 | String Java.util.TimeZone | 是 | 无 |
var | 使用var定义的参数名保存值 | 否 | String | 否 | 无 |
scope | 存储var的JSP范围 | 否 | String | 否 | page |
value用来设定使用的时区,例如中国使用的时区为CST,其他的还有EST、PST等。可以把时区存储在指定的JSP范围内,例如存储在session中,用户访问的所有页面都可以显示使用的设定的时区下对应的时间。
【示例代码】
<fmt:setTimeZone value=”EST” scope=”session”/>
提示:有关TimeZone的说明见JDK帮助文档的java.util.TimeZone类。
6.<fmt:timeZone>标签
该标签主要用于设置标签体内使用的时区。
【语法】:
<fmt:timeZone value=”timeZone”>
…..
</fmt:timeZone>
使用<fmt:timeZone></fmt:timeZone>只会应用到标签体内使用的时区,对标签外部将不产生影响。
9.3.2 读取消息资源
读取消息资源用到的标签主要有4个:<fmt:message>标签、<fmt:param>标签、<fmt:bundle>标签和<fmt:setBundle>标签。主要用于从资源文件中读取信息。
1.<fmt:bundle>标签
该标签主要用于将资源文件绑定于它的标签体中的显示。
【语法】:
<fmt:bundle basename=”name”[prefix=”prefix”]>
….标签主题
</fmt:bundle>
【参数说明】:见表9-11。
表9-11 <fmt:bundle>标签属性说明
参数名 | 说明 | EL | 类型 | 必须 | 默认值 |
basename | 指定使用的资源文件的名称 | 是 | String | 是 | 无 |
prefix | 前置关键字 | 是 | String | 否 | 无 |
2.<fmt:setBundle>标签
该标签主要用于绑定资源文件或者把资源文件保存在指定的JSP范围内。
【语法】:
<fmt:setBundle basename=”name” [var=”name”]
[scope=”page|request|session|application”]
>
【参数说明】:见表9-12。
表9-12 <fmt:setBundle>标签属性说明
参数名 | 说明 | EL | 类型 | 必须 | 默认值 |
basename | 指定使用的资源文件的名称 | 是 | String | 是 | 无 |
var | 指定将资源文件保存的名称 | 否 | String | 否 | 无 |
scope | 设定将资源文件保存的JSP范围 | 否 | String | 否 | page |
3.<fmt:message>标签
该标签主要负责读取本地资源文件,从指定的消息文本资源文件中读取键值,并且可以将键值保存在指定的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”]
>
<fmt:param/>
</fmt:message>
【语法3】:
<fmt:message key=”keyName”[bundle=”bundle”]
[scope=”page|request|session|application”]
>
key<fmt:param/>
…
</fmt:message>
【参数说明】:见表9-13。
表9-13 <fmt:message>标签属性说明
参数名 | 说明 | EL | 类型 | 必须 | 默认值 |
key | 指定键值的名称(索引) | 是 | String | 是 | 无 |
bundle | 指定消息文本的来源 | 是 | LocalizationContext | 否 | 无 |
var | 指定存储键值的变量名 | 否 | String | 否 | 无 |
scope | 指定var的作用域 | 否 | String | 否 | page |
提示:建议此处的bundle使用EL表达式,因为属性bundle的类型为LocalizationContext,而不是一个String类型的URL。
【示例代码】:代码9.17实现从指定的资源文件中读取对应key的值。
首先编写一个资源文件内容下
name=olive
password=01234
使用标签从资源文件中读取相应的值。
代码9.17 <fmt:message>标签示例:fmtdemo05.jsp
<%@ 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" %>
<jsp:useBean id="date" class="java.util.Date"></jsp:useBean>
<html>
<head>
<title>I18N标签库</title>
</head>
<body>
<H4><c:out value="资源文件读取示例"></c:out></H4>
<hr>
<fmt:bundle basename="message">
<c:out value="从message资源文件中得到的key为name的值为:"></c:out>
<fmt:message key="name" ></fmt:message>
</fmt:bundle>
<hr>
<fmt:setBundle basename="message" var="m"/>
<fmt:message key="password" bundle="${m}"></fmt:message>
${m}
</body>
</html>
【代码解析】:
(1)使用<fmt:bundle>标签指定从message.properties文件中读取值。
(2)使用<fmt:message>标签读取资源文件中key为name的值。<fmt:message>标签放在<fmt:bundle>标签体内使用。
(3)使用<fmt:setBundle>标签在page范围绑定一个配置文件,以m为参数名存储。
(4)使用<fmt:message>标签得到key为password的值,此处指定资源文件的方式为使用<fmt:message>标签的bundle属性来设定。
(5)输出参数m的值,加深对bundle的理解。
<fmt:bundle>标签中有一个prefix属性,该标签用来指明前缀。例如配置文件内容如下:
org.person.name=olive
org.personpassword=01234
如果不使用prefix标签,在取值是要指明前缀。例如:
<fmt:bundle basename=”message”>
<fmt:message key=”org.person.name”></fmt:message>
<fmt:message key=”org.person.password”></fmt:message>
</fmt:bundle>
使用prefix属性可以简化取值时的代码。
<fmt:bundle basename=”message” prefix=”org.person”>
<fmt:message key=”name”></fmt:message>
<fmt:message key=”password”></fmt:message>
</fmt:bundle>
4.<fmt:param>标签
该标签主要用于当<fmt:message>中资源文件中获得键值时,动态的为资源文件中的变量赋值。
【语法1】:
<fmt:param value=”value”/>
【语法2】:
<fmt:param >
…标签主体
</fmt:param>
【示例代码】:
(1)创建资源文件。在message.properties文件中增加一个key和value。
news={0} welcome to out website!<br>today is :{1,date}
表达的含义是键news对应的是一个字符串,字符串中还有动态变量{0}表示第一个动态变量,{1,date}表示第二个动态变量并且该变量是一个日期类型的对象。
(2)通过标签从资源文件中取出键值,并给动态变量赋值显示在页面。
代码9.18 <fmt:param>标签示例:fmtdemo06.jsp
<%@ 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" %>
<jsp:useBean id="date" class="java.util.Date"></jsp:useBean>
<html>
<head>
<title>I18N标签库</title>
</head>
<body>
<H4><c:out value="<fmt:param>标签的使用"></c:out></H4>
<hr>
<fmt:bundle basename="message">
<fmt:message key="news">
<fmt:param value="olive" />
<fmt:param value="${date}"/>
</fmt:message>
</fmt:bundle>
</body>
</html>
【代码解析】:
(1)使用<fmt:bundle>标签把资源文件绑定在标签体内。
(2)在<fmt:bundle>标签体内使用<fmt:message>得到键值。
(3)使用<fmt:param>为资源文件中的动态变量赋值。
提示:资源文件经过修改后,应用程序需要重载才能生效。
9.3.3 国际化
国际化这个分类中共包含两个标签:用于设定语言地区<fmt:setLocale/>和用于设定请求的字符编码的<fmt:requestEncoding>标签。
1.<fmt:setLocale/>标签
<fmt:setLocale>标签用来设定用户语言区域。
【语法】:
<fmt:setLocale value=”locale”[variant=”variant”]
[scope=”page|request|session|application”]>
【参数说明】:见表9-14。
表9-14 <fmt:setLocale>标签属性说明
参数名 | 说明 | EL | 类型 | 必须 | 默认值 |
value | 指定区域代码 | 是 | String java.util.Locale | 是 | 无 |
variant | 操作系统的类型 | 是 | String | 是 | 无 |
scope | 设定时区的作用范围 | 否 | String | 是 | page |
value属性用来指定使用的语言代码,可以从浏览器的【工具】---【Internet选项】---【语言】---【添加】中查看浏览器支持的语言种类及语言代码。例如:中文(zh_cn)、台湾(zh_tw)、香港(zh_mo)等。
【示例代码】:代码9.19实现了设定不同的区域代码,根据不同的区域代码浏览将显示不同格式的日期。
代码9.19 <fmt:setLocale>标签示例:fmtdemo07.jsp
<%@ 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" %>
<jsp:useBean id="date" class="java.util.Date"></jsp:useBean>
<html>
<head>
<title>I18N标签库</title>
</head>
<body>
<H4><c:out value="<fmt:setlocale>标签的使用"></c:out></H4>
<hr>
<fmt:setLocale value="en_us" />
<fmt:formatDate value="${date}" type="both" dateStyle="full" timeStyle="full"/>
<hr>
<fmt:setLocale value="zh_cn" />
<fmt:formatDate value="${date}" type="both" dateStyle="full" timeStyle="full"/>
<hr>
<fmt:setLocale value="zh_TW"/>
<fmt:formatDate value="${date}" type="both" dateStyle="full" timeStyle="full"/>
</body>
</html>
【代码解析】:
(1)浏览器默认跟您使用的操作系统的语言相同,因此默认值zh_cn。使用<fmt:setLocale/>标签设置使用的语言为en_us(英语)。使用<fmt:formateDate>格式化输出的时间字符串,该标签会根据不同的语言输出不同的日期格式。
(2)使用的语言修改为zh_cn,再次用格式化输出。
(3)使用语言修改为zh_TW,输出格式化后的时间。
2.<fmt:requestEncoding>标签
该标签用于设定请求的编码格式。功能同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 设置数据源
使用<sql:setDataSource>标签可以实现对数据源的配置。
【语法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 <sql:DataSource>标签属性说明
参数名 | 说明 | EL | 类型 | 必须 | 默认值 |
dataSource | 数据源 | 是 | String Javax.sql.DataSource | 否 | 无 |
driver | 使用的JDBC驱动 | 是 | String | 否 | 无 |
url | 连接数据库的路径 | 是 | String | 否 | 无 |
user | 连接数据库的用户名 | 是 | String | 否 | 无 |
password | 连接数据库的密码 | 是 | String | 否 | 无 |
var | 指定存储数据源的变量名 | 否 | String | 否 | 无 |
scope | 指定数据源存储的JSP范围 | 否 | String | 否 | page |
提示:是否必须是相对的,比如说如果使用数据源则,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=””
使用<fmt:setDataSource>配置的代码如下:
<fmt:setDataSource driver=”com.microsoft.jdbc.sqlserver.SQLServerDriver”
url=”jdbc.microsoft:sqlserver://localhost:1433;DatabaseName=pubs”
user=”sa”
password=””>
如果连接其他数据库,只须把相对应的项修改即可。
提示:可以把数据连接的配置存入session中,如果再用到数据库连接只须配置使用DataSource属性。
9.4.2 SQL操作标签
JSTL提供了<sql:query>、<sql:update>、<sql:param>、<sql:dateParam>和<sql:transaction>这5个标签,通过使用SQL语言操作数据库,实现增加、删除、修改等操作。下面将介绍这5个标签的功能和使用方式。
1.<sql:query>标签
<sql:query>标签用来查询数据。
【语法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
</sql:query>
【属性说明】:见表9-16。
表9-16 <sql:query>标签属性说明
参数名 | 说明 | EL | 类型 | 必须 | 默认值 |
sql | 查询数据的SQL语句 | 是 | String | 是 | 无 |
dataSource | 数据源对象 | 是 | String Javax.sql.DataSoutce | 否 | 无 |
maxRow | 设定最多可以暂存数据的行数 | 是 | String | 否 | 无 |
startRow | 设定从那一行数据开始 | 是 | String | 否 | 无 |
var | 指定存储查询结果的变量名 | 否 | String | 是 | 无 |
scope | 指定结果的作用域 | 否 | String | 否 | page |
使用<sql:query>必须指定数据源,dataSource是可选的,如果未给定该属性标签会在page范围内查找是否设置过数据源,如果没有找到将抛出异常。
一般情况下使用<sql:setDateSource>标签设置一个数据源存储在session范围中,当需要数据库连接时使用dataSource属性并实现数据库的操作。
<sql:query>的var属性是必须的用来存放结果集,如果没有指定scope范围则默认为page,即在当前页面我们可以随时输出查询结果。结果集有一系列的属性如表9-17所示。
maxRows和startRow属性用来操作结果集,使用SQL语句首先吧数据放入内存中,检查是否设置了startRow属性,如果设置了就从starRow指定的那一行开始取maxRows个值,如果没有设定则从第一行开始取。
表9-17 结果集参数说明
属性名 | 类型 | 说明 |
rowCount | int | 结果集中的记录总数 |
Rows | 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给出了配置数据库连接,和使用<sql:query>查询数据以及结果集属性的使用。
代码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"%>
<html>
<head>
<title>JSTL: SQL标签</title>
</head>
<body >
<h3>SQL标签库</h3>
<hr>
<sql:setDataSource driver="com.microsoft.jdbc.sqlserver.SQLServerDriver"
url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs"
user="sa" password="" />
<sql:query var="result" sql="select * from person" maxRows="2" startRow="1"/>
结果集的实质是:${result}<br>
得到的行数为:${result.rowCount}<br>
是否收到了maxRows的限制:${result.limitedByMaxRows}
<hr>
<table border="1" align="center">
<tr><c:forEach var="columnName" items="${result.columnNames}">
<td>
<c:out value="${columnName}"/>
</td>
</c:forEach> </tr>
<c:forEach var="row" items="${result.rowsByIndex}">
<tr>
<c:forEach var="column" items="${row}">
<td><c:out value="${column}"/></td>
</c:forEach>
</tr>
</c:forEach>
</table>
</body>
</html>
【代码解析】:
(1)配置数据源。使用<sql:dataSource>标签配置数据源,因为只共本页使用因此存储在默认的page范围中。
(2)使用<sql:query>标签进行数据库查询,并定义了maxRows和startRow属性。并把结果集存储于作用于page范围的result变量。使用${result}输出可以发现结果集就是一个ResultImpl类。
提示:在进行数据源配置时程序不会检查数据库连接是否配置正确,直接根据设定的数据库及连接访问,如果没有找到则抛出操作的表异常,因此要放如<c:catch></c:catch>同时在编写程序时一定要注意数据源是否配置正确。
(3)使用结果集的rowCount属性得到记录的总量。代码为:
${result.rowCount}
(4)使用结果集的limitedMaxRows属性判断是否收到maxRows设定的影响。代码为:
${result.limitedMaxRows}
(5)从结果集中得到数据库中定义的所有的字段。${result.columnnames}得到的结果是一个字符串数组,因此需要使用<c:forEach>循环输出。代码如下:
<c:forEach var="columnName" items="${result.columnNames}">
<c:out value="${columnName}"/>
</c:forEach>
(6)从结果集中得到所有的值。首先要遍历每一行,然后遍历每一行中的元素,因此需要循环嵌套。代码如下:
<c:forEach var="columnName" items="${result.columnNames}">
<c:out value="${columnName}"/>
</c:forEach>
<c:forEach var="row" items="${result.rowsByIndex}">
<c:forEach var="column" items="${row}">
<c:out value="${column}"/></td>
</c:forEach>
</c:forEach>
提示:在代码解析中省略了html元素表格等标签的元素,本示例适用于任何数据库表,只要把数据库的URL、使用的JDBC进行相应的配置和操作的数据表名进行相应的修改即可看到结果。
2.<sql:update>标签
<sql:update>用来实现操作数据库如:使用create、update、delete和insert等SQL语句,并返回影响记录的条数。
【语法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语句
</sql:update>
【参数说明】:见表9-18。
表9-18 <sql:update>标签属性说明
参数名 | 说明 | EL | 类型 | 必须 | 默认值 |
sql | 查询数据的SQL语句 | 是 | String | 是 | 无 |
dataSource | 数据源对象 | 是 | String Javax.sql.DataSoutce | 否 | 无 |
var | 指定存储查询结果的变量名 | 否 | String | 是 | 无 |
scope | 指定结果的作用域 | 否 | String | 否 | page |
提示:<sql:update>标签的属性同<sql:query>标签的属性相比只减少了maxRows和startRow2个属性。其他参数用法一样。
使用<sql:update>可以实现数据表的创建、插入数据、更行数据、删除数据。使用时只须在标签中放入正确的SQL语句即可,同时要捕获可能产生的异常。本节只对一个简单的插入操作进行说明。
【示例代码】:代码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"%>
<html>
<head>
<title>JSTL: SQL标签</title>
</head>
<body >
<h3>SQL标签库</h3>
<hr>
<sql:setDataSource driver="com.microsoft.jdbc.sqlserver.SQLServerDriver"
url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs"
user="sa" password="" />
实现数据库表的创建<br>
<sql:update var="result1">
create table c_user (
id int primary key ,
name varchar(80),
sex varchar(80),
)
</sql:update>
<c:catch var="error">
<sql:update var="result2" >
insert c_user values(05,'Linda','女')
insert c_user values(01,'Rom','男' )
</sql:update>
影响的记录数为:<c:out value="${result2}"></c:out>
</c:catch>
<c:out value="${error}"></c:out><br>
<hr>
</body>
</html>
【代码解析】:
(1)配置数据源。
(2)使用<sql:update>标签创建一个新表。
(3)向表中插入两行数据。
提示:本示例也没有针对固定的表进行操作,在使用时直接运行即可,如果使用的是其他数据库,需要更改数据源配置和SQL语句部分修改。
使用<sql:update>的var属性记录结果是不准确的,尤其是在一个标签中使用多条sql语句只能记录下第一条。
3.<sql:param>标签
<sql:param>标签用于动态的为SQL语句设定参数,同<sql:query>标签共同使用。可以防止SQL注入作用类似于java.sql.PreparedStatement。
【语法1】:
<sql:param value=”value”/>
【语法2】:
<sql:param>
Value
</sql:param>
【参数说明】:
value的作用为SQL中的参数赋值。
【使用示例】:
<sql:query var=”result”>
select * from person where 序号=?
<sql:query>
4.<sql:dateParam>标签
<sql:dataParam>标签主要用于为SQL标签填充日期类型的参数值。
【语法】:
<sql:dateParam value=”date”[type=”timestamp|time|date”]/>
【参数说明】:
q value属性:java.util.Date类型的参数。
q type属性:指定填充日期的类型timestamp(全部日期和时间)、time(填充的参数为时间)、date(填充的参数为日期)。
5.<sql:transaction>标签
<sql:transaction>标签提供了数据操作的一种安全机制(即事务回滚),当操作数据库的某条SQL语句发生异常时,取消<sql:transaction>标签体中的所有操作,恢复原来的状态,重新对数据库进行操作。
【语法】:
<sql:transaction [dataSource=”dataSource”]
[isolation=”read_committed|read_uncommitted|repeatable|serializable”]
>
<sql:query>
<sql:uptade>
</sql:transation>
9.5 XML标签库
JSTL提供了操作xml文件的标签库,使用xml标签库可以省去使用Dom和SAX标签库的繁琐,能轻松的读取xml文件的内容。
9.5.1 XML核心标签库
1.<x:parse>标签
<x:parse/>标签用来解析指定的xml文件。
【语法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
</x:parse>
【参数说明】:见表9-20。
表9-20 <x:parse>标签属性说明
属性名 | 说明 | EL | 类型 | 必须 | 默认值 |
doc | 指定解析的xml文件 | 是 | String/Reader | 是 | 无 |
var | 存储解析后的xml文件 | 否 | String | 否 | 无 |
scope | 指定var的JSP范围 | 否 | String | 否 | page |
varDom | 以(org.w3c.dom.Doucemet)的形式存储解析的xml文件 | 否 | String | 否 | 无 |
scopeDom | 指定varDom的JSP范围 | 否 | String | 否 | page |
systemId | xml文件的url | 是 | String | 否 | 无 |
filter | 解析xml文件的过滤器 | 否 | Org.xml.sax.Filter | 否 | 无 |
提示:doc指定解析的xml文件并不是指定xml文件的路径,而是同<c:import>共同使用,由<c:import>加载并存储,然后使用<x:parse>解析。
例如:如果解析person.xml文件需要通过如下代码实现对xml文件的解析。
<c:import var="docString" url="person.xml"/><!--引入person.xml文件-->
<x:parse var="doc" doc="${docString}"/>
<c:import>语句用来导入或存储文件到JSP。如果不使用var来存储,xml文件将显式的出现在JSP文件中。
<x:parse>标签只用来解析xml文件,并不显示xml文件中的内容,如果想得到xml的节点元素或值需要使用<x:out>元素来实现。
2.<x:out>标签
<x:out>标签主要用来输出xml的信息。
【语法】:
<x:out select=”XpathExperssion”[excapeXml=”true|false”]>
【参数说明】:见表9-21。
表9-21 <x:out>标签属性说明
属性名 | 说明 | EL | 类型 | 必须 | 默认值 |
select | 指定使用的XPath语句 | 否 | String | 是 | 无 |
escapeXml | 是否转换特殊字符。如<等 | 否 | boolean | 是 | true |
提示:使用XPath语句需要用到xalan.jar支持包,可以从示例程序的lib中获取,获得直接从myEclipse中可以找到。
【示例代码】:
3.<x:set>标签
<x:set>标签用于将从xml文件节点解析的内容存储到JSP属性范围中。
【语法】:
<x:set select=”XPathExperssion” var=”name” scope=”page|request|session|application”>
【参数说明】:
(1)select通过指定的XPath表达式语句获取节点的值。
(2)var指定用于存储值的变量名。
(3)指定var的JSP属性范围。
9.5.2 XML流程控制
使用xml标签库的流程控制标签可以迭代处理xml文件的内容,流程控制可以分为以下两个方面的内容:
(1)条件判断。
(2)循环功能。
1.<x:if>
<x:if>主要用于条件判断。
【语法1】:未含有本体内容。
<x:if select=”XPathExperssion” var=”name”[scope=”page|request|session|application”]/>
【语法2】:含有本体内容。
<x:if select=”XPathExperssion” var=”name”[scope=”page|request|session|application”]
>
本体内容
</x:if>
语法1只把根据条件表达式得到的结果的存储在JSP范围中,语法2根据<x:if>标签根据条件表达式的结果决定是否执行本体内的代码。
【参数说明】:
(1)select用来指定使用的XpathExperssion表达式。
(2)var设定标量名用来存储表达式的结果。
(3)scope指定var存储的JSP属性范围。
2.<x:choose>、<x:when>和<x:otherwise>标签
同核心标签库的<c:choose>、<c:when>和<c:otherwise>标签作用相似,只是使用的条件表达式不同。
<x;choose>是主标签,<x:when>和<x:otherwise>放在<x:choose>标签体内共同使用。
【语法】:
<x:choose>
<x:when>
<x:when>
<x:otherwise>
</x:choose>
其中只有<x:when>有属性。
【语法】:
<x:when select=”XPathExperssion”>
3.<x:forEach>标签
<x;forEach>标签实现了对xml文档的遍历。
【语法】:
<x:forEach select=”XPathExperssion”[var=”name”][varStartus=”StartusName”]
[begin=”begin”][end=”end”][step=”step”]
>
//标签主体
</x:forEach>
【参数说明】:见表9-22。
表9-22 <x:forEach>标签属性说明
属性名 | 说明 | EL | 类型 | 必须 | 默认值 |
select | 指定使用的XPath语句 | 否 | String | 是 | 无 |
var | 用于存储表达式的结果 | 否 | String | 否 | 无 |
varStatus | 用来存放循环到的变量的相关信息 | 否 | String | 否 | 无 |
begin | 循环的起始位置 | 是 | int | 否 | 无 |
end | 循环的终止位置 | 是 | int | 否 | 无 |
9.5.3 xml的文件转换
<x:transform>和<x:param>能轻易使用XSLT样式包装xml文件,成为另一种显示方式。
1.<x:transform>标签
使用该标签可以轻松的实现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”]
>
<x:param/>
</x:transform>
【语法3】:
<x:transform doc=”xmldoc” xslt=”XSLTStytlesheet”[docSystemId=”xmlsystemid”]
[result=”result”]
[var=”name”]
[scope=”scopeName”]
[xsltSystemId=”xsltsystemid”]
>
Xml文件内容
<x:param/>
</x:transform>
【参数说明】:见表9-23。
表9-23 <x:transform>标签属性说明
属性名 | 说明 | EL | 类型 | 必须 | 默认值 |
doc | 指定xml文件来源 | 是 | String | 是 | 无 |
xslt | 转化xml的样式模板 | 是 | String | 是 | 无 |
docSystemId | xml文件的URI | 是 | String | 否 | 无 |
xsltSystemId | xslt文件的URI | 是 | String | 否 | 无 |
result | 用来存储转换后的结果对象 | 是 | java.xml.transform | 是 | 无 |
var | 以org.w3c.dom.Documet类型存储转换后的结果 | 否 | String | 否 | 无 |
scope | var的属性范围 | 否 | String | 否 | 无 |
2.<x:param>标签
该标签用来为<x:transform>标签转换参数。
【语法1】:
<x:param name=”name” value=”value”/>
【语法2】:
<x:param name=”name” value=”value”
>
Value
</x:param>
【参数说明】:
(1)name指定参数的名称。
(2)value指定参数值。