ASP 3.0高级编程(四十四)
程序员文章站
2023-02-20 22:07:30
第10章 asp与客户端数据
在一本asp专著中讨论客户端数据,这与服务器端的asp是否矛盾?情况并非如此,因为我们至今尚未碰到只从事服务器端编程的asp程序员。虽然asp是...
第10章 asp与客户端数据
在一本asp专著中讨论客户端数据,这与服务器端的asp是否矛盾?情况并非如此,因为我们至今尚未碰到只从事服务器端编程的asp程序员。虽然asp是一项服务器端技术,但可以想象,编程人员不可能仅仅使用asp进行编程。从事asp编程的web开发人员,仍然需要与客户端数据进行交互。
因此,围绕着asp构建一个应用程序时必须考虑整个应用程序的情况,这也意味着必须考虑客户端。为了获得一个运行良好、快速响应的应用程序,需要很好地使用客户端数据。
本章将讨论如何在客户端使用数据。特别将着重研究:
· 远程数据服务(remote data services,rds),如何向客户端传送数据以及客户端接收数据。
· 如何将ado记录集绑定到html控件。
· 如何利用用户自定义提供数据。
· 如何更新客户端数据,并将其反馈到服务器。
· 如何从中获取图像并将其显示在web页面中。
· 如何创建基于表格的web页面。
以上覆盖的范围相当广泛,同时有很多不同的方法可以取得相同的结果,但实际上实现起来并不是特别困难。
10.1 断开连接的记录集
首先需要掌握的是“断开连接的数据”的概念。迄今为止,在研究ado的过程中,已经学习了获取记录集的方法,以及如何修改这些记录集中的数据。回顾一下,我们打开一个记录集,对数据做一些修改,然后再关闭这个记录集,在操作记录集的过程中,始终与服务器保持着连接。这是相当明显的,但别忘了web在本质上是无状态的。如果想使用客户端数据,如何始终保持与服务器的连接?很简单,这是不可能实现的,这也是定义断开连接的记录集概念的缘由。
一个断开连接的记录集只是一个普通的记录集,但解除了与服务器的连接,成为孤立的对象,可以像普通的记录集那样对其执行更新、增加和删除操作。但这些变化只发生在记录集内部,并不反馈到服务器,因为记录集与服务器已不再保持着连接。这并不是缺点,因为可以与服务器重新建立连接,同时服务器可以对任何修改进行更新。即使服务器端的数据已经改变了,ado仍然有方法让用户及时发现这些变化,这样用户就能决定哪些数据是正确的。这称为冲突处理(conflict resolution)。
断开连接的记录集使我们能在组件之间,包括服务器与客户之间,传送具有全部功能的记录集。本章后面将探讨如何在组件内创建断开连接的记录集。但这里不准备对此做过于详细的研究,因为本书第13章至第18章已经覆盖这部分内容,这里仅做简单的介绍,以便于了解组件是如何与远程数据服务交互的。
10.2 远程数据服务
远程数据服务(remote data services,rds)是允许我们处理客户端数据的一系列服务的统称。现在不用担心这方面的问题,因为rds本身就是ado的一部分,只有在需要传送和使用客户端数据时,才会使用。实际上rds是由几个组件构成的。图10-1说明了这些组件以及它们之间是如何协同工作的。
图10-1 rds的组件构成
组件似乎很多,但并不是所有的组件在每种情形下都被使用,实际上有一些不是rds的一部分。然而这里还是把所有可能出现的组件都放在了图上,以备需要时查看。图10-1分成了两部分,因为使用客户端数据需要一些向客户端传送数据的方法,同时数据一旦到达客户端,也需要一些管理数据的方法。我们先从服务器端开始。
10.2.1 rds服务器组件
虽然rds用于传送和访问客户端数据,但其确实有一些基于服务器的组件。这是必需的,因为肯定需要某种方式将数据传送到客户端。因此有了一系列能访问数据并允许发送数据到客户端的服务器组件。我们把实际的数据传送称为调度(marshal)。
服务器端组件图的最上端是数据存储,由ole db提供者访问。它并不是rds的一部分,但这表示只要有相应的ole db提供者,就可以通过rds在客户端使用任何数据。至于如何处理服务器上的数据,可以有两种选择:
· 数据工厂(datafactory)是缺省的用于访问数据存储的服务器端组件。它作为服务器端rds组件的一部分安装在计算机上,除了能从数据存储中获取数据外,还为服务器处理发送到客户端以及从客户端发送来的数据。
· 自定义组件只是一个普通的提供了数据传送方法的com组件。当数据工厂不能提供所需的功能时,可以使用自定义组件。本章将介绍一个简单的组件例子,在本书的后面还有一个更复杂的例子。
web服务器使用这两种组件作为客户和服务器数据的接口。
10.2.2 rds客户组件
在客户端先从底端的dataspace对象开始,该对象作为客户端的一部分与数据工厂或自定义对象协同工作。dataspace对象是一个代理对象,负责与服务器进行通信,同时也是数据传输的通道(或者通常所说的调度)。dataspace对象是用客户端脚本语言或用html语言中的<object>标记创建的com对象。在本章后面会看到关于这方面的例子。
dataspace对象上面是数据源对象(data source object,dso),负责存储客户端数据。一个数据源对象包含一个ado数据记录集,与客户数据缓存共同管理数据。客户数据缓存只是一种管理客户端数据的客户光标服务。同时数据源对象又是一个com对象,与dataspace对象类似,也可以通过客户端脚本或使用html语言中的<object>标记来创建。同样,在本章稍后也会介绍关于这方面的一些例子。
数据源对象的上面是数据绑定管理器,任务是建立html控件与数据源对象的连接。这就是我们所知道的绑定,可以通过设置某些html控件的datasrc和datafld属性来实现。下面将对这些内容进行讨论,并示范如何在中方便地使用数据。
10.2.3 支持rds的浏览器
要知道rds是微软的技术,因此只能在微软的浏览器上工作。实际上,只有在ie 4.0或更高版本的浏览器中才完全支持rds。
当编写依赖于rds的应用程序时,需要注意访问应用程序的客户的rds版本可能与服务器端有所不同。举例来说,ie 4中的是rds 1.5版本,而ie 5、office 2000和visual studio 6中的则是rds 2.0版本。有两种方法可以处理这种兼容性问题:
· 确保所有用户已经升级到rds的最新版本。如果客户运行的是windows 2000,那么已经在运行最新版本的rds了。否则,可以从网址www.microsoft.com/data处下载。rds 2.5版本是目前最新的随同windows 2000一起发布的版本,同时也是一个可单独下载的软件包。
· 当连接到数据源时,指定数据工厂的模式。这可以指定使用的是哪一个版本的rds组件,后面将介绍这方面的一个例子。
10.2.4 数据源对象
数据源对象是一个存储和管理客户端数据的客户端对象。因为这是使用rds最简单的一种方式,首先研究一下这些对象。
这里有几个不同的数据源对象,每一个都针对不同类型的数据:
· 表格数据控件(tabular data control,tdc),用于处理表格形式或分隔形式的文本文件。
· rds数据控件,用于连接ole db数据存储,能够指定连接到哪个数据存储,以及返回哪些数据。
· java数据库连接器,这是一个通过java数据库控件(java database control,jdbc)连接到数据存储的java小程序。这里我们不想讨论jdbc,因为它并不提供其他控件无法实现的功能。
· 微软的html(mshtml)数据源对象用html标记数据,并把它作为数据源。
· xml数据源对象使用xml数据,用于结构化的或任意结构的xml。
选用哪一种数据源对象取决于你想做什么,以及数据从哪里来。如果需要向客户提供少量的数据,并且不允许用户修改数据,那么表格数据控件(tdc)可能会比较适合。这种数据源是一个文本文件,不需要任何数据库,因此编辑起来比较简单。对于从数据库中取出数据并且可能需要更新的情况,rds数据控件是最合适的。而对于许多新数据源,会发现此时需要使用xml数据控件。这实际依赖于所使用的web应用程序的类型,以及用户所需的功能。
我们将依次介绍这些数据控件,一旦了解了如何用它们把数据传送到客户端,将会介绍如何使用这些数据。
1. 表格数据控件
表格数据控件(tabular data control,tdc)是最简单的数据源对象,主要用于少量的只读数据,特别是那些从不改变或很少修改的,不需要从客户端进行更新的静态数据。例如,表格数据控件能提供一个网页内的菜单项或链接的列表。
通过在html代码中使用<object>标记可以创建一个表格数据控件。参数dataurl可以指定包含文本数据的文件名。
<object classid="clsid:333c7bc4-460f-11d0-bc04-0080c7055a83"
id="dsoauthors" width="0" height="0">
<param name="dataurl" value="authors.csv">
</object>
tdc只读取表格中的数据或标记为表格形式的数据,例如,可以处理逗号分隔形式的数据(comma separated value, csv),类似于下面的数据:
"172-32-1176","white","bob","408 496-7223"
"219-46-8915","green","marjorie","415 986-7020"
"238-95-7766","carson","cheryl","415 548-7723"
"267-41-2394","oleary","michael","408 286-2428"
"274-80-9391","straight","dean","415 834-2919"
"341-22-1782","smith","meander","913 843-0462"
"409-56-7008","bennet","abraham","415 658-9932"
tdc也可以*定义。除了dataurl外,tdc还有16个参数,可以通过设置object标记的参数
在一本asp专著中讨论客户端数据,这与服务器端的asp是否矛盾?情况并非如此,因为我们至今尚未碰到只从事服务器端编程的asp程序员。虽然asp是一项服务器端技术,但可以想象,编程人员不可能仅仅使用asp进行编程。从事asp编程的web开发人员,仍然需要与客户端数据进行交互。
因此,围绕着asp构建一个应用程序时必须考虑整个应用程序的情况,这也意味着必须考虑客户端。为了获得一个运行良好、快速响应的应用程序,需要很好地使用客户端数据。
本章将讨论如何在客户端使用数据。特别将着重研究:
· 远程数据服务(remote data services,rds),如何向客户端传送数据以及客户端接收数据。
· 如何将ado记录集绑定到html控件。
· 如何利用用户自定义提供数据。
· 如何更新客户端数据,并将其反馈到服务器。
· 如何从中获取图像并将其显示在web页面中。
· 如何创建基于表格的web页面。
以上覆盖的范围相当广泛,同时有很多不同的方法可以取得相同的结果,但实际上实现起来并不是特别困难。
10.1 断开连接的记录集
首先需要掌握的是“断开连接的数据”的概念。迄今为止,在研究ado的过程中,已经学习了获取记录集的方法,以及如何修改这些记录集中的数据。回顾一下,我们打开一个记录集,对数据做一些修改,然后再关闭这个记录集,在操作记录集的过程中,始终与服务器保持着连接。这是相当明显的,但别忘了web在本质上是无状态的。如果想使用客户端数据,如何始终保持与服务器的连接?很简单,这是不可能实现的,这也是定义断开连接的记录集概念的缘由。
一个断开连接的记录集只是一个普通的记录集,但解除了与服务器的连接,成为孤立的对象,可以像普通的记录集那样对其执行更新、增加和删除操作。但这些变化只发生在记录集内部,并不反馈到服务器,因为记录集与服务器已不再保持着连接。这并不是缺点,因为可以与服务器重新建立连接,同时服务器可以对任何修改进行更新。即使服务器端的数据已经改变了,ado仍然有方法让用户及时发现这些变化,这样用户就能决定哪些数据是正确的。这称为冲突处理(conflict resolution)。
断开连接的记录集使我们能在组件之间,包括服务器与客户之间,传送具有全部功能的记录集。本章后面将探讨如何在组件内创建断开连接的记录集。但这里不准备对此做过于详细的研究,因为本书第13章至第18章已经覆盖这部分内容,这里仅做简单的介绍,以便于了解组件是如何与远程数据服务交互的。
10.2 远程数据服务
远程数据服务(remote data services,rds)是允许我们处理客户端数据的一系列服务的统称。现在不用担心这方面的问题,因为rds本身就是ado的一部分,只有在需要传送和使用客户端数据时,才会使用。实际上rds是由几个组件构成的。图10-1说明了这些组件以及它们之间是如何协同工作的。
图10-1 rds的组件构成
组件似乎很多,但并不是所有的组件在每种情形下都被使用,实际上有一些不是rds的一部分。然而这里还是把所有可能出现的组件都放在了图上,以备需要时查看。图10-1分成了两部分,因为使用客户端数据需要一些向客户端传送数据的方法,同时数据一旦到达客户端,也需要一些管理数据的方法。我们先从服务器端开始。
10.2.1 rds服务器组件
虽然rds用于传送和访问客户端数据,但其确实有一些基于服务器的组件。这是必需的,因为肯定需要某种方式将数据传送到客户端。因此有了一系列能访问数据并允许发送数据到客户端的服务器组件。我们把实际的数据传送称为调度(marshal)。
服务器端组件图的最上端是数据存储,由ole db提供者访问。它并不是rds的一部分,但这表示只要有相应的ole db提供者,就可以通过rds在客户端使用任何数据。至于如何处理服务器上的数据,可以有两种选择:
· 数据工厂(datafactory)是缺省的用于访问数据存储的服务器端组件。它作为服务器端rds组件的一部分安装在计算机上,除了能从数据存储中获取数据外,还为服务器处理发送到客户端以及从客户端发送来的数据。
· 自定义组件只是一个普通的提供了数据传送方法的com组件。当数据工厂不能提供所需的功能时,可以使用自定义组件。本章将介绍一个简单的组件例子,在本书的后面还有一个更复杂的例子。
web服务器使用这两种组件作为客户和服务器数据的接口。
10.2.2 rds客户组件
在客户端先从底端的dataspace对象开始,该对象作为客户端的一部分与数据工厂或自定义对象协同工作。dataspace对象是一个代理对象,负责与服务器进行通信,同时也是数据传输的通道(或者通常所说的调度)。dataspace对象是用客户端脚本语言或用html语言中的<object>标记创建的com对象。在本章后面会看到关于这方面的例子。
dataspace对象上面是数据源对象(data source object,dso),负责存储客户端数据。一个数据源对象包含一个ado数据记录集,与客户数据缓存共同管理数据。客户数据缓存只是一种管理客户端数据的客户光标服务。同时数据源对象又是一个com对象,与dataspace对象类似,也可以通过客户端脚本或使用html语言中的<object>标记来创建。同样,在本章稍后也会介绍关于这方面的一些例子。
数据源对象的上面是数据绑定管理器,任务是建立html控件与数据源对象的连接。这就是我们所知道的绑定,可以通过设置某些html控件的datasrc和datafld属性来实现。下面将对这些内容进行讨论,并示范如何在中方便地使用数据。
10.2.3 支持rds的浏览器
要知道rds是微软的技术,因此只能在微软的浏览器上工作。实际上,只有在ie 4.0或更高版本的浏览器中才完全支持rds。
当编写依赖于rds的应用程序时,需要注意访问应用程序的客户的rds版本可能与服务器端有所不同。举例来说,ie 4中的是rds 1.5版本,而ie 5、office 2000和visual studio 6中的则是rds 2.0版本。有两种方法可以处理这种兼容性问题:
· 确保所有用户已经升级到rds的最新版本。如果客户运行的是windows 2000,那么已经在运行最新版本的rds了。否则,可以从网址www.microsoft.com/data处下载。rds 2.5版本是目前最新的随同windows 2000一起发布的版本,同时也是一个可单独下载的软件包。
· 当连接到数据源时,指定数据工厂的模式。这可以指定使用的是哪一个版本的rds组件,后面将介绍这方面的一个例子。
10.2.4 数据源对象
数据源对象是一个存储和管理客户端数据的客户端对象。因为这是使用rds最简单的一种方式,首先研究一下这些对象。
这里有几个不同的数据源对象,每一个都针对不同类型的数据:
· 表格数据控件(tabular data control,tdc),用于处理表格形式或分隔形式的文本文件。
· rds数据控件,用于连接ole db数据存储,能够指定连接到哪个数据存储,以及返回哪些数据。
· java数据库连接器,这是一个通过java数据库控件(java database control,jdbc)连接到数据存储的java小程序。这里我们不想讨论jdbc,因为它并不提供其他控件无法实现的功能。
· 微软的html(mshtml)数据源对象用html标记数据,并把它作为数据源。
· xml数据源对象使用xml数据,用于结构化的或任意结构的xml。
选用哪一种数据源对象取决于你想做什么,以及数据从哪里来。如果需要向客户提供少量的数据,并且不允许用户修改数据,那么表格数据控件(tdc)可能会比较适合。这种数据源是一个文本文件,不需要任何数据库,因此编辑起来比较简单。对于从数据库中取出数据并且可能需要更新的情况,rds数据控件是最合适的。而对于许多新数据源,会发现此时需要使用xml数据控件。这实际依赖于所使用的web应用程序的类型,以及用户所需的功能。
我们将依次介绍这些数据控件,一旦了解了如何用它们把数据传送到客户端,将会介绍如何使用这些数据。
1. 表格数据控件
表格数据控件(tabular data control,tdc)是最简单的数据源对象,主要用于少量的只读数据,特别是那些从不改变或很少修改的,不需要从客户端进行更新的静态数据。例如,表格数据控件能提供一个网页内的菜单项或链接的列表。
通过在html代码中使用<object>标记可以创建一个表格数据控件。参数dataurl可以指定包含文本数据的文件名。
<object classid="clsid:333c7bc4-460f-11d0-bc04-0080c7055a83"
id="dsoauthors" width="0" height="0">
<param name="dataurl" value="authors.csv">
</object>
tdc只读取表格中的数据或标记为表格形式的数据,例如,可以处理逗号分隔形式的数据(comma separated value, csv),类似于下面的数据:
"172-32-1176","white","bob","408 496-7223"
"219-46-8915","green","marjorie","415 986-7020"
"238-95-7766","carson","cheryl","415 548-7723"
"267-41-2394","oleary","michael","408 286-2428"
"274-80-9391","straight","dean","415 834-2919"
"341-22-1782","smith","meander","913 843-0462"
"409-56-7008","bennet","abraham","415 658-9932"
tdc也可以*定义。除了dataurl外,tdc还有16个参数,可以通过设置object标记的参数
上一篇: 那年毕业典礼之后
下一篇: python 用下标截取字符串的实例