




已阅读5页,还剩63页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第 4章 JDBC简介 数据库是数据管理最重要的途径之一,也是 Web应用最重要的数据源。在早期,对数据库的访问都是使用数据库厂商提供的专用API(application programming interface,应用程序编程接口 )进行的。Java语言发布后,为了支持数据库的访问操作, Sun公司于 1996年推出了 JDBC( Java database connectivity, Java数据库连接)。 JDBC定义了一套访问关系数据库的标准 Java类库。通过 JDBC API,用户可以方便地操作关系数据库。此外, JDBC还为数据库厂商提供了一个标准的体系架构,厂商能够针对数据库产品提供特定的 JDBC驱动程序,从而提高了 Java访问数据库的效率。 本章逐一介绍了 JDBC API主要的接口功能和使用方式,并给出了相应的示例程序。最后利用 JDBC API实现了一个简单的学生管理系统,其中包括学生信息的增加、查看、修改和删除等功能。 4.1SQL语言与 JDBC SQL(structured query language,结构化查询语言 )语言是于 1974年由 Boyce和 Chamberlin提出,并在 1979年由 IBM公司在其研制的关系型数据库 System R中实现的。由于 SQL语言功能丰富、语法简洁,因此深受用户的喜爱。 1986年 10月,美国国家标准局批准SQL语言作为关系型数据库的标准语言。 SQL语言是一种介于关系代数和关系演算之间的结构化查询语言,但 SQL语言不仅仅局限于查询,它是一个通用的、功能强大的关系型数据库语言。 在基于 Java的应用程序开发过程中,为了降低程序开发的复杂度,提高程序开发效率,通常使用 JDBC和 SQL相互配合,共同完成访问关系型数据库的工作。 JDBC负责将 SQL语句传递给数据库,然后从数据库中获取返回结果,并组装为结果集返回给客户,其运行方式如 下图 所示。 4.2JDBC API JDBC API是 Java平台提供的一个标准的数据库访问接口集,是支持数据库操作的类与方法的集合,利用它开发人员在编写应用程序时不必考虑所用的数据库。 JDBC API 包括 java.sql和 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的管理层,作用于用户和数据库驱动程序之间。它跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。另外,DriverManager类也处理诸如驱动程序登录时间限制,以及登录和跟踪消息的显示等事务。 DriverManager类中常用的方法如 下表 所示。 4.2.2数据库连接类 Connection Connection对象代表与数据源进行的唯一对话。 Connection类提供了进行事务处理、创建执行 SQL语句和创建存储过程所用对象的方法。同时,Connection类还提供了一些基本的错误处理方法。 Connection类的实例可以通过 DriverManager.getConnection()或 DataSoure.getConnection()方法创建。java.sql.Connection类提供的常用方法如 下表 所示。 4.2.3SQL声明类 Statement Statement类用于将 SQL语句发送到数据库中。实际上有三种 Statement类: Statement、PreparedStatement和 CallableStatement,它们都专用于发送特定类型的 SQL语句。其中,Statement用于执行不带参数的简单 SQL语句。Statement对象用 Connection的createStatement方法创建,具体格式如下: Statement stmt=conn.createStatement(); 4.2.4PreparedStatement类 由上一节可知, Statement类使用 SQL语句直接处理查询。在执行过程中,Statement类把 SQL语句提交给数据库,数据库分析执行 SQL语句,然后将执行结果返回给用户。值得注意的是,使用 Statement类,即使重复执行同一查询, SQL语句也要由数据库再次格式化;尤其是当 SQL语句中包含 where子句时,每一次查询都需要数据库解析、优化,然后才能返回执行结果。 因此,使用 Statement类将会在很大程度上影响重复数据查询的执行效率。 为了提高查询效率,对于同一个查询语句, JDBC API提供了 PreparedStatement类来优化这一过程。 PreparedStatement是 Statement的扩展,代表了一条预设 SQL语句。预设语句是指预先将 SQL语句传送给数据库,并在数据库中被编译、优化并缓存。也就是说,使用 PreparedStatement类, SQL语句不需要在每次执行时都由数据库重新编译和优化,而仅需编译和优化一次,这就提高了执行查询的效率和性能。 另外,已编译的 SQL语句可以指定输入参数,用于定制特殊 SQL语句的执行效果。输入参数可以是 select或者 update语句中的 where子句中的值,也可以是 insert语句中的 values子句中的值。使用预设语句时, PreparedStatement将 SQL语句及其参数提交给数据库,由数据库对这些语句进行预处理。 4.2.5查询结果类 ResultSet 一旦建立了数据库连接并执行了 SQL语句,就可以从 Statement实例中获取一个以ResultSet表示的结果集。 ResultSet类封装了执行 SQL查询所得到的数据行或元组。ResultSet类提供了一系列的方法,用于在返回的结果集中自由移动指针,以加强应用程序的灵活性并提高访问数据的效率,这些方法如 下表 所示。 4.2.2 文本的编辑 4.2.6数据库操作异常类SQLException 基本上所有 JDBC API的方法都会抛出 SQLException异常。这个异常类继承了 java.lang.Exception接口,并通过重写的 getMessage()方法获取产生异常的原因和所生成异常的相关信息。 SQLException类的构造方法包含了一个字符串,这是数据库服务器或JDBC驱动程序根据 SQL状态给出的异常产生原因。 SQL状态是一个标准化的字符串,包含了产生异常的 SQL处理状态,以及与数据库厂商相关的错误码 (一个整数 )。 SQLException类提供的构造方法如下: (1)SQLException():创建一个新的 SQLException,将产生异常的原因、SQL处理状态以及厂商错误码的值设为 NULL。 (2)SQLException(String reason):创建一个新的 SQLException,设置产生异常的原因,并将 SQL处理状态以及厂商错误码的值都设为 NULL。 (3)SQLException(String reason, String SQLState):创建一个新的SQLException,设置产生异常的原因和 SQL处理状态,并将厂商错误码的值都设为 NULL。 (4)SQLException(String reason, String SQLState, int vendorCode):创建一个新的 SQLException,并设置产生异常的原因、 SQL处理状态以及厂商错误码的值。 此外, SQLException类提供了如下方法,以实现被抛出异常的内部数据的访问: (1)int getErrorCode():返回异常的厂商错误码。 (2)SQLException getNextException():如果还有异常,则检索异常链中的下一个异常。 (3)String setNextException(SQLException e):设置当前对象的异常链中的下一个异常。 注意:由于大部分 JDBC方法都会抛出 SQLException异常,因此,在应用程序中,必须捕捉异常对象,并进行适当的处理,然后把错误码返回给调用者。此外,在程序运行结束时,必须使用 finally语句块关闭Connection对象,而不管是否产生了 SQLException异常。 4.3JDBC驱动程序的类型 通常 ,当数据库厂商推出自己的数据库产品时,都会提供一套访问数据库的 API,这些 API能以各种编程语言的形式提供,客户端程序通过调用这些专有的 API来访问数据库。各个厂商提供的数据库访问 API不尽相同,导致构建在某一个特定数据库上的应用程序不能移植到另一个数据库上。 JDBC以 Java类库的形式取代数据库厂商的专有 API,客户端只需要调用 JDBC API,而处理与数据库通信的具体操作由 JDBC的实现层(即 JDBC驱动程序)完成,从而降低了应用程序与数据库之间的耦合度。 JDBC驱动程序分为以下四类: (1)JDBC-ODBC桥。 (2)Java到本地 API。 (3)JDBC网络纯 Java驱动程序。 (4)本地协议纯 Java驱动程序。 4.3.1JDBC-ODBC桥连接 因为 Microsoft推出的 ODBC比 JDBC出现的时间要早,所以绝大多数的数据库都可以通过ODBC来访问,当 Sun公司推出 JDBC的时候,为了支持更多的数据库,特意提供了 JDBCODBC桥。 JDBC ODBC桥本身也是一个驱动,利用这个驱动,用户可以使用 JDBC API通过ODBC去访问数据库。这种桥机制实际上是把标准的 JDBC调用转换成相应的 ODBC调用,并通过 ODBC把数据库调用发送给 ODBC数据源,其原理如 下图 所示。 由图可以看出,通过 JDBC-ODBC桥的方式访问数据库需要经过多层的调用,因此,利用 JDBC-ODBC桥访问数据库的效率比较低。然而,当数据库没有提供JDBC驱动,只有 ODBC驱动的情况下,也只能利用 JDBC-ODBC桥的方式访问数据库,例如,在访问 Access数据库时,就只能使用 JDBC-ODBC桥来访问。 4.3.2Java到本地 API 大部分数据库厂商都提供与他们的数据库产品进行通信所需要的调用 API,这些 API往往用 C语言或类似的语言编写,依赖于具体的平台。此类型的 JDBC驱动程序使用 Java语言编写,并能够调用数据库厂商提供的本地 API。此时,利用 JDBC API访问数据库时, JDBC驱动程序将数据库调用请求转换为厂商提供的本地 API调用,数据库处理请求,然后将处理结果通过这些 API返回,进而返回给 JDBC驱动程序,最后, JDBC驱动程序将结果转化为 JDBC标准形式,再返回给客户程序。其原理如 下图 所示。 从图中可以看到,通过这种类型的 JDBC驱动程序访问数据库时,减少了 ODBC的调用环节,提高了数据库访问的效率,并且能够充分利用厂商提供的本地 API功能。但是,在这种访问方式下,需要在客户的机器上安装本地 JDBC驱动程序和特定厂商的本地 API。 4.3.3JDBC网络纯 Java驱动程序 这种驱动利用作为中间件的应用服务器来访问数据库。应用服务器作为一个或多个数据库的网关,客户端通过它可以连接到不同的数据库服务器。应用服务器通常都有自己的网络协议, Java程序通过 JDBC驱动程序将 JDBC调用发送给应用服务器,应用服务器使用本地驱动程序访问数据库,从而完成请求。其原理如 下图 所示。 使用这类驱动程序的优点是可以直接通过 JDBC访问网络数据库,不需要安装驱动程序,程序与平台无关,不仅可以用在一个第三方的解决方案中,而且可以在 Internet上使用。 4.3.4本地协议纯 Java驱动程序 这种类型的 JDBC驱动程序完全用 Java语言编写,通过与数据库直接连接的套接字进行通信,它采用厂商相关的网络协议把 JDBC API调用转换为直接的网络调用(如 Oracle thin JDBC driver)。其原理如 下图 所示。 这种类型的驱动是四种类型驱动中访问数据库效率最高的,不过,由于每个数据库厂商 (Oracle, Microsoft, Sybase等 )都为自己的数据库产品提供了这种类型的驱动,因此,访问不同的数据库时,需要使用不同的 JDBC驱动程序。在本章第 4节中,将使用此类型的驱动程序操作数据库。 本 章 小 结 本章主要学习了关系型数据库中 SQL语言的基本功能和使用方式,以及 JDBC API的核心接口和常用方法。在此基础上,用 JSP和数据访问对象实现了一个较为完整的数据显示 Web应用程序。其中, SQL语言是操作关系数据库的标准语言。尽管 SQL语言结构简单,但功能非常强大,可以完成数据库整个生命周期的管理和数据访问操作。 JDBC提供了 Java程序访问关系数据库的方法。在 JDBC中,定义了一系列的接口,如 Connection接口、 Statement接口和 ResultSet接口等,通过这些接口,用户可以方便地与数据库交互,构建更复杂、更高级、更易用的应用程序。 第 5章 JavaBean技术 此前介绍的 JSP页面中混合了 HTML代码和 Java代码,页面的显示逻辑和业务逻辑混杂在一起,代码的可读性差,维护难度高。为了分离页面中的 HTML代码和 Java代码,一个很自然的想法就是单独编写一个类来封装页面的业务逻辑。在页面中,只需简单地编写几句调用类中方法的代码,即可完成所需的功能。这种方式,不但提高了代码的复用率(多个页面可调用同一个类的方法),而且将页面的显示逻辑和业务逻辑也区分开了。在 JSP技术中,负责完成业务逻辑的类可用 JavaBean组件来实现。 5.1JavaBean概述 JavaBean是描述 Java的组件模型,类似于 Microsoft的COM组件概念。在 Java模型中,通过 JavaBean可以扩充 Java的程序功能,通过 JavaBean的组合还可以快速生成新的应用程序。对于程序员来说,使用 JavaBean可以实现代码的重复利用,使得程序更易维护。 JavaBean就是一个特殊的 Java类,这个类必须符合JavaBean的规范。 JavaBean原来是为了能够在一个集成开发环境中可视化、模块化地利用组件技术开发应用程序而设计的。虽然在 JSP中不需要使用任何可视化的功能,但仍然需要利用 JavaBean的属性、事件、持久化和用户化来实现模块化的功能。 5.1.1JavaBean特性 下面介绍在 JSP开发中经常用到的 JavaBean规范的一部分,主要有属性特点、构造方法等。 1.构造方法 标准的 JavaBean中一定要有一个不需要任何参数的构造函数,这个构造函数在使用 实例化 JavaBean类时调用。如果 JavaBean类中没有任何构造函数,系统会自动生成一个没有参数的构造函数。 2.属性 JavaBean中的属性都应该定义为私有的,这样这些属性就只能通过 JavaBean内的方法访问或修改,从而较好地保护数据的完整性和封装性,也可以对数据加以约束。 5.1.2属性的类型 JavaBean有简单( Simple)属性、索引( Index)属性、绑定( Bound)属性和约定( Constrained)属性四种类型的属性。 1.简单属性 简单属性表示伴随有一对 get/set方法的变量。属性名和该属性相关的get/set方法名对应。 2.索引属性 索引属性表示一个数组值。使用该属性对应的 set/get方法可获取数组中的数值,该属性也可一次设置或取得整个数组的值。 5.2使用 JavaBean访问数据库 本节通过讲解如何利用 JavaBean连接并显示数据库表中的记录。在第 4章已讲过连接 SQL Server数据库的方法,现以 SQL Server为例,将连接封装在 JavaBean中,通过 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,dbPassword)方法建立连接,其中指定参数 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文件夹下(注意需要为 JavaBean指定一个包名),然后就可在项目中的 JSP文件中调用 JavaBean了。以下是两个具体的实例。 5.3.1用户注册的 JavaBean 本节中,将通过一个简单的例子演示如何在 JSP页面中访问JavaBean。 首先提供一个注册表单,让用户输入相关的信息,在用户提交表单后,将用户的注册信息保存到 JavaBean对象中,然后在另一个页面通过读取 JavaBean的属性来获得用户的注册信息。 5.3.2动态日历 本节主要讲解如何使用 JavaBean实现一个能根据年、月进行查找的日历程序。 本例具体步骤详见教材 126页。 本 章 小 结 本章主要介绍了 JavaBean的基本知识。利用 JavaBean组件来封装业务逻辑,可以避免在 HTML中嵌入大量的 Java代码,使得页面的显示和业务逻辑分离,提高了代码的可维护性。通过 JavaBean实现数据库连接及事物处理过程,可有效地将静态、动态工作分离开来,减少代码量,增强代码可读性并能极大地提高效率。 第 6章 JSP与 XML 随着 Web的广泛运用, HTML的局限性逐渐显露出来。HTML缺乏扩展性,标记定义比较模糊,因此可能导致错误的蔓延。人们在开发 Web应用时需要一种标准化的、具备高可扩展性并且结构严谨的新语言,由此诞生了 XML。 XML是 W3C推出的一种标记语言,它组合了其前身语言 SGML的强大功能和可扩展性,以及 Web应用的简洁性。目前, XML已经成为计算机行业内最热门的技术,它获得了广泛的行业支持,并且由于不断加强 XML标准,从而使 XML可以跨越所有边界,实现真正独立、跨平台的数据传送格式。 6.1XML语法规则 XML的全称是 extensible markup language,意思是可扩展的标记语言,它是标准通用语言( standard generalized markup language, SGML)的一个子集。 XML的语法规则既简单又严格,非常容易学习和使用。正因为如此,编写读取和操作 XML文档的软件也是相对容易的事情。 首先来看一个 XML文档( CH6-1.xml)的例子。 XML文档使用了自描述和简单的语法。 古乐声 国防科技大学 计算机 代码的第 1行是 XML声明,并且定义 XML的版本,目前发布的是 1.0版本,使用 gb2312字符集;代码的第 2行是这段代码内容的根元素,类似文章的标题,是 XML文档所必须声明的元素;代码的第 35行是根元素的子元素,在这里有 3个子元素 (作者、出版社、题材 );最后一行的代码则定义了根元素的结束,至此一段完整的XML代码就算完成了。从上面的例子可以看出,所有的元素都要有闭合标记,这并非是一个巧合,而是 XML语法规则定义的。 1.元素必须有闭合标记 2.XML标记都是大小写敏感的 3.在 XML中必须正确嵌套 4.所有 XML文档必须有且只能有一个根元素 5.XML文档元素的属性值必须使用引号 6.XML文档中的空白将被保留 6.2XML文档结构 一个 XML文档从逻辑上可以分为五个部分: XML声明、文档类型声明、元素、注释、处理指令。 6.2.1XML声明 XML数据文件的定义不像 HTML那样自由,它是非常严格的。 XML文档总是从一个 XML声明开始,在其中指明所有的 XML版本和文档编码等信息。下面是一个完整的 XML声明: XML文件的声明必须存在而且放在第一行,否则解析器不予解析。声明的作用是告诉浏览器或者其他处理程序这个文档是 XML文档。声明语句中的 “ version” 表示文档遵守的 XML规范的版本,它必须在属性列表中第一个出现; “ standalone” 表示文档是否是独立的,如果不带附带 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文件也是一个文本文档,通常用 “ .dtd”作为其扩展名。 通过文档类型声明,指出 XML文档所使用的 DTD, DTD文件的声明语句紧跟在 XML声明语句后面。文档类型声明有两种形式,一种是在一个外部的文件中声明 DTD。格式如下: 6.2.3元素 元素是 XML文档的基本单元,基本 XML文档必须包含一个或多个元素。一个 XML文档必须包含根元素,并且只能包含一个根元素。 一个元素的起始标签和结束标签的名字必须相匹配,并且标签名是大小写敏感的。所有以起始标签开始的元素都必须以与起始标签同名的结束标签作为结束,在起始和结束标签中间的文本是元素的内容,无内容的元素可以使用一种特殊的形式,即 。这里, “ ”之前的斜线实际上代替了结束标签。 元素名可以由字母、数字、连字符号、下划线、冒号以及句号组成。冒号用于划分命名空间。 元素可以没有或者有一个或多个属性,属性名的命名规则同元素命名规则相同。其名字和值由 “ =”分隔,并且属性值必须在单引号或者双引号之间,如果要在属性值里面使用单引号或双引号,那么就必须使用反斜线来进行转义。 元素和属性的格式如下: 元素的数据 XML元素的内容可以包含子元素、字符数据、字符引用和预定义实体引用、CDATA段。 1.子元素 子元素本身也是元素,被嵌套在上层元素之内。子元素是相对于父元素而言的,如果子元素还嵌套了其他元素,那么它同时也是父元素。 2.字符数据 在一个元素中,字符数据可以是不包括任何标记的起始定界符和 CDATA段的结束定界符在内的任意字符串,就是说在元素的内容中,字符数据不能有和号( &)和小于号( ”。在 CDATA段中,字符数据可以是不包括 CDATA段的结束定界符在内的任意字符串。 3.字符引用和预定义实体引用 在字符数据中,不能有和号( &)和小于号( )、双引号( )、单引号()、和号( &)。这五个特殊字符也可以通过字符引用的方式去引用。 字符引用和预定义实体引用都是以一个和号( &)开始并以一个分号( ;)结束的。如果用的是字符引用,需要在和号( &)之后加上井号(),之后是所需字符的十进制代码或十六进制代码。如果用的是预定义实体引用,在和号( &)之后写上字符的助记符。 4.CDATA段 CDATA段中包含的都是纯字符数据,在字符数据可以出现的任何地方都可以使用 CDATA段。 CDATA段主要用于需要将整个文本解释为字符数据而不是标记的情况下。 CDATA段中的内容不被 XML处理器分析,所以可以在其中包含任意的字符。例如,在 XML文档中含有 Java代码,而 Java代码可能存在着小于号( )、双引号( )、单引号()、和号( &)这些特殊字符,这个时候, CDATA段就派上用场了。 CDATA段以 “ ”标记结束。 6.2.4注释 在 XML文档中,注释可以出现在文档中其他标记之外的任何位置,另外,它们还可以在文档类型声明中语法允许的地方出现。 XML的注释和 HTML的注释类似,都是以 “ ” 结束。 注意:注释文本中不能出现字符 “ -” 和字符串“ -” ,且注释不能被嵌套。 6.2.5处理指令 处理指令( processing instruction, PI)允许文档中包含由应用程序来处理的指令。在 XML文档中,有可能会包含一些非 XML格式的数据,这些数据 XML处理器无法处理,此时就可以通过处理指令来通知其他应用程序来处理这些数据。 处理指令的语法和 XML声明类似,以 “ ” 标记结束。例如,一个常见的使用样式表单的处理指令如下所示: 6.2.4 幻灯片的编辑 开始标记 “ ?” 后的第一个字符串 “ xml-stylesheet”是处理指令的目标,它是必须要用到的应用程序,要注意的是,对于其他的非 W3C定义的处理指令不能以字符串 “ XML” 或 “ xml” 开头。其余的部分是传递给应用程序的字符数据。应用程序从处理指令中取得目标和数据,执行要求的动作。 处理指令的目标可以是要使用的程序的名字,或者是一个类似于 xml stylesheet这样的通用标识符。不同的应用程序支持不同的处理指令,对于不认识的处理指令,大多数应用程序采取忽略的方式进行处理。 xml-stylesheet处理指令总是放在 XML声明之后,第一个元素之前,其他的处理指令可以放在除标记的内部和 XML声明之前的任何位置。 6.3JSP和 XML的综合应用 JSP和 XML是 J2EE的两个至关重要的组件。作为建立在 Java Servlet之上的表达层技术, JSP技术允许将 HTML标记和服务器端脚本混合起来生成动态网页,从而使得动态网页的生成更加简单。同时,作为一种开发工具, XML简化了数据交换,因此受到开发人员喜爱并越来越流行。这使得在J2EE架构中利用 JSP访问 XML或集成 XML成为一种趋势。 在应用程序中,经常需要对 XML文档进行分析,以检索、修改、删除或重新组织其中的内容。例如,将应用程序运行所需要的一些配置信息以 XML文件格式进行保存,在程序启动时,读取 XML文件,从中取出有用的信息,这就需要对 XML文档进行解析。 在解析 XML文档时,通常是利用现有的 XML解析器对 XML文档进行分析,而编写的应用程序则通过解析器提供的 API接口得到 XML数据。整个过程如 下图 所示。 6.3.1使用 DOM解析 XML DOM是 document object model的缩写,即文档对象模型,它是 W3C组织推荐的处理 XML的标准接口。有关DOM技术报告可以在 /DOM/上查看。 DOM是独立于程序设计语言的, W3C组织以 IDL( interface definition language,接口定义语言)的形式定义了 DOM中的接口。某种程序语言要实现 DOM,需要将 DOM接口转换为本语言中的适当结构,为了保证不同语言的不同的 DOM之间可以实现广泛的兼容,W3C组织在 DOM规范的附录部分提供了 Java和ECMAScript这两种语言绑定。 DOM中的核心概念是结点。 DOM在分析 XML文档时,将组成 XML文档的各个部分(元素、属性、文本、注释和处理指令等)映射为一个对象,这个对象就叫做结点 (Node)。在内存中,这些结点形成一棵文档树。整棵树是一个结点,树中的每一个结点也是一棵树(子树),可以说, DOM就是对这棵树的一个对象描述,通过访问树中的结点存取 XML文档的内容。 在使用 DOM处理 XML的时候,需要读入整个 XML文档,然后在内存中创建 DOM树,生成 DOM树上的每个 Node对象。当文档比较小的时候,这不会造成什么问题,但是一旦文档很大,处理 DOM就会变得相当费时费力。 1.DOM中的 Node对象 DOM定义了一个 Node对象,表示 XML文档中的元素的Element对象和表示元素属性的 Attr对象都是从 Node对象派生而来。 Node对象是 DOM结构中最基本的对象,代表了文档树中的一个结点。然而在实际使用中,很少会真正用到Node对象,而是使用 Element、 Attr、 Text等 Node对象的子对象来操作文档。虽然在 Node中定义了对其子结点进行存取的方法,但是一些 Node对象的子对象,如Text对象(表示元素或属性的文本内容),并不存在子结点。 2.DocumentBuilder类的 parse()方法 在 java.xml.parsers包中,定义了 DOM解析器工
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 沪科版七年级上册数学第一次月考全真模拟试卷(含答案)
- 皮毛微生态肺过敏关联-洞察及研究
- 中国保险中介管理办法
- 规范石材加工管理办法
- 要素资源评估管理办法
- 警车保安登记管理办法
- 自营与资产管理办法
- 中央救市措施管理办法
- 英威腾项目管理办法
- 中医助理机构管理办法
- 能源管理系统平台软件数据库设计说明书
- JCT908-2013 人造石的标准
- 住院病历质量考核评分表
- 充电桩工程施工组织设计施工组织
- 执业兽医机构聘用证明或服务协议
- 身体尺(课件)二年级上册数学人教版
- 化验室检验和试验管理制度
- 欠款转为借款合同
- 公路隧道建设施工技术规范学习考试题库(400道)
- 严重创伤重症监护
- 人教版六年级语文上册生字表(带拼音词组)-2023修改整理
评论
0/150
提交评论