Internet技术的发展为编程人员提供了更广泛的施展身手的空间。早先"Internet应用程序"这个词仅仅只是指一些用FTP协议下载文件或浏览HTML页面的工具,而如今使用Visual Basic,不仅可以为Internet开发应用程序,而且还可以把Internet技术作为一部分融入大型的解决方案中。
今天我们所要讨论的问题是利用Visual Basic创建在面向Internet的应用中起重要作用的ActiveX组件。例如,你所创建的ActiveX控件可以用于HTML页面;你开发的ActiveX文档可以在Internet浏览器中使用并于其他的组件一起和HTML页面集成起来;另外ActiveX代码组件(以前被称为OLE服务器), 可以被部署在客户端或服务器端的计算机上用于后台的处理。
Internet的开发环境
Internet是一个使用TCP/IP协议、全球性的非集中管理的计算机网络。如果去掉全球性这一点, 所谓"Internet技术"完全可以和本地局域网中所使用的技术一样。
从一方面来看, Internet技术只是简单地为开发人员提供了另一个施展身手的空间。如果你在和Web连接时使用了ActiveX组件,尽管你具体实现的方法有可能不同,如采用了HTML和VBScript代码以实现安全性或是其他,但是你仍然在调用方法,设置属性,处理事件等等。这样,作为一个VB开发人员所有的知识和技能都被用于了Internet的环境下。
从另外一个方面来看,应用Internet的技术可以使你向一些吸引人的方向延伸你的开发工作。例如将ActiveX组件和Internet技术综合有以下的益处:
更简单的维护---作为Web一部分的组件可以根据需要下载,无须用户运行一个setup程序进行升级;
将功能延伸至Internet---通过通用协议,用户将看不见在Internet和Intranet之间的切换。
Internet客户/服务器
可以借用客户机/服务器的关系来考查Internet的开发环境,客户端和服务器端都可以有"静态的"和"活动的"两种状态。活动的客户机或服务器可以根据其内部状态的改变而动态地运行一个脚本或是改变其行为;而静态的客户机或服务器仅仅只是对外界激励作出反应。
Internet开发包括以下四种情形:
1. 静态的客户机和静态的服务器
2. 静态的客户机和活动的服务器
3. 活动的客户机和静态的服务器
4. 活动的客户机和活动的服务器
静态的客户机和静态的服务器
静态的客户向静态的服务器发送请求,服务器响应该请求并返回一个文件。一旦HTML页面被下载到客户端, 客户机和服务器的连接就终止,直到服务器接受到下一个请求。在使用FTP下载文件或是Usernet阅读新闻时也会发生同样的情形。
结合静态客户机的功能即为用Visual Basic中和Internet技术相关的ActiveX控件创建一个FTP工具,一个Web浏览器或是一个新闻读者等等。这些性能也可以被集成到一个大的应用程序中。
静态的客户机和活动的服务器
假如你正在使用一个静态的客户端, 例如和一个当前应用程序相连接的Web浏览器窗体, 以下载一个HTML页面,上面有文本框以输入查询内容,还有按钮以把用户输入的条目作为一个字符串发送给服务器。当你发送完文本之后,服务器返回一个已定制过的HTML页面-往往是通过调用一个DLL中的函数, 上面有你查询的结果。这就是一个"活动的"服务器的例子, 它自动处理数据并根据条件返回一个定制的结果。
创建活动服务器的途径之一就是通过使用Visual Basic开发的DLL并用Oleisapi2.dll实现访问。Oleisapi2.dll包含在Windows NT Server 4.0之中,是Internet Information Server (IIS)的一种功能,它包括了ISAPI的函数功能集。通过IIS和Oleisapi2.dll, 你可以在Web服务器上部署DLL, 并从客户端使用HTML页面上的信息或调用其方法。
活动的客户机和静态的服务器
当客户机拥有处理能力时称之为活动的客户机。活动的客户机拥有本地处理任务的能力,而不是请求服务器帮助处理。在客户机/服务器应用中,本地处理的能力不仅提高了任务完成的速度,而且减轻了服务器的负担。
活动客户机的情形有很多种。例如,用Visual Basic构建的ActiveX文档几乎可以包括所有传统应用的功能。当你把它放到一个容器中时, 例如Internet Explorer, 你的客户端就完全拥有了传统Visual Basic中所有的动态功能。客户端也可以通过在一个HTML页面中使用VBScript调用ActiveX控件或DLL实现。
活动的客户机和活动的服务器
如果采用活动客户机和活动服务器的模式可以充分发挥优势: 分布式的功能便于扩展,灵活的解决方案可以充分利用系统和网络资源。
在三层结构的客户机/服务器环境中开发部署的应用中,其组件分布于整个网络上, 总起来完成提供用户界面, 实现业务准则和数据访问的功能,而且由于可以充分利用客户端和服务器端的处理能力,可以实现更复杂的数据访问功能。
一个活动的服务器可以负责跟踪客户提交的查询表格,提交查询并返回结果。一个活动的客户机则负责将返回的结果展现给用户, 然后将改变的内容返回给服务器。另外通过Internet组件的下载,当用户访问Web站点时, 可以自动更新客户端提交查询和处理结果的准则。
在Web上使用ActiveX组件
ActiveX组件为Internet技术带来了新的功能。通过Internet组件的下载,超连接,菜单协商等各种功能,将ActiveX组件和Internet集成起来,内容和应用程序之间的界线也越来越模糊。另外由于在站点上(在客户机和服务器之间)分布功能函数,我们可以创建更具扩展性和灵活性的站点。
在Internet应用程序中使用ActiveX文档
使用ActiveX文档, 我们可以开发和Internet/Intranet站点的其他元素紧密集成的Visual Basic的应用程序。利用这些组件开发出来的应用程序,用户可以透明地在HTML页面和ActiveX文档之间迁移。
可以把ActiveX文档作为Visual Basic为Internet提供的应用。几乎所有现在用标准应用程序完成的工作都可以用ActiveX文档实现。
作为HTML页面中的一个元素,如果在用户的客户机上没有安装ActiveX文档, 当用到它们时, 可以自动地从网上下载;如果客户机上的版本比较旧, 也可以可以自动升级。ActiveX文档的许多特性提供了很好的安装,导航性能,并可以保证很好的持续一致性:
Internet组件的下载---你可以创建一个到你的ActiveX文档的连接,使浏览器可以自动找到并下载所有需要的组件。
超连接对象---在一个超连接感知的包容器中,你可以使用Visual Basic的超连接对象的属性和方法以跳转到一个给定的URL或是通过历史的记录清单进行导航。
菜单和协商---由于可以从Word或Excel中获得文档,Visual Basic的ActiveX文档提供了将其菜单嵌入浏览器中的菜单的功能。例如当文档被装载入Internet Explorer中后,浏览器的菜单将和你为该ActiveX文档创建的菜单混合。
PropertyBag---当你在Internet Explorer中部署一个ActiveX文档时, 你可以通过PropertyBag对象保持数据的一致性。
下面我们来看一看如何在Internet Explorer中部署一个ActiveX文档。假设我们要通过一个HTML页面中的超连接连接到这个ActiveX文档上:
用HTML创建引用这个ActiveX文档的连接。
由于ActiveX文档将在Internet Explorer中取代HTML页面,所以有必要将组件的OBJECT标签放在另一个HTML页面中。当跳转到该页面后,一旦ActiveX文档被装载,它就会立刻消失。
用HTML为浏览器提供下载、注册以及导航到这个ActiveX文档的途径。
在OBJECT标签中应该说明ActiveX文档的类ID和CODEBASE属性。
在同一页面上, 使用VBScript指示Internet Explorer立刻通过相应的.vbd文件导航到该ActiveX文档上。
在Internet应用程序中使用ActiveX控件
ActiveX控件为你的HTML页面带来了活力。通过HTML和VBScript, 你可以在一个HTML页面上使用ActiveX控件, 设置它们的属性,调用它们的方法并处理它们的事件。一个包含控件的的HTML页面仿佛一个Visual Basic的设计窗口。ActiveX控件可以提供更多的交互式的,生动的用户界面特性,使HTML页面变得更加有活力。
一般需要通过HTML和VBScript的综合手段引用并控制ActiveX控件的行为。使用HTML为浏览器提供下载,注册并引用ActiveX控件引用的途径。在HTML代码的OBJECT标签中需要包括:
控件的类别ID, 以使程序能在Windows的注册表中找到它们;
ID的属性,以便在VBScript中引用该控件(类似于Visual Basic中的Name属性);
CODEBASE属性,告诉浏览器如果组件不在客户机上该去哪儿找;
PARAM NAME标签,设置控件的属性参数。
然后用VBScript编写处理单击事件的代码,使每一个控件被单击后,程序可以作相应的动作。
Visual Basic专业版中还包括了三个已预先设计好的用于包裹Internet相关技术的控件, 使你能够扩展已有的应用程序,它们是:
Internet Transfer Control---包裹了三种通用的Internet协议:HTTP, FTP和Gopher;
WebBrowser Control---包含了许多通过Internet Explorer可以获得的功能;
WinSock Control---使你可以连接到一台远程的机器, 然后通过UDP或TCP交换数据。
通过使用这些控件, 你可以添加从FTP站点自动下载文件的功能,还可以为Visual Basic IDE提供Web浏览器的Add-in。
在Internet应用程序中使用ActiveX代码组件
无论是在客户端或是在服务器端, 都可以使用ActiveX代码组件(.dll或.exe文件), 从而为HTML页面添加功能。
在客户端部署代码组件, 由于用户的命令无须通过网络传输回服务器,可以大大提高运行速度。服务器端的组件同样也可以有显示用户界面可视化元素的功能。通过下载一个DLL, 我们可以在HTML页面上添加用户界面的元素,如一个登录对话框; 还可以提供幕后的客户端处理能力,例如一个伴随VBScript的函数库。
客户端的部署工作类似于对ActiveX控件的使用,你同样需要使用HTML和VBScript代码引用并编写代码组件。下面给出了一个用HTML和VBScript代码编写调用DLL以显示登录对话框的实例:
1. 使用HTML创建一个窗体,其中包含一个按钮以调用登录对话框:
<FORM NAME="LoginButton">
Click here to login in:
<INPUT NAME="cmdLogin" TYPE="Button" VALUE="Log in ...">
</FORM>
2. 用HTML为浏览器提供下载,注册及引用ActiveX组件的途径:
<OBJECT
Classid="clsid:2F390484-1C7D-11D0-8908-00A0C90395F4"
id="Login"
codebase="Login.cab#version=1,0,0,0"
>
</OBJECT>
3. 用VBScript调用组件中的方法以显示登录对话框:
<SCRIPT LANGUAGE="VBScript">
Dim dlgLogin
Dim TheForm
Set TheForm=Document.LoginButton
Sub cmdLogin_onClick
Set dlgLogin=Login
dlgLogin.ShowDialog
End Sub
</SCRIPT>
组件自身中将包含用于形成登录字符串的代码,并将它发送给服务器用于验证。
另一种将DLL和Internet技术结合的方法是将它部署在服务器端。如果你有Internet Information Server (IIS)-包含在Windows NT Server 4.0中, 你可以通过Visual Basic关盘中的Tools目录下的Oleisapi2.dll调用Visual Basic中内置的DLL函数。
Oleisapi2.dll中包含了ISAPI中的所有函数。你可以把DLL部署在HTTP服务器上, 并通过HTML页面上发送的信息调用其方法。Oleisapi2.dll作为客户请求到DLL之间的中介。由于代码是基于HTML的,这些请求仅仅是简单的URL。
通过服务器端的DLL可以由客户提供的参数定制返回给客户的HTML页面,还可以管理数据库的连接,对接受到的请求和返回的结果进行整理和编组。