catch标签实例
910 11 < c:set target="Dank" property="hao">12 13 14 15 【代码解析】:(1)第10~12把容易产生异常的代码放在中,自定义一个变量error用于存储异常信息。(2)第11行实现了一段异常代码,向一个不存在的JavaBean中插入一个值。(3)第13行用EL表达式得到error的值,并使用标签输出。程序结果如图所示。图9.5 coredemo05.jsp图中异常信息的提示为:在标签中用不正确的参数“hao”。如果不捕获程序中的异常,也就是不使用捕获容易产生异常的代码,将会出现如图9.6所示,这是在开发中不允许的。图9.6 程序异常提示:本示例没有使用捕获Java脚本的样式,如果使用标签再使用Java脚本的意义不大,由此可以看出主要用于页面标签产生的异常。9.2.2 流程控制标签流程控制标签主要用于对页面简单业务逻辑进行控制。流程控制标签包含有4个:标签、标签、标签和标签。下面将介绍这些标签的功能和使用方式。1.标签同程序中的if作用相同,用来实现条件控制。【语法1】:【语法2】:【参数说明】:(1)test属性用于存放判断的条件,一般使用EL表达式来编写。(2)var指定名称用来存放判断的结果类型为true或false。(3)scope用来存放var属性存放的范围。【使用场景】:在开发中经常会出现不同用户的权限,首先对用户名进行判断(包括进行数据库验证,该功能可以由JavaBean实现,使用EL表达式得到一个布尔型的结果),把判断的结果存放在不同的JSP范围内(比如常用的session内),这样在每个页面都可以得到该用户的权限信息,根据不同权限的用户显示不同的结果。【示例代码】:代码9.8实现了用户输入用户名提交到自身页面,页面判断用户是否为admin,如果是将出现欢迎界面,如果不是显示不同结果。代码9.8 标签使用示例:coredemo06.jsp1 <%@ page language="java" pageEncoding="gbk"%>2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>3 4 5 6 7 8
if标签示例
910 11 1213 14 15 16 17 18 ${adminchock}1920【代码解析】:(1)第10~13行创建一个表单,表单中的元素为一个text文本输入框,一个提交按钮,并把信息提交给本页。(2)第14行使用if标签进行判断,如果输入的为admin将显示出定义的字符串,并把检验后的结果赋给adminchock,存储在默认的page范围中。(3)第18行使用EL表达式得到adminchock的值,如果输入的用户名为admin将显示true。程序运行效果如图9.7所示。图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.jsp1 <%@ page language="java" pageEncoding="gbk"%>2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>3 4 5 6 7 8
choose及其嵌套标签示例
910 8511 12 c:when test="${score>=90}">13 你的成绩为优秀!14 15 16 您的成绩为良好!17 18 19 您的成绩为及格20 21 22 对不起,您没有通过考试!23 24 25 26 【代码解析】:(1)第10行通过set标签设定score的值为85。(2)第12~22行使用进行条件判断。如果大于等于90,输出“您的成绩为优秀”;如果大于等于70小于90,输出“您的成绩为良好”;大于等于60小于70,输出“您的成绩为及格”;其他(otherwise)输出“对不起,您没能通过考试”。程序运行结果如图9.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 循环标签属性说明名称EL类型是否必须默认值varNString是无itemsYArraysCollectionIteratorEnumerationMapString []args是无beginYint否0endYint否集合中最后一个元素stepYint否1varStatusNString否无其中varStatus有4个状态属性(见表9-2)。表9-2 varStatus的4个状态属性名类型说明indexint当前循环的索引值countint循环的次数fristboolean是否为第一个位置lastboolean是否为第二个位置【示例代码】:代码9.10实现了遍历的两种方式:设定起始位置、不设定起始位置。同时实现了获得原属的状态信息。代码9.10 标签使用示例:coredemo08.jsp1 <%@ 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 11
12 <%13 List a=new ArrayList();14 a.add("贝贝");15 a.add("晶晶");16 a.add("欢欢");17 a.add("莹莹");18 a.add("妮妮");19 request.setAttribute("a",a);20 %>21
22 23
24 25
26 27
28 29
30 31 的四种属性:
32 所在位置,即索引:
33 总共已迭代的次数:
34 是否为第一个位置:
35 是否为最后一个位置:
36 37 38 【代码解析】:(1)第13~18行通过Java脚本创建了一个集合对象a,并添加元素。(2)第19行使用setAttribute()方法把集合存入request范围内。(3)第22~24行未指定begin和end属性,直接从集合开始遍历到集合结束为止。(4)第26~28行指定从集合的第二个(index值为1)元素开始,到第四个(index值为3)元素截止(index的值从0开始)。并指定step为2即每隔两个遍历一次。(5)第30~35指定varStatus的属性名为s,并取出存储的状态信息。程序运行结果如图9.9所示。图9.9 coredemo08.jsp运行结果【总结】:(1)从图中可以看到不使用begin和end的迭代,从集合的第一个元素开始,遍历到最后一个元素。(2)指定begin的值为1、end的值为3、step的值为2,从第二个开始首先得到晶晶,每两个遍历一次,则下一个显示的结果为莹莹,end为3则遍历结束。(3)从指定的begin和end的值来看遍历第四个和第五个,因得到莹莹和妮妮。相关状态信息如图所示。提示:本例使用的list是在JSP页面中使用Java脚本创建的,是因为JSTL缺少创建集合的功能,在开发中一般不会如此,可通过访问数据库得到数据集合,和通过设定JavaBean的值得到数据集合2.该标签用于浏览字符串,并根据指定的字符将字符串截取。语法:【参数说明】(1)items指定被迭代的字符串。(2)delims指定使用的分隔符。(3)var指定用来存放遍历到的成员。(4)begin指定遍历的开始位置(int型从取值0开始)。(5)end指定遍历结束的位置(int型,默认集合中最后一个元素)。(6)step遍历的步长(大于0的整型)。(7)varStatus存放遍历到的成员的状态信息。【示例代码】:代码9.11实现了遍历一个有符号的字符串,把指定的符号移除。指定begin和end值,并获得遍历到的元素的状态信息。代码9.11 标签的示例:coredemo09.jsp1 <%@ 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 11 12
13 14 15
16 17 的四种属性:
18 所在位置,即索引:
19 总共已迭代的次数:
20 是否为第一个位置:
21 是否为最后一个位置:
22 23 24 【代码解析】:(1)本示例共实现了3个循环,10~12行第一个循环实现了遍历给定字符串“北、京、欢、迎、您”,并除去循环中遇到的“、”号。(2)13~15行第2个循环遍历一串带有分隔符的电话号码,不读取分隔符号,将显示一个字符串。(3)16~22行第3个循环遍历一个带“*”号的字符串,根据指定的起始位置把元素取出,并显示每个元素的状态信息。提示:分隔符的作用是根据标识,截取字符串。如果未设定分隔符或在字符串中没有找到分隔付,将把整个元素作为一个元素截取。在实际应用中用于在除去某些符号在页面中显示。程序运行结果如图9.10所示。图9.10 coredemo08.jsp的属性varStatus的使用同的使用方法相同,在此就再不表述。9.2.4 URL操作标签JSTL包含3个与URL操作有关的标签,分别为:、和标签。它们的作用为:显示其他文件的内容、网页导向、产生URL。下面将详细介绍这3个标签的使用方法。1.标签该标签可以把其他静态或动态文件包含到本JSP页面。同的区别为:只能包含同一个web应用中的文件。而可以包含其他web应用中的文件,甚至是网络上的资源。语法1:语法2:主要参数见表9-3。表9-3 标签参数说明名称说明EL类型必须默认值url被导入资源的URL路径YString是无context相同服务器下其他的web工程,必须以“"”开头YString否无var以String类型存入被包含文件的内容。NString否无Scopevar变量的JSP范围NString否pagecharEncoding被导入文件的编码格式YString否无varReader以Reader类型存储被包含文件内容NString否无【参数说明】:(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 标签示例:coredemo10.jsp1 <%@ 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 11 12 13 14 15
16
17
18 19 20 2122 23 24 25 26 27 28 29 30 【代码解析】:(1)第12行使用绝对路径导入百度首页,导入时使用(11和12行)捕获异常。(2)使用相对路径导入同一文件夹下的a1.txt文件,接收的字符编码格式使用charEncoding设置为gbk。(3)同样导入a1.txt,不同的时使用var定义的变量接收要导入的文件,并存储在session中,如果在其他页面同样也要导入该文件,只须使用输出a1.txt的值即可。程序结果如图9.11所示。图9.11 coredemo10.jsp运行结果【说明】:(1)在使用绝对路径导入时,因为电脑没有联网所以抛出异常。(2)使用相对路径输出时,同样是引入的a1.txt文件显示的结果却不相同,这可以说明直接使用导入,不设定var参数是直接在页面中显示的文本信息。而使用var参数输出时输出的实现存入的字符串。提示:读者在练习时可以使用Tomcat的首页来导入url=”http://127.0.0.1:8080”来显示效果。2.标签该标签用来实现了请求的重定向。同时可以在url中加入指定的参数。例如:对用户输入的用户名和密码进行验证,如果验证不成功重定向到登录页面;或者实现web应用不同模块之间的衔接。【语法1】:【语法2】:【参数说明】:(1)url指定重定向页面的地址,可以是一个string类型的绝对地址或相对地址。(2)用于导入其他web应用中的页面。【示例代码】:代码9.13实现了当请求页面时重定向到tomcat首页。代码9.13 标签示例:coredemo11.jsp<%@ page contentType="text/html;charset=GBK" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>olive01234【代码解析】(1)使用重定向与载入页面不同,载入页面时在本页面中插入其他页面,而重定向是请求转发,等于在页面中重新输入了一次url。当重定向到某个页面时浏览器中的地址会发生变化。(2)使用重定向时不用使用语句,当输入页面访问不到时,浏览器会报错,跟程序运行无关。如果使用重定向时页面定义的内容将不会得到显示。(3)在重定向时为URL添加了两个参数和参数值:uname=olive和password=01234。程序运行结果如图9.12所示。图9.12 coredemo11.jsp运行结果提示:注意图中的URL地址已经发生转变,同时可以看到传入的参数以参数值。3.标签该标签用于动态生成一个String类型的URL,可以同标签共同使用,也可以使用html的标签实现超链接。【语法1】:指定一个url不做修改,可以选择把该url存储在JSP不同的范围中。【语法2】:给url加上指定参数及参数值,可以选择以name存储该url。【示例代码】:代码9.14实现了使用动态生成url实现了网页的超链接。代码9.14 标签示例:coredemo12.jsp<%@ page contentType="text/html;charset=GBK" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
使用url标签生成一个动态的url,并把值存入session中.
Tomcat首页程序运行结果如图9.13所示。图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】:【语法2】: 被格式化的数据属性说明如表9-4所示。表9-4 标签参数说明名称说明EL类型必须默认值value要格式化的数据是String是无type指定类型(单位、货币、百分比等)见表是String否numberpattern格式化的数据样式是String否无currencyCode货币单位代码是String否无cuttencySymbol货币符号($、¥)是String否无groupingUsed是否对整数部分进行分组如(9,999)是boolean是truemaxIntergerDigits整数部分最对显示多少位数是int否无minIntergerDigits整数部分最少显示多少位是int否无maxFractionDigits小数部分最多显示多少位是int否无minFractionDigits小数部分最少显示多少位是int否无var存储格式化后的数据否String否无scopevar的JSP范围否String否pageType属性的类型应用见表9-5.表9-5 Type的属性类型类型说明示例number数字格式0.8currency当地货币¥0.80percent百分比格式80%【示例代码】:代码9.14实现了对数字的格式化、货币的格式、货币的格式化。使用的各种属性的设定。代码9.14 标签示例:fmtdemo01.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" %>
类型 | 使用数据 | 结果 | 说明 |
数字格式化 | 108.75 | 108.75 | 使用pattern可以定义显示的样式。本例设定为###.#小数部分将使用四舍五入法。 |
数字格式化 | 9557 | 9557 | 使用科学计数法。 |
数字格式化 | 9557 | 9557 | 使用默认分组。 |
数字格式化 | 9557 | 9557 | 不使用分组。 |
数字格式化 | 9557 | 9557 | 使用位数限定,根据指定的位数显示,其他数字忽略。例如:9不被显示。 |
百分比格式化 | 0.98 | 0.98 | 用百分比形式显示一个数据。 |
货币格式化 | 188.88 | 188.8 | 将一个数据转化为货币形式输出。 |
存储数据 | 188.88 | 188.8 | 存储的money的值为${money} |
188.8
【代码解析】:(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】:【语法2】: Date【参数说明】参数说明见表9-9.表9-9 标签属性说明属性名说明EL类型必须默认值value将要格式化的日期时间是String是无type字符串的类型(日期、时间或全部)ELString是datepattern字符串使用的时间样式是String是无parseLocale取代默认地区设定是String是默认地区dateStyle字符串使用的日期显示方式是String否defaulttimeStyle字符串使用的时间显示格式是String否defaulttimeZone使用的时区是String否当地区时var使用var定义的名字保存对象否String否无scopevar的JSP范围否String否page【示例代码】:代码9.16实现了以下功能:首先,使用了把一个日期对象格式化成一个日期的字符串,并把该字符串以参数名为a存储page范围内。其次,使用方法把a的值(字符串)格式化成一个Date并以参数名为b存储在page范围内。最后,使用Java脚本证明生成的b为对象。代码9.16:标签示例:fmtdemo04.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" %>
${a} <% out.println(pageContext.getAttribute("b").toString()); out.println("
"); out.println(pageContext.getAttribute("b").hashCode()); %> 【代码解析】:(1)使用把日期对象格式化成字符串。(2)使用把字符串对象转化为日期对象,注意同(1)中的参数对比,可以发现两者是一个互逆的过程。(3)使用Java脚本进行测试Date对象的toString()方法可以输出时间字符串。hashCode()可以得到一个对象的hashCode。该方法只能应用于对象,因此可以证明得到的是一个日期对象。程序运行结果如图9.19所示。图9.19 fmtdemo04.jsp提示:和是相反的运算过程,可以对照学习。本例中的Java脚本的作用是为了证明生成的的确是一个对象。5.标签该标签用于设定默认时区或者将时区存储在指定的JSP范围内。【语法】:【参数说明】:见表9-10表9-10 标签属性说明参数名说明EL类型必须默认值value使用的时区是StringJava.util.TimeZone是无var使用var定义的参数名保存值否String否无scope存储var的JSP范围否String否pagevalue用来设定使用的时区,例如中国使用的时区为CST,其他的还有EST、PST等。可以把时区存储在指定的JSP范围内,例如存储在session中,用户访问的所有页面都可以显示使用的设定的时区下对应的时间。【示例代码】提示:有关TimeZone的说明见JDK帮助文档的java.util.TimeZone类。6.标签该标签主要用于设置标签体内使用的时区。【语法】:…..使用只会应用到标签体内使用的时区,对标签外部将不产生影响。9.3.2 读取消息资源读取消息资源用到的标签主要有4个:标签、标签、标签和标签。主要用于从资源文件中读取信息。1.标签该标签主要用于将资源文件绑定于它的标签体中的显示。【语法】:….标签主题【参数说明】:见表9-11。表9-11 标签属性说明参数名说明EL类型必须默认值basename指定使用的资源文件的名称是String是无prefix前置关键字是String否无2.标签该标签主要用于绑定资源文件或者把资源文件保存在指定的JSP范围内。【语法】: 【参数说明】:见表9-12。表9-12 标签属性说明参数名说明EL类型必须默认值basename指定使用的资源文件的名称是String是无var指定将资源文件保存的名称否String否无scope设定将资源文件保存的JSP范围否String否page3.标签该标签主要负责读取本地资源文件,从指定的消息文本资源文件中读取键值,并且可以将键值保存在指定的JSP范围内。【语法1】:【语法2】: 【语法3】: key…【参数说明】:见表9-13。表9-13 标签属性说明参数名说明EL类型必须默认值key指定键值的名称(索引)是String是无bundle指定消息文本的来源是LocalizationContext否无var指定存储键值的变量名否String否无scope指定var的作用域否String否page提示:建议此处的bundle使用EL表达式,因为属性bundle的类型为LocalizationContext,而不是一个String类型的URL。【示例代码】:代码9.17实现从指定的资源文件中读取对应key的值。首先编写一个资源文件内容下name=olivepassword=01234使用标签从资源文件中读取相应的值。代码9.17 标签示例: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" %>
${m} 【代码解析】:(1)使用标签指定从message.properties文件中读取值。(2)使用标签读取资源文件中key为name的值。标签放在标签体内使用。(3)使用标签在page范围绑定一个配置文件,以m为参数名存储。(4)使用标签得到key为password的值,此处指定资源文件的方式为使用标签的bundle属性来设定。(5)输出参数m的值,加深对bundle的理解。程序运行结果如图所示。图9.20 fmtdemo05.jsp运行效果标签中有一个prefix属性,该标签用来指明前缀。例如配置文件内容如下:org.person.name=oliveorg.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 标签示例: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" %>
【代码解析】:(1)使用标签把资源文件绑定在标签体内。(2)在标签体内使用得到键值。(3)使用为资源文件中的动态变量赋值。程序运行结果如图9.21所示。图9.21 fmtdemo06.jsp运行结果提示:资源文件经过修改后,应用程序需要重载才能生效。9.3.3 国际化国际化这个分类中共包含两个标签:用于设定语言地区和用于设定请求的字符编码的标签。1.标签标签用来设定用户语言区域。【语法】:【参数说明】:见表9-14。表9-14 标签属性说明参数名说明EL类型必须默认值value指定区域代码是Stringjava.util.Locale是无variant操作系统的类型是String是无scope设定时区的作用范围否String是pagevalue属性用来指定使用的语言代码,可以从浏览器的【工具】---【Internet选项】---【语言】---【添加】中查看浏览器支持的语言种类及语言代码。例如:中文(zh_cn)、台湾(zh_tw)、香港(zh_mo)等。【示例代码】:代码9.19实现了设定不同的区域代码,根据不同的区域代码浏览将显示不同格式的日期。代码9.19 标签示例: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" %>
【代码解析】:(1)浏览器默认跟您使用的操作系统的语言相同,因此默认值zh_cn。使用标签设置使用的语言为en_us(英语)。使用格式化输出的时间字符串,该标签会根据不同的语言输出不同的日期格式。(2)使用的语言修改为zh_cn,再次用格式化输出。(3)使用语言修改为zh_TW,输出格式化后的时间。程序运行结果如图所示。图9.22 fmtdemo07.jsp运行结果2.标签该标签用于设定请求的编码格式。功能同servletRequest.setCharacterEncoding()方法相同。【语法】:【参数说明】: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】:直接使用已经存在的数据源。【语法2】:使用JDBC方式建立数据库连接。【参数说明】:见表9-15表9-15 标签属性说明参数名说明EL类型必须默认值dataSource数据源是StringJavax.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=””使用配置的代码如下:如果连接其他数据库,只须把相对应的项修改即可。提示:可以把数据连接的配置存入session中,如果再用到数据库连接只须配置使用DataSource属性。9.4.2 SQL操作标签JSTL提供了、、、和这5个标签,通过使用SQL语言操作数据库,实现增加、删除、修改等操作。下面将介绍这5个标签的功能和使用方式。1.标签标签用来查询数据。【语法1】:【语法2】: sqlQuery【属性说明】:见表9-16。表9-16 标签属性说明参数名说明EL类型必须默认值sql查询数据的SQL语句是String是无dataSource数据源对象是StringJavax.sql.DataSoutce否无maxRow设定最多可以暂存数据的行数是String否无startRow设定从那一行数据开始是String否无var指定存储查询结果的变量名否String是无scope指定结果的作用域否String否page使用必须指定数据源,dataSource是可选的,如果未给定该属性标签会在page范围内查找是否设置过数据源,如果没有找到将抛出异常。一般情况下使用标签设置一个数据源存储在session范围中,当需要数据库连接时使用dataSource属性并实现数据库的操作。的var属性是必须的用来存放结果集,如果没有指定scope范围则默认为page,即在当前页面我们可以随时输出查询结果。结果集有一系列的属性如表9-17所示。maxRows和startRow属性用来操作结果集,使用SQL语句首先吧数据放入内存中,检查是否设置了startRow属性,如果设置了就从starRow指定的那一行开始取maxRows个值,如果没有设定则从第一行开始取。表9-17 结果集参数说明属性名类型说明rowCountint结果集中的记录总数RowsJava.util.Map以字段为索引查询的结果rowsByIndexObject[]以数字为作索引的查询结果columnNamesString[]字段名称数组limitedByMaxRowsboolean是否设置了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"%>
SQL标签库
结果集的实质是:${result}
得到的行数为:${result.rowCount}
是否收到了maxRows的限制:${result.limitedByMaxRows}
SQL标签库
实现数据库表的创建
create table c_user ( id int primary key , name varchar(80), sex varchar(80),)insert c_user values(05,'Linda','女')insert c_user values(01,'Rom','男' )影响的记录数为:
【代码解析】:(1)配置数据源。(2)使用标签创建一个新表。(3)向表中插入两行数据。提示:本示例也没有针对固定的表进行操作,在使用时直接运行即可,如果使用的是其他数据库,需要更改数据源配置和SQL语句部分修改。程序运行结果如图9.24所示。图9.24 sqldemo02.jsp运行效果从图9.24中可以发现,使用的var属性记录结果是不准确的,尤其是在一个标签中使用多条sql语句只能记录下第一条。在数据库中创建的c_user表如图9.25所示。图9.25 SQL表的内容3.标签标签用于动态的为SQL语句设定参数,同标签共同使用。可以防止SQL注入作用类似于java.sql.PreparedStatement。【语法1】:【语法2】:Value【参数说明】:value的作用为SQL中的参数赋值。【使用示例】:select * from person where 序号=?4.标签标签主要用于为SQL标签填充日期类型的参数值。【语法】:【参数说明】:q value属性:java.util.Date类型的参数。q type属性:指定填充日期的类型timestamp(全部日期和时间)、time(填充的参数为时间)、date(填充的参数为日期)。5.标签标签提供了数据操作的一种安全机制(即事务回滚),当操作数据库的某条SQL语句发生异常时,取消标签体中的所有操作,恢复原来的状态,重新对数据库进行操作。【语法】: 9.5 XML标签库JSTL提供了操作xml文件的标签库,使用xml标签库可以省去使用Dom和SAX标签库的繁琐,能轻松的读取xml文件的内容。9.5.1 XML核心标签库1.标签标签用来解析指定的xml文件。【语法1】:【语法2】: xmlDocument【参数说明】:见表9-20。表9-20 标签属性说明属性名说明EL类型必须默认值doc指定解析的xml文件是String/Reader是无var存储解析后的xml文件否String否无scope指定var的JSP范围否String否pagevarDom以(org.w3c.dom.Doucemet)的形式存储解析的xml文件否String否无scopeDom指定varDom的JSP范围否String否pagesystemIdxml文件的url是String否无filter解析xml文件的过滤器否Org.xml.sax.Filter否无提示:doc指定解析的xml文件并不是指定xml文件的路径,而是同共同使用,由加载并存储,然后使用解析。例如:如果解析person.xml文件需要通过如下代码实现对xml文件的解析。语句用来导入或存储文件到JSP。如果不使用var来存储,xml文件将显式的出现在JSP文件中。标签只用来解析xml文件,并不显示xml文件中的内容,如果想得到xml的节点元素或值需要使用元素来实现。2.标签标签主要用来输出xml的信息。【语法】:【参数说明】:见表9-21。表9-21 标签属性说明属性名说明EL类型必须默认值select指定使用的XPath语句否String是无escapeXml是否转换特殊字符。如<等否boolean是true提示:使用XPath语句需要用到xalan.jar支持包,可以从示例程序的lib中获取,获得直接从myEclipse中可以找到。【示例代码】:3.标签标签用于将从xml文件节点解析的内容存储到JSP属性范围中。【语法】:【参数说明】:(1)select通过指定的XPath表达式语句获取节点的值。(2)var指定用于存储值的变量名。(3)指定var的JSP属性范围。9.5.2 XML流程控制使用xml标签库的流程控制标签可以迭代处理xml文件的内容,流程控制可以分为以下两个方面的内容:(1)条件判断。(2)循环功能。1.主要用于条件判断。【语法1】:未含有本体内容。【语法2】:含有本体内容。 本体内容语法1只把根据条件表达式得到的结果的存储在JSP范围中,语法2根据标签根据条件表达式的结果决定是否执行本体内的代码。【参数说明】:(1)select用来指定使用的XpathExperssion表达式。(2)var设定标量名用来存储表达式的结果。(3)scope指定var存储的JSP属性范围。2.、和标签同核心标签库的、和标签作用相似,只是使用的条件表达式不同。是主标签,和放在标签体内共同使用。【语法】:其中只有有属性。【语法】:3.标签标签实现了对xml文档的遍历。【语法】: //标签主体【参数说明】:见表9-22。表9-22 标签属性说明属性名说明EL类型必须默认值select指定使用的XPath语句否String是无var用于存储表达式的结果否String否无varStatus用来存放循环到的变量的相关信息否String否无begin循环的起始位置是int否无end循环的终止位置是int否无9.5.3 xml的文件转换和能轻易使用XSLT样式包装xml文件,成为另一种显示方式。1.标签使用该标签可以轻松的实现xml到XSLT的转化。【语法1】:【语法2】: 【语法3】: Xml文件内容【参数说明】:见表9-23。表9-23 标签属性说明属性名说明EL类型必须默认值doc指定xml文件来源是String是无xslt转化xml的样式模板是String是无docSystemIdxml文件的URI是String否无xsltSystemIdxslt文件的URI是String否无result用来存储转换后的结果对象是java.xml.transform是无var以org.w3c.dom.Documet类型存储转换后的结果否String否无scopevar的属性范围否String否无2.标签该标签用来为标签转换参数。【语法1】:【语法2】: Value【参数说明】:(1)name指定参数的名称。(2)value指定参数值。