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】: