《JSP程序设计》教学课件.ppt

上传人:本田雅阁 文档编号:2152664 上传时间:2019-02-23 格式:PPT 页数:68 大小:9.17MB
返回 下载 相关 举报
《JSP程序设计》教学课件.ppt_第1页
第1页 / 共68页
《JSP程序设计》教学课件.ppt_第2页
第2页 / 共68页
《JSP程序设计》教学课件.ppt_第3页
第3页 / 共68页
亲,该文档总共68页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《《JSP程序设计》教学课件.ppt》由会员分享,可在线阅读,更多相关《《JSP程序设计》教学课件.ppt(68页珍藏版)》请在三一文库上搜索。

1、第4章 JDBC简介,数据库是数据管理最重要的途径之一,也是Web应用最重要的数据源。在早期,对数据库的访问都是使用数据库厂商提供的专用API(application programming interface,应用程序编程接口)进行的。Java语言发布后,为了支持数据库的访问操作,Sun公司于1996年推出了JDBC(Java database connectivity,Java数据库连接)。JDBC定义了一套访问关系数据库的标准Java类库。通过JDBC API,用户可以方便地操作关系数据库。此外,JDBC还为数据库厂商提供了一个标准的体系架构,厂商能够针对数据库产品提供特定的JDBC驱动

2、程序,从而提高了Java访问数据库的效率。 本章逐一介绍了JDBC API主要的接口功能和使用方式,并给出了相应的示例程序。最后利用JDBC API实现了一个简单的学生管理系统,其中包括学生信息的增加、查看、修改和删除等功能。,4.1SQL语言与JDBC,SQL(structured query language,结构化查询语言)语言是于1974年由Boyce和Chamberlin提出,并在1979年由IBM公司在其研制的关系型数据库System R中实现的。由于SQL语言功能丰富、语法简洁,因此深受用户的喜爱。1986年10月,美国国家标准局批准SQL语言作为关系型数据库的标准语言。SQL语

3、言是一种介于关系代数和关系演算之间的结构化查询语言,但SQL语言不仅仅局限于查询,它是一个通用的、功能强大的关系型数据库语言。 在基于Java的应用程序开发过程中,为了降低程序开发的复杂度,提高程序开发效率,通常使用JDBC和SQL相互配合,共同完成访问关系型数据库的工作。JDBC负责将SQL语句传递给数据库,然后从数据库中获取返回结果,并组装为结果集返回给客户,其运行方式如下图所示。,4.2JDBC API,JDBC API是Java平台提供的一个标准的数据库访问接口集,是支持数据库操作的类与方法的集合,利用它开发人员在编写应用程序时不必考虑所用的数据库。JDBC API 包括java.sq

4、l和javax.sql两个包。java.sql包包含了JDBC的核心API;而javax.sql包则包含了JDBC标准的扩展API。JDBC API 提供了以下基本功能: (1)建立与数据源的连接。 (2)向数据源发送查询和更新语句。 (3)处理从数据源得到的结果。 实现上述功能的JDBC API 的核心类和接口均定义在java.sql包中。熟练掌握这些类和接口的使用方法,是JDBC程序设计的基础,也是构建更复杂、更高级的应用程序的必要条件。,4.2.1管理驱动程序类DriverManager,DriverManager类是JDBC的管理层,作用于用户和数据库驱动程序之间。它跟踪可用的驱动程序

5、,并在数据库和相应驱动程序之间建立连接。另外,DriverManager类也处理诸如驱动程序登录时间限制,以及登录和跟踪消息的显示等事务。DriverManager类中常用的方法如下表所示。,4.2.2数据库连接类Connection,Connection对象代表与数据源进行的唯一对话。Connection类提供了进行事务处理、创建执行SQL语句和创建存储过程所用对象的方法。同时,Connection类还提供了一些基本的错误处理方法。Connection类的实例可以通过DriverManager.getConnection()或DataSoure.getConnection()方法创建。jav

6、a.sql.Connection类提供的常用方法如下表所示。,4.2.3SQL声明类Statement,Statement类用于将SQL语句发送到数据库中。实际上有三种Statement类:Statement、PreparedStatement和CallableStatement,它们都专用于发送特定类型的SQL语句。其中,Statement用于执行不带参数的简单SQL语句。Statement对象用Connection的createStatement方法创建,具体格式如下: Statement stmt=conn.createStatement();,4.2.4PreparedStatemen

7、t类,由上一节可知,Statement类使用SQL语句直接处理查询。在执行过程中,Statement类把SQL语句提交给数据库,数据库分析执行SQL语句,然后将执行结果返回给用户。值得注意的是,使用Statement类,即使重复执行同一查询,SQL语句也要由数据库再次格式化;尤其是当SQL语句中包含where子句时,每一次查询都需要数据库解析、优化,然后才能返回执行结果。 因此,使用Statement类将会在很大程度上影响重复数据查询的执行效率。 为了提高查询效率,对于同一个查询语句,JDBC API提供了PreparedStatement类来优化这一过程。PreparedStatement是

8、Statement的扩展,代表了一条预设SQL语句。预设语句是指预先将SQL语句传送给数据库,并在数据库中被编译、优化并缓存。也就是说,使用PreparedStatement类,SQL语句不需要在每次执行时都由数据库重新编译和优化,而仅需编译和优化一次,这就提高了执行查询的效率和性能。 另外,已编译的SQL语句可以指定输入参数,用于定制特殊SQL语句的执行效果。输入参数可以是select或者update语句中的where子句中的值,也可以是insert语句中的values子句中的值。使用预设语句时,PreparedStatement将SQL语句及其参数提交给数据库,由数据库对这些语句进行预处理

9、。,4.2.5查询结果类ResultSet,一旦建立了数据库连接并执行了SQL语句,就可以从Statement实例中获取一个以ResultSet表示的结果集。ResultSet类封装了执行SQL查询所得到的数据行或元组。ResultSet类提供了一系列的方法,用于在返回的结果集中自由移动指针,以加强应用程序的灵活性并提高访问数据的效率,这些方法如下表所示。,4.2.2 文本的编辑,4.2.6数据库操作异常类SQLException,基本上所有JDBC API的方法都会抛出SQLException异常。这个异常类继承了java.lang.Exception接口,并通过重写的getMessage(

10、)方法获取产生异常的原因和所生成异常的相关信息。 SQLException类的构造方法包含了一个字符串,这是数据库服务器或JDBC驱动程序根据SQL状态给出的异常产生原因。SQL状态是一个标准化的字符串,包含了产生异常的SQL处理状态,以及与数据库厂商相关的错误码(一个整数)。SQLException类提供的构造方法如下: (1)SQLException():创建一个新的SQLException,将产生异常的原因、SQL处理状态以及厂商错误码的值设为NULL。 (2)SQLException(String reason):创建一个新的SQLException,设置产生异常的原因,并将SQL处理

11、状态以及厂商错误码的值都设为NULL。 (3)SQLException(String reason, String SQLState):创建一个新的SQLException,设置产生异常的原因和SQL处理状态,并将厂商错误码的值都设为NULL。 (4)SQLException(String reason, String SQLState,int vendorCode):创建一个新的SQLException,并设置产生异常的原因、SQL处理状态以及厂商错误码的值。,此外,SQLException类提供了如下方法,以实现被抛出异常的内部数据的访问: (1)int getErrorCode():返回

12、异常的厂商错误码。 (2)SQLException getNextException():如果还有异常,则检索异常链中的下一个异常。 (3)String setNextException(SQLException e):设置当前对象的异常链中的下一个异常。 注意:由于大部分JDBC方法都会抛出SQLException异常,因此,在应用程序中,必须捕捉异常对象,并进行适当的处理,然后把错误码返回给调用者。此外,在程序运行结束时,必须使用finally语句块关闭Connection对象,而不管是否产生了SQLException异常。,4.3JDBC驱动程序的类型,通常,当数据库厂商推出自己的数据库

13、产品时,都会提供一套访问数据库的API,这些API能以各种编程语言的形式提供,客户端程序通过调用这些专有的API来访问数据库。各个厂商提供的数据库访问API不尽相同,导致构建在某一个特定数据库上的应用程序不能移植到另一个数据库上。JDBC以Java类库的形式取代数据库厂商的专有API,客户端只需要调用JDBC API,而处理与数据库通信的具体操作由JDBC的实现层(即JDBC驱动程序)完成,从而降低了应用程序与数据库之间的耦合度。,JDBC驱动程序分为以下四类: (1)JDBC-ODBC桥。 (2)Java到本地API。 (3)JDBC网络纯Java驱动程序。 (4)本地协议纯Java驱动程序

14、。,4.3.1JDBC-ODBC桥连接,因为Microsoft推出的ODBC比JDBC出现的时间要早,所以绝大多数的数据库都可以通过ODBC来访问,当Sun公司推出JDBC的时候,为了支持更多的数据库,特意提供了JDBCODBC桥。JDBCODBC桥本身也是一个驱动,利用这个驱动,用户可以使用JDBC API通过ODBC去访问数据库。这种桥机制实际上是把标准的JDBC调用转换成相应的ODBC调用,并通过ODBC把数据库调用发送给ODBC数据源,其原理如下图所示。,由图可以看出,通过JDBC-ODBC桥的方式访问数据库需要经过多层的调用,因此,利用JDBC-ODBC桥访问数据库的效率比较低。然而

15、,当数据库没有提供JDBC驱动,只有ODBC驱动的情况下,也只能利用JDBC-ODBC桥的方式访问数据库,例如,在访问Access数据库时,就只能使用JDBC-ODBC桥来访问。,4.3.2Java到本地API,大部分数据库厂商都提供与他们的数据库产品进行通信所需要的调用API,这些API往往用C语言或类似的语言编写,依赖于具体的平台。此类型的JDBC驱动程序使用Java语言编写,并能够调用数据库厂商提供的本地API。此时,利用JDBC API访问数据库时,JDBC驱动程序将数据库调用请求转换为厂商提供的本地API调用,数据库处理请求,然后将处理结果通过这些API返回,进而返回给JDBC驱动程

16、序,最后,JDBC驱动程序将结果转化为JDBC标准形式,再返回给客户程序。其原理如下图所示。,从图中可以看到,通过这种类型的JDBC驱动程序访问数据库时,减少了ODBC的调用环节,提高了数据库访问的效率,并且能够充分利用厂商提供的本地API功能。但是,在这种访问方式下,需要在客户的机器上安装本地JDBC驱动程序和特定厂商的本地API。,4.3.3JDBC网络纯Java驱动程序,这种驱动利用作为中间件的应用服务器来访问数据库。应用服务器作为一个或多个数据库的网关,客户端通过它可以连接到不同的数据库服务器。应用服务器通常都有自己的网络协议,Java程序通过JDBC驱动程序将JDBC调用发送给应用服

17、务器,应用服务器使用本地驱动程序访问数据库,从而完成请求。其原理如下图所示。,使用这类驱动程序的优点是可以直接通过JDBC访问网络数据库,不需要安装驱动程序,程序与平台无关,不仅可以用在一个第三方的解决方案中,而且可以在Internet上使用。,4.3.4本地协议纯Java驱动程序,这种类型的JDBC驱动程序完全用Java语言编写,通过与数据库直接连接的套接字进行通信,它采用厂商相关的网络协议把JDBC API调用转换为直接的网络调用(如Oracle thin JDBC driver)。其原理如下图所示。,这种类型的驱动是四种类型驱动中访问数据库效率最高的,不过,由于每个数据库厂商(Oracl

18、e, Microsoft, Sybase等)都为自己的数据库产品提供了这种类型的驱动,因此,访问不同的数据库时,需要使用不同的JDBC驱动程序。在本章第4节中,将使用此类型的驱动程序操作数据库。,本 章 小 结,本章主要学习了关系型数据库中SQL语言的基本功能和使用方式,以及JDBC API的核心接口和常用方法。在此基础上,用JSP和数据访问对象实现了一个较为完整的数据显示Web应用程序。其中,SQL语言是操作关系数据库的标准语言。尽管SQL语言结构简单,但功能非常强大,可以完成数据库整个生命周期的管理和数据访问操作。JDBC提供了Java程序访问关系数据库的方法。在JDBC中,定义了一系列的

19、接口,如Connection接口、Statement接口和ResultSet接口等,通过这些接口,用户可以方便地与数据库交互,构建更复杂、更高级、更易用的应用程序。,第5章 JavaBean技术,此前介绍的JSP页面中混合了HTML代码和Java代码,页面的显示逻辑和业务逻辑混杂在一起,代码的可读性差,维护难度高。为了分离页面中的HTML代码和Java代码,一个很自然的想法就是单独编写一个类来封装页面的业务逻辑。在页面中,只需简单地编写几句调用类中方法的代码,即可完成所需的功能。这种方式,不但提高了代码的复用率(多个页面可调用同一个类的方法),而且将页面的显示逻辑和业务逻辑也区分开了。在JSP

20、技术中,负责完成业务逻辑的类可用JavaBean组件来实现。,5.1JavaBean概述,JavaBean是描述Java的组件模型,类似于Microsoft的COM组件概念。在Java模型中,通过JavaBean可以扩充Java的程序功能,通过JavaBean的组合还可以快速生成新的应用程序。对于程序员来说,使用JavaBean可以实现代码的重复利用,使得程序更易维护。 JavaBean就是一个特殊的Java类,这个类必须符合JavaBean的规范。JavaBean原来是为了能够在一个集成开发环境中可视化、模块化地利用组件技术开发应用程序而设计的。虽然在JSP中不需要使用任何可视化的功能,但仍

21、然需要利用JavaBean的属性、事件、持久化和用户化来实现模块化的功能。,5.1.1JavaBean特性,下面介绍在JSP开发中经常用到的JavaBean规范的一部分,主要有属性特点、构造方法等。 1.构造方法 标准的JavaBean中一定要有一个不需要任何参数的构造函数,这个构造函数在使用实例化JavaBean类时调用。如果JavaBean类中没有任何构造函数,系统会自动生成一个没有参数的构造函数。 2.属性 JavaBean中的属性都应该定义为私有的,这样这些属性就只能通过JavaBean内的方法访问或修改,从而较好地保护数据的完整性和封装性,也可以对数据加以约束。,5.1.2属性的类型

22、,JavaBean有简单(Simple)属性、索引(Index)属性、绑定(Bound)属性和约定(Constrained)属性四种类型的属性。 1.简单属性 简单属性表示伴随有一对get/set方法的变量。属性名和该属性相关的get/set方法名对应。 2.索引属性 索引属性表示一个数组值。使用该属性对应的set/get方法可获取数组中的数值,该属性也可一次设置或取得整个数组的值。,5.2使用JavaBean访问数据库,本节通过讲解如何利用JavaBean连接并显示数据库表中的记录。在第4章已讲过连接SQL Server数据库的方法,现以SQL Server为例,将连接封装在JavaBean

23、中,通过Bean来连接数据库,并访问数据库中的表。,5.2.1设计访问数据库的JavaBean,首先编写连接数据库的JavaBean程序conn.java,数据库名为JspDataBase,用户名与密码已知,数据库JSP中已存在数据表student,主要存放关于学生学号、姓名和成绩的信息。 在conn.java程序中,首先加载SQL Server驱动,语句如下: Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver“); 然后使用DriverManager对象的getConnection(dbURL,dbUser,dbPassw

24、ord)方法建立连接,其中指定参数dbURL为“jdbc:microsoft:sqlserver:/localhost;DatabaseName=JSP;SelectMethod=Cursor”,然后创建SQL语句对象。关于数据库连接程序第4章已有介绍,这里不再详述。,5.2.2在JSP中调用JavaBean访问数据库,下面介绍一个具体实例来演示如何在JSP中调用访问数据库的JavaBean。 实例详见教材117页。,5.3综 合 案 例,JavaBean具体的实施部署步骤如下:首先建立Web项目,将编好的JavaBean代码放入项目文件夹中的WEB-INFclasses文件夹下(注意需要为J

25、avaBean指定一个包名),然后就可在项目中的JSP文件中调用JavaBean了。以下是两个具体的实例。,5.3.1用户注册的JavaBean,本节中,将通过一个简单的例子演示如何在JSP页面中访问JavaBean。 首先提供一个注册表单,让用户输入相关的信息,在用户提交表单后,将用户的注册信息保存到JavaBean对象中,然后在另一个页面通过读取JavaBean的属性来获得用户的注册信息。,5.3.2动态日历,本节主要讲解如何使用JavaBean实现一个能根据年、月进行查找的日历程序。 本例具体步骤详见教材126页。,本 章 小 结,本章主要介绍了JavaBean的基本知识。利用JavaB

26、ean组件来封装业务逻辑,可以避免在HTML中嵌入大量的Java代码,使得页面的显示和业务逻辑分离,提高了代码的可维护性。通过JavaBean实现数据库连接及事物处理过程,可有效地将静态、动态工作分离开来,减少代码量,增强代码可读性并能极大地提高效率。,第6章 JSP与XML,随着Web的广泛运用,HTML的局限性逐渐显露出来。HTML缺乏扩展性,标记定义比较模糊,因此可能导致错误的蔓延。人们在开发Web应用时需要一种标准化的、具备高可扩展性并且结构严谨的新语言,由此诞生了XML。XML是W3C推出的一种标记语言,它组合了其前身语言SGML的强大功能和可扩展性,以及Web应用的简洁性。目前,X

27、ML已经成为计算机行业内最热门的技术,它获得了广泛的行业支持,并且由于不断加强XML标准,从而使XML可以跨越所有边界,实现真正独立、跨平台的数据传送格式。,6.1XML语法规则,XML的全称是extensible markup language,意思是可扩展的标记语言,它是标准通用语言(standard generalized markup language,SGML)的一个子集。 XML的语法规则既简单又严格,非常容易学习和使用。正因为如此,编写读取和操作XML文档的软件也是相对容易的事情。 首先来看一个XML文档(CH6-1.xml)的例子。XML文档使用了自描述和简单的语法。 古乐声

28、国防科技大学 计算机 ,代码的第1行是XML声明,并且定义XML的版本,目前发布的是1.0版本,使用gb2312字符集;代码的第2行是这段代码内容的根元素,类似文章的标题,是XML文档所必须声明的元素;代码的第35行是根元素的子元素,在这里有3个子元素(作者、出版社、题材);最后一行的代码则定义了根元素的结束,至此一段完整的XML代码就算完成了。从上面的例子可以看出,所有的元素都要有闭合标记,这并非是一个巧合,而是XML语法规则定义的。,1.元素必须有闭合标记 2.XML标记都是大小写敏感的 3.在XML中必须正确嵌套 4.所有XML文档必须有且只能有一个根元素 5.XML文档元素的属性值必须

29、使用引号 6.XML文档中的空白将被保留,6.2XML文档结构,一个XML文档从逻辑上可以分为五个部分: XML声明、文档类型声明、元素、注释、处理指令。,6.2.1XML声明,XML数据文件的定义不像HTML那样自由,它是非常严格的。XML文档总是从一个XML声明开始,在其中指明所有的XML版本和文档编码等信息。下面是一个完整的XML声明: XML文件的声明必须存在而且放在第一行,否则解析器不予解析。声明的作用是告诉浏览器或者其他处理程序这个文档是XML文档。声明语句中的“version”表示文档遵守的XML规范的版本,它必须在属性列表中第一个出现;“standalone”表示文档是否是独立

30、的,如果不带附带DTD(Document Type Definition,文档类型定义)文件,则将该参数设置为yes,如果附带有DTD文档,则将该参数设置no;“encoding”表示文档所用的语言编码,默认是UTF-8。,6.2.2文档类型声明,在一个XML文档中,用户可以任意定制标签,但是当将XML文档提交给其他人使用时,那么文档一定要有相应的DTD文件,并且要严格遵守DTD文件制定的规范。 XML从SGML继承了用于定义语法规则的DTD机制,几乎所有的XML应用都是用DTD来定义的。HTML文件就是一个严格遵守DTD机制的文件,所以其组织结构和所有的标签都是固定的。DTD文件也是一个文本

31、文档,通常用“.dtd”作为其扩展名。 通过文档类型声明,指出XML文档所使用的DTD,DTD文件的声明语句紧跟在XML声明语句后面。文档类型声明有两种形式,一种是在一个外部的文件中声明DTD。格式如下: ,6.2.3元素,元素是XML文档的基本单元,基本XML文档必须包含一个或多个元素。一个XML文档必须包含根元素,并且只能包含一个根元素。 一个元素的起始标签和结束标签的名字必须相匹配,并且标签名是大小写敏感的。所有以起始标签开始的元素都必须以与起始标签同名的结束标签作为结束,在起始和结束标签中间的文本是元素的内容,无内容的元素可以使用一种特殊的形式,即。这里,“”之前的斜线实际上代替了结束

32、标签。 元素名可以由字母、数字、连字符号、下划线、冒号以及句号组成。冒号用于划分命名空间。 元素可以没有或者有一个或多个属性,属性名的命名规则同元素命名规则相同。其名字和值由“=”分隔,并且属性值必须在单引号或者双引号之间,如果要在属性值里面使用单引号或双引号,那么就必须使用反斜线来进行转义。,元素和属性的格式如下: 元素的数据 XML元素的内容可以包含子元素、字符数据、字符引用和预定义实体引用、CDATA段。,1.子元素 子元素本身也是元素,被嵌套在上层元素之内。子元素是相对于父元素而言的,如果子元素还嵌套了其他元素,那么它同时也是父元素。 2.字符数据 在一个元素中,字符数据可以是不包括任

33、何标记的起始定界符和CDATA段的结束定界符在内的任意字符串,就是说在元素的内容中,字符数据不能有和号(&)和小于号(”。在CDATA段中,字符数据可以是不包括CDATA段的结束定界符在内的任意字符串。,3.字符引用和预定义实体引用 在字符数据中,不能有和号()结束的。如果用的是字符引用,需要在和号(&)之后加上井号(),之后是所需字符的十进制代码或十六进制代码。如果用的是预定义实体引用,在和号(&)之后写上字符的助记符。,4.CDATA段 CDATA段中包含的都是纯字符数据,在字符数据可以出现的任何地方都可以使用CDATA段。CDATA段主要用于需要将整个文本解释为字符数据而不是标记的情况下

34、。CDATA段中的内容不被XML处理器分析,所以可以在其中包含任意的字符。例如,在XML文档中含有Java代码,而Java代码可能存在着小于号()、双引号(“)、单引号()、和号(&)这些特殊字符,这个时候,CDATA段就派上用场了。 CDATA段以“”标记结束。,6.2.4注释,在XML文档中,注释可以出现在文档中其他标记之外的任何位置,另外,它们还可以在文档类型声明中语法允许的地方出现。XML的注释和HTML的注释类似,都是以“”结束。 注意:注释文本中不能出现字符“-”和字符串“-”,且注释不能被嵌套。,6.2.5处理指令,处理指令(processing instruction,PI)允

35、许文档中包含由应用程序来处理的指令。在XML文档中,有可能会包含一些非XML格式的数据,这些数据XML处理器无法处理,此时就可以通过处理指令来通知其他应用程序来处理这些数据。 处理指令的语法和XML声明类似,以“”标记结束。例如,一个常见的使用样式表单的处理指令如下所示: ,6.2.4 幻灯片的编辑,开始标记“?”后的第一个字符串“xml-stylesheet”是处理指令的目标,它是必须要用到的应用程序,要注意的是,对于其他的非W3C定义的处理指令不能以字符串“XML”或“xml”开头。其余的部分是传递给应用程序的字符数据。应用程序从处理指令中取得目标和数据,执行要求的动作。 处理指令的目标可

36、以是要使用的程序的名字,或者是一个类似于xmlstylesheet这样的通用标识符。不同的应用程序支持不同的处理指令,对于不认识的处理指令,大多数应用程序采取忽略的方式进行处理。 xml-stylesheet处理指令总是放在XML声明之后,第一个元素之前,其他的处理指令可以放在除标记的内部和XML声明之前的任何位置。,6.3JSP和XML的综合应用,JSP和XML是J2EE的两个至关重要的组件。作为建立在Java Servlet之上的表达层技术,JSP技术允许将HTML标记和服务器端脚本混合起来生成动态网页,从而使得动态网页的生成更加简单。同时,作为一种开发工具,XML简化了数据交换,因此受到

37、开发人员喜爱并越来越流行。这使得在J2EE架构中利用JSP访问XML或集成XML成为一种趋势。 在应用程序中,经常需要对XML文档进行分析,以检索、修改、删除或重新组织其中的内容。例如,将应用程序运行所需要的一些配置信息以XML文件格式进行保存,在程序启动时,读取XML文件,从中取出有用的信息,这就需要对XML文档进行解析。,在解析XML文档时,通常是利用现有的XML解析器对XML文档进行分析,而编写的应用程序则通过解析器提供的API接口得到XML数据。整个过程如下图所示。,6.3.1使用DOM解析XML,DOM是document object model的缩写,即文档对象模型,它是W3C组织

38、推荐的处理XML的标准接口。有关DOM技术报告可以在http:/www.w3.org/DOM/上查看。 DOM是独立于程序设计语言的,W3C组织以IDL(interface definition language,接口定义语言)的形式定义了DOM中的接口。某种程序语言要实现DOM,需要将DOM接口转换为本语言中的适当结构,为了保证不同语言的不同的DOM之间可以实现广泛的兼容,W3C组织在DOM规范的附录部分提供了Java和ECMAScript这两种语言绑定。,DOM中的核心概念是结点。DOM在分析XML文档时,将组成XML文档的各个部分(元素、属性、文本、注释和处理指令等)映射为一个对象,这个

39、对象就叫做结点(Node)。在内存中,这些结点形成一棵文档树。整棵树是一个结点,树中的每一个结点也是一棵树(子树),可以说,DOM就是对这棵树的一个对象描述,通过访问树中的结点存取XML文档的内容。 在使用DOM处理XML的时候,需要读入整个XML文档,然后在内存中创建DOM树,生成DOM树上的每个Node对象。当文档比较小的时候,这不会造成什么问题,但是一旦文档很大,处理DOM就会变得相当费时费力。,1.DOM中的Node对象,DOM定义了一个Node对象,表示XML文档中的元素的Element对象和表示元素属性的Attr对象都是从Node对象派生而来。 Node对象是DOM结构中最基本的对

40、象,代表了文档树中的一个结点。然而在实际使用中,很少会真正用到Node对象,而是使用Element、Attr、Text等Node对象的子对象来操作文档。虽然在Node中定义了对其子结点进行存取的方法,但是一些Node对象的子对象,如Text对象(表示元素或属性的文本内容),并不存在子结点。,2.DocumentBuilder类的parse()方法,在java.xml.parsers包中,定义了DOM解析器工厂类DocumentBuilderFactory,用于产生DOM解析器。DocumentBuilderFactory是一个抽象类,在这个类中提供了一个静态的方法newInstance(),用

41、于创建工厂类的一个实例。 在得到工厂类的实例后,可用利用DocumentBuilderFactory类的newDocumentBuilder()方法来创建DOM解析器实例,方法如下所示: DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance(); DocumentBuilder db=dbf.newDocumentBuilder(); DocumentBuilder类也是一个抽象类,当调用DocumentBuilderFactory类的newInstance()方法得到具体工厂类的实例后,再利用这个实例调用newDocume

42、ntBuilder()方法,得到的就是具体厂商的DOM解析器对象了。,3.XML中的结点类型,DOM本质上是结点的集合。由于一个文档中可能包含不同类型的信息,因此要定义不同类型的结点。XML中最常见的结点类型是文档、元素、文本和属性,在DOM API中对应的接口是Document、Element、Text和Attr。 1)文档结点 2)元素结点 3)文本结点 4)属性结点,4.DOM的接口,1)NodeList接口 2)NamedNodeMap接口,5.DOM解析XML文档实例,下面介绍一个使用DOM解析xml文档的实例。在进行解析前,首先需要建立一个Java项目,并引入使用DOM解析所需要的

43、JAR包xerces.jar。 实例具体内容见教材137-139页。,6.3.2使用SAX解析XML,SAX是Simple API for XML的缩写,它属于一种开放标准。SAX与DOM不同,它不属于W3C建议规范。SAX解析器在读取XML文档时即对它进行处理。SAX解析器的核心是事件处理机制,和DOM解析器相比,SAX解析器占用的内存更少。 1.SAX处理机制 2.配置XMLReader接口 3.SAX解析器工厂 4.SAX的异常类 5.ErrorHandler接口 6.SAX解析XML文档实例,本 章 小 结,本章主要介绍了DOM、SAX的API。DOM是W3C组织推荐的处理XML文档的

44、标准接口,而SAX是社区讨论的产物,是一种事实上的标准。DOM在内存中以结点树的形式表示XML文档,由于树在内存中是持久的,因而可以在任何时候对树中的结点进行导航,并可以对其进行修改。DOM的缺点是,对于特别大的文档解析以及加载整个文档会很慢,而且会消耗大量的资源。SAX是一种基于事件驱动的API,其解析器在解析XML文档时可以触发一系列的事件,当发现一个标记时,它可以激活一个回调方法,告诉该方法找到一个标记。SAX解析速度快、对内存的需求低。DOM和SAX没有好坏之分,选择DOM还是SAX取决于应用的目的。如果经常需要提取已经处理过的信息,需要对文档进行修改,那么DOM是一个较好的选择;如果只是提取文档中的少量数据,或者处理的文档比较大,那么SAX是一个更好的选择。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1