jstl标签

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 ;表达式控制标签
表达式控制分类中包括 4个标签,如今分别介绍它们的功能和语法。
1. 标签
【功能】:用来显示数据对象(字符串、表达式)的内容或结果。
在使用Java脚本输出时常使用的方式为:
<% out.println(“字符串”)%>
<%=表达式%>
在web开发中,为了不暴露逻辑代码会尽可能减小页面中的Java脚本,使用 标签就能够实现以上功能。


提示:JSTL的使用是和EL表达式分不开的,EL表达式虽然能够直接将结果返回给页面,但有时获得的结果为空, 有特定的结果处理功能,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 标签使用示例:coredemo01.jsp
1 <%@ page pageEncoding="gbk" %>
2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3
4
5 out标签的使用
6
7
8
html

  • (1)

  • 9
  • (2) <使用字符转义> " escapeXml="false">

  • 11
  • (4) 使用了默认值

  • 12
  • (5)

  • 13
    14
    【代码解析】:
    (1)第8行为 的value属性赋值为字符串。
    (2)第9行和第10行对比,在改变escapeXml属性后页面输出的转义字符。
    (3)第11行value获得null,若是方法体内有值,将输出方法体中的字符串,不然不输出,第12行没有输出结果。
    程序运行结果如图9.1所示。

    图9.1 coredemo01.jsp运行结果
    【代码解析】:
    (1)直接输出了一个字符串。
    (2)字符串中有转义字符,但在默认状况下没有转换。
    (3)使用了转义字符 <和> 分别转换成 <和> 符号。
    (4)设定了默认值,从EL表达式${null}获得空值,因此直接输出设定的默认值。
    (5)未设定默认值,输出结果为空。
    2. 标签
    功能:主要用于将变量存取于JSP范围中或JavaBean属性中。
    标签的编写共有4种语法格式。
    语法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范围赋值的示例。使用 标签把值放入session、application对象中。同时使用EL表达式获得存入的值。
    代码9.2 使用 存取值:coredemo02.jsp
    1 <%@ page language="java" pageEncoding="gbk"%>
    2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    3
    4
    5 set标签的使用
    6
    7
    8
    java

  • 把一个值放入session中。
    9
  • 从session中获得值:${sessionScope.name1 }
    10
  • 把另外一个值放入application中。 olive
    11
  • 使用out标签和EL表达式嵌套获得值:
    12 未获得name的值

  • 13
  • 未指定scope的范围,会从不一样的范围内查找获得相应的值:${name1 }、${name2 }
    14
    15
    【代码解析】:
    (1)第8行经过 标签将值name1的值放入session范围中。
    (2)第9行使用EL表达式获得name1的值。
    (3)第10行把name2放入application范围中。
    (4)第11行使用EL表达式从application范围中取值,用 标签输出使得页面规范化。
    (5)第13行不指定范围使用EL自动查找获得值。
    程序运行的结果如图9.2所示。

    图9.2 coredemo02.jsp
    在代码中未使用任何Java脚本使用程序的功能。为了对比期间,代码9.3给出了使用Java脚本实现以上功能的例子。
    代码9.3 Java脚本实现值的存取:getvalue.jsp
    1 <%@page language="java" pageEncoding="gbk"%>
    2
    3
    4 set标签的使用
    5
    6
    7 git

  • 把一个值放入session中。<%session.setAttribute("name1","coo"); %>

  • 8
  • 从session中获得值:<% out.println(session.getAttribute("name1")); %>

  • 9
  • 把另外一个值放入application中。<% application.setAttribute("name2","olive"); %>

  • 10
  • 从application中获得值:<% out.println(application.getAttribute("name2")); %>

  • 11
    12
    【代码解析】:使用JSP内置对象的方法实现存值和取值的功能。
    程序运行结果如图9.3所示:

    图9.3 getvalue.jsp运行结果
    提示:本章示例为了方便期间都是从一个页面中存取,在开发中值的存取是为了避免同的JSP页面之间共享数据
    从两个程序对比来看,JSTL实习了使用标签完成取值赋值的功能,减小代码的编写量同时避免了逻辑代码暴露的危险。
    【程序示例】:代码9.4和代码9.5演示使用 操纵JavaBean。
    (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 set标签的使用
    7
    8
    9 maverick
    10 25
    11
    12 china
    13
    web

  • 使用的目标对象为:${person }
    14
  • 从Bean中得到的name值为:
    15
  • 从Bean中得到的age值为:
    16
  • 从Bean中得到的sex值为:
    17
  • 从Bean中得到的home值为:
    18
    19
    【代码解析】:
    (1)第1行设置页面格式和字符编码集。
    (2)第2行使用JSP的指令元素指定要使用的JavaBean。
    (3)第3行引入JSTL核心标签库。
    (4)第9~12行设置JavaBean的属性值,等同与setter方法。
    (5)使用EL表达式获得JavaBean的属性值,并用out标签输出。
    【关键代码】:

    负责实例化Bean,id指定实例化后的对象名,能够经过${person}获得person在内存中的值(或者使用person.toString()方法)。
    maverick
    Target指向实例化后的对象,property指向要插入值的参数名。
    注意:使用target时必定要指向实例化后的JavaBean对象,也就是要跟 配套使用,也能够java脚本实例化,但这就失去了是用标签的本质意义。
    使用Java脚本实例化:
    <%@page import=”org.olive.Person”%
    <% Person person=new Person(); %>
    程序运行结果如图9.4所示。

    图9.4 coredemo03.jsp运行结果
    3. 标签
    标签主要用来从指定的JSP范围内移除指定的变量。
    【语法】:
    <c:remove var=”变量名” [scope=”page|request|session|application”]/>
    其中var属性是必须的,scope能够以省略。
    【示例程序】:代码9.6使用set标签在session中插入2个值,而后用remove标签移除。
    代码9.6 标签示例:coredemo04.jsp
    1 <%@ page language="java" pageEncoding="gbk"%>
    2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    3
    4
    5 remove标签的使用
    6
    7
    8
    sql

  • olive
    9
  • 25
    10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18
    19
    【代码解析】:
    (1)第8~9行使用set标签向session中插入三个值:name值为olive、age值为2五、sex值为男。
    (2)第11~13行使用out和EL表达式输出name、age、sex的值。
    (3)第14行使用remove标签移除age的值,而后使用步骤第11~13行中的三个输出做为比较。
    4. 标签
    用来处理JSP页面中产生的异常,并将异常信息存储。
    【语法】:

    容易产生异常的代码

    【参数说明】:
    var表示由用户定义存取异常信息的变量的名称。省略后也能够实现异常的捕获,当就不能显示的输出异常信息。
    【示例代码】:代码9.7使用 标签,并设计一个异常并输出异常信息。
    代码9.7 标签使用示例:coredemo05.jsp
    1 <%@ page language="java" pageEncoding="gbk"%>
    2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    3
    4
    5 JSTL: -- catch标签实例
    6
    7
    8

    catch标签实例


    9

    10
    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】:
    <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 标签使用示例:coredemo06.jsp
    1 <%@ page language="java" pageEncoding="gbk"%>
    2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    3
    4
    5 JSTL: -- if标签示例
    6
    7
    8
    数组

    if标签示例


    9

    10

    11
    12
    13

    14
    15
    16

    17

    18 ${adminchock}
    19
    20
    【代码解析】:
    (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.jsp
    1 <%@ page language="java" pageEncoding="gbk"%>
    2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    3
    4
    5 JSTL: -- choose及其嵌套标签标签示例
    6
    7
    8
    浏览器

    choose及其嵌套标签示例


    9

    10 85
    11
    12
    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 循环标签属性说明
    tomcat

    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 标签使用示例:coredemo08.jsp
    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 JSTL: -- forEach标签实例
    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的值为一、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 标签的示例:coredemo09.jsp
    1 <%@ page contentType="text/html;charset=GBK" %>
    2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    3
    4
    5 JSTL: -- forTokens标签实例
    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应用中的文件,甚至是网络上的资源。
    <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 标签示例:coredemo10.jsp
    1 <%@ page contentType="text/html;charset=GBK" %>
    2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    3
    4
    5 JSTL: -- import标签实例
    6
    7
    8


    9

    10


    11
    12
    13

    14
    15

    16


    17


    18
    19
    20

    21

    22


    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】:
    <c:redirect url=”url” [context=”context”]>
    【语法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" %>

    olive
    01234

    【代码解析】
    (1)使用重定向与载入页面不一样,载入页面时在本页面中插入其余页面,而重定向是请求转发,等于在页面中从新输入了一次url。当重定向到某个页面时浏览器中的地址会发生变化。
    (2)使用重定向时不用使用 语句,当输入页面访问不到时,浏览器会报错,跟程序运行无关。若是使用重定向时页面定义的内容将不会获得显示。
    (3)在重定向时为URL添加了两个参数和参数值:uname=olive和password=01234。
    程序运行结果如图9.12所示。

    图9.12 coredemo11.jsp运行结果
    提示:注意图中的URL地址已经发生转变,同时能够看到传入的参数以参数值。
    3. 标签
    该标签用于动态生成一个String类型的URL,能够同 标签共同使用,也可使用html的 标签实现超连接。
    【语法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 标签示例: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】:
    <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 标签示例: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" %>


    I18N标签库





















































    类型 使用数据 结果 说明
    数字格式化 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}



    【代码说明】:
    (1)从应用角度能够把属性分为三类:数字格式化、货币格式化、百分比格式化。使用type指定类型。
    (2)应用于数字格式化的属性有:partten属性、maxIntegerDigits属性、minIntegerDigits属性、maxFractionDigits属性和minFactionDigits属性。其中partten属性在设定格式化样式时会比较准确如:四舍五入、科学计数法的使用。而使用maIntegerDirgits等属性时,只把设定位数之外的数字舍去。
    (3)货币格式化可使用数字格式化的全部属性。若是有必要建议使用partten属性。currencyCode属性和currencySymbol只用于货币格式化。
    (4)百分比格式化使用到的属性为type属性、partten属性,设定type属性的类型为percent便可。
    (5)使用var属性时,会将格式化后的值存在JSP的某个范围内(一个String类型的字符串包括符号等)。 将再也不输出格式化后的值可使用EL表达式输出。
    (6)通用属性:type属性、partten属性、var属性和scope属性。
    程序运行结果如图9.14所示。

    图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 标签示例:fmtdemo02.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" %>


    I18N标签库






    188.8
  • 格式化前的数据为:
    ${money}
  • 格式化后的数据为:
  • 能够对格式化的后的数据进行运算:

  • 对百分比进行格式化98%为:
    98%

    【代码解析】:
    (1)首先使用 将188.8转换为字符串¥188.8并在page范围内存储一个String类型的变量,变量名为money。
    (2)使用 将¥188.8转化为浮点型的数据188.8并赋值为变量money,
    则变量money转变为一个浮点型的值188.8,对188.8进行加运算。
    (3)直接对一个百分比数98%进行转化。
    程序运行结果如图9.15所示。

    图9.15 fmtdemo02.jsp运行结果
    提示: 属性参数的配置和使用同 标签使用的方式同样。同时,在进行类型转换时若是给出的类型不正确将会出现异常。例如在进行百分比转化时若是没有给type类型或者给出type类型但提供的数据中没有%都会产生异常。所以在实际应用中用 捕获异常。
    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 标签示例:fmtdemo03.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" %>



    I18N标签库


















    【代码解析】:
    (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实现了如下功能:首先,使用了 把一个日期对象格式化成一个日期的字符串,并把该字符串以参数名为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" %>



    I18N标签库








    <%
    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范围内。
    【语法】:
    <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 标签示例: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" %>



    I18N标签库















    【代码解析】:
    (1)使用 标签指定从message.properties文件中读取值。
    (2)使用 标签读取资源文件中key为name的值。 标签放在 标签体内使用。
    (3)使用 标签在page范围绑定一个配置文件,以m为参数名存储。
    (4)使用 标签获得key为password的值,此处指定资源文件的方式为使用 标签的bundle属性来设定。
    (5)输出参数m的值,加深对bundle的理解。
    程序运行结果如图所示。

    图9.20 fmtdemo05.jsp运行效果
    标签中有一个prefix属性,该标签用来指明前缀。例如配置文件内容以下:
    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 标签示例: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" %>



    I18N标签库













    【代码解析】:
    (1)使用 标签把资源文件绑定在标签体内。
    (2)在 标签体内使用 获得键值。
    (3)使用 为资源文件中的动态变量赋值。
    程序运行结果如图9.21所示。

    图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 标签示例: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" %>



    I18N标签库

















    【代码解析】:
    (1)浏览器默认跟您使用的操做系统的语言相同,所以默认值zh_cn。使用 标签设置使用的语言为en_us(英语)。使用 格式化输出的时间字符串,该标签会根据不一样的语言输出不一样的日期格式。
    (2)使用的语言修改成zh_cn,再次用格式化输出。
    (3)使用语言修改成zh_TW,输出格式化后的时间。
    程序运行结果如图所示。

    图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提供了 这5个标签,经过使用SQL语言操做数据库,实现增长、删除、修改等操做。下面将介绍这5个标签的功能和使用方式。
    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
    使用 必须指定数据源,dataSource是可选的,若是未给定该属性标签会在page范围内查找是否设置过数据源,若是没有找到将抛出异常。
    通常状况下使用 标签设置一个数据源存储在session范围中,当须要数据库链接时使用dataSource属性并实现数据库的操做。
    的var属性是必须的用来存放结果集,若是没有指定scope范围则默认为page,即在当前页面咱们能够随时输出查询结果。结果集有一系列的属性如表9-17所示。
    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"%>


    JSTL: SQL标签


    SQL标签库






    结果集的实质是:${result}

    获得的行数为:${result.rowCount}

    是否收到了maxRows的限制:${result.limitedByMaxRows}


















    【代码解析】:
    (1)配置数据源。使用 标签配置数据源,由于只共本页使用所以存储在默认的page范围中。
    (2)使用 标签进行数据库查询,并定义了maxRows和startRow属性。并把结果集存储于做用于page范围的result变量。使用${result}输出能够发现结果集就是一个ResultImpl类。
    提示:在进行数据源配置时程序不会检查数据库链接是否配置正确,直接根据设定的数据库及链接访问,若是没有找到则抛出操做的表异常,所以要放如 同时在编写程序时必定要注意数据源是否配置正确。
    (3)使用结果集的rowCount属性获得记录的总量。代码为:
    ${result.rowCount}
    (4)使用结果集的limitedMaxRows属性判断是否收到maxRows设定的影响。代码为:
    ${result.limitedMaxRows}
    (5)从结果集中获得数据库中定义的全部的字段。${result.columnnames}获得的结果是一个字符串数组,所以须要使用 循环输出。代码以下:



    (6)从结果集中获得全部的值。首先要遍历每一行,而后遍历每一行中的元素,所以须要循环嵌套。代码以下:








    提示:在代码解析中省略了html元素表格等标签的元素,本示例适用于任何数据库表,只要把数据库的URL、使用的JDBC进行相应的配置和操做的数据表名进行相应的修改便可看到结果。
    程序运行结果如图9.23所示。

    图9.23 查询操做结果图
    2. 标签
    用来实现操做数据库如:使用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语句

    【参数说明】:见表9-18。
    表9-18 标签属性说明

    查询数据的SQL语句

    String

    dataSource

    数据源对象

    String
    Javax.sql.DataSoutce

    指定存储查询结果的变量名

    String

    scope

    指定结果的做用域

    String
    提示: 标签的属性同 标签的属性相比只减小了maxRows和startRow2个属性。其余参数用法同样。
    使用 能够实现数据表的建立、插入数据、更行数据、删除数据。使用时只须在标签中放入正确的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"%>


    JSTL: SQL标签


    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语句发生异常时,取消 标签体中的全部操做,恢复原来的状态,从新对数据库进行操做。
    【语法】:
    <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. 标签
    标签用来解析指定的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

    【参数说明】:见表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文件的解析。


    语句用来导入或存储文件到JSP。若是不使用var来存储,xml文件将显式的出如今JSP文件中。
    标签只用来解析xml文件,并不显示xml文件中的内容,若是想获得xml的节点元素或值须要使用 元素来实现。
    2. 标签
    标签主要用来输出xml的信息。
    【语法】:

    【参数说明】:见表9-21。
    表9-21 标签属性说明

    select

    指定使用的XPath语句

    String

    escapeXml

    是否转换特殊字符。如<等

    boolean
    提示:使用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】:含有本体内容。
    <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 的文件转换
    能轻易使用XSLT样式包装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】:
    【语法2】: <x:param name=”name” value=”value” Value 【参数说明】: (1)name指定参数的名称。 (2)value指定参数值。

  • 相关文章
    相关标签/搜索